通过在data.table中使用svyglm进行分组分析

时间:2013-03-12 00:46:18

标签: r cluster-analysis data.table

我在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,:   'by'或'keyby'的列或表达式1是类型列表。不要引用列名。用法:DT [,sum(colC),by = list(colA,month(colB))]

然而,它适用于不同的模型,例如glm或polr。那么这里发生了什么?为什么svyglm对使用data.table进行分组处理如此挑剔?

1 个答案:

答案 0 :(得分:0)

我怀疑它是否适用于lm glmpolr,因为错误是与之匹配的参数。

您需要将整个内容包装在list

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

或者,您可能错误地放置了list调用,因为msmMC似乎返回了一个可能是data.frame,list或data.table的对象。

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