2012-03-05 81 views
4

这显然是R的survey package特有的东西。我正在尝试使用plyr package中的llply列出svyglm型号。这里有一个例子:在plyr调用中使用svyglm

library(survey) 
library(plyr) 

foo <- data.frame(y1 = rbinom(50, size = 1, prob=.25), 
        y2 = rbinom(50, size = 1, prob=.5), 
        y3 = rbinom(50, size = 1, prob=.75), 
        x1 = rnorm(50, 0, 2), 
        x2 = rnorm(50, 0, 2), 
        x3 = rnorm(50, 0, 2), 
        weights = runif(50, .5, 1.5)) 

我因变量一栏中的数字列表

dvnum <- 1:3 

指示该样品中没有集群或地层

wd <- svydesign(ids= ~0, strata= NULL, weights= ~weights, data = foo) 

单svyglm调用工作

svyglm(y1 ~ x1 + x2 + x3, design= wd) 

And llply将使基础R的列表glm车型

llply(dvnum, function(i) glm(foo[,i] ~ x1 + x2 + x3, data = foo)) 

llply引发以下错误,当我尝试这个方法适应svyglm

llply(dvnum, function(i) svyglm(foo[,i] ~ x1 + x2 + x3, design= wd)) 

Error in svyglm.survey.design(foo[, i] ~ x1 + x2 + x3, design = wd) : 
all variables must be in design= argument 

所以我的问题是:我怎么使用llplysvyglm

+0

您可能需要运行一个循环,为每个模型创建适当的公式对象。 – 2012-03-05 21:24:24

回答

1

迪文对他的评论是正确的公式。

reformulate会这样做。

dvnum <- names(foo)[1:3] 

llply(dvnum, function(i) { 
    svyglm(reformulate(c('x1', 'x2', 'x3'),response = i), design = wd)})