2013-03-12 3 views
0

У меня есть следующие данные в data.table:по групповому анализу с использованием svyglm в data.table

 h   x1 y1 swNx11 
    1: 1 39.075565717 0 1.03317231703408 
    2: 1 40.445951251 0 7.14418755725832 
    3: 1 37.800722944 0 0.435946586361557 
    4: 1 41.085221504 0 0.381347141150498 
    5: 1 36.318077491 0 0.497077163135359 
---              
24996: 25 39.110138193 0 0.942922612158002 
24997: 25 39.331940413 0 1.42227399208458 
24998: 25 37.479473784 0 0.390657876415799 
24999: 25 35.892044242 0 0.599937357458247 
25000: 25 40.699588303 0 0.486486760245521 

Я создал функцию, чтобы анализировать их в svyglm:

msmMC <- function(y, x, sw, name){ 
msm <- svyglm(y ~ x,family=quasibinomial(link="logit"),design = svydesign(~ 1, weights = ~ sw)) 
out <- cbind("name",coef(summary(msm))[2,1],coef(summary(msm))[2,2]) 
return(out) 
} 

msmswNx1<-dt2[,list(dtmsm=list(msmMC(y1, x1, swNx1, Nx1))),by="h"] 
outNx1 <- unlist(dt.lm[,msmswNx1]) 

Когда я запускаю эту функцию, я получаю следующую ошибку:

Ошибка в [.data.table (dt2,, list (dtmsm = list (msmMC (y1, x1, swNx1,: столбец или выражение 1 из 'по 'или' keyby '- это список типов. Не q имена столбцов uote. Использование: DT [, sum (colC), by = list (colA, month (colB))]

Но он отлично работает с другой моделью, такой как glm или polr. и так, что здесь происходит? Почему svyglm настолько придирчив к обработке по группам с помощью data.table?

+0

вы заменили одну опечатку с другой, ошибка показывает, что у вас есть 'dt2 [, список (dtmsm = список (msmMC (y1, x1, swNx1, Nx1))), по =" ч "]' не то, что вы написали, так как в сообщении об ошибке есть пустой аргумент 'j'. '[.data.table (dt2,, list (dt'. – mnel

+0

, учитывая, что вы не указываете ни одного слоя, блока питания или репликации весов, я сомневаюсь, что ваши данные на самом деле представляют собой сложный образец обследования. нет, у вас нет причин использовать пакет 'survey' или' svyglm' - вместо этого просто используйте аргумент 'weights =' функции 'glm'. По моему опыту объекты' survey' не работают чисто 'data.table' или' ffdf' или любые другие странные типы данных. :) –

+0

@ Энтони: Действительно, мои данные не получены из проекта обследования. Я пытаюсь подобрать модель с обратной вероятностной взвешиванием. опрос, чтобы получить надежные стандартные ошибки для бета-коэффициента в моей модели. Насколько я знаю, я не могу это сделать с помощью функции glm. Я могу? Любые мысли? – user1849779

ответ

0

Я сомневаюсь, что он работал для lmglm или polr, так как ошибка является аргументом, соответствующим одному.

Вам нужно будет обернуть все это в list

dt2[,list(dtmsm=list(msmMC(y1, x1, swNx1, Nx1))),by="h"] 

Или, возможно, вы просто неуместны на list вызов, учитывая, что msmMC, кажется, возвращает объект, который может представлять собой data.frame, список или данные .table

dt2[,list(dtmsm=msmMC(y1, x1, swNx1, Nx1)),by="h"] 
+0

Да, хороший улов. Вопрос отредактирован. Благодарю. – user1849779

+0

@ user1849779 - ваше сообщение об ошибке приходит из новой опечатки, которую вы только что представили ..... – mnel