循环遍历svy包中的数据集变量

时间:2012-09-24 22:29:13

标签: r

我已经构建了一个R函数,它在一系列列上使用相同的解释变量。我使用了glm函数,但现在我需要对调查包中的svyglm执行相同的操作。我遇到的主要问题是我不能像svyglm(Data[,i]~explanatoryVariables)那样使用glm来构建循环,因为它不喜欢列名(但在循环中非常实用)。

例如,如果您尝试

library(survey)
data(api)
dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc)
summary(svyglm(api00~ell+meals+mobility, design=dstrat))

一切都很好,但是如果你想通过使用列号(这里是13)来遍历几个因变量,你会得到一个错误

summary(svyglm(apistrat[,13]~ell+meals+mobility,data=apistrat, design=dstrat))

有谁知道怎么解决这个问题?举一个简单的例子(不要介意统计准确性或链接函数)我需要在正常glm中实现相同的效果,但使用svyglm而不是

for(i in (12:15)){
print(glm(apistrat[,i]~ ell+meals,data=apistrat)$aic)
}

1 个答案:

答案 0 :(得分:2)

您需要使用as.formula粘贴相应的列进行评估。我为你的案例创建了一个自定义函数:

mysvy <- function(data, columns, ...) {
    model <- lapply(as.list(columns), function(x) {
          summary(svyglm(as.formula(paste0(names(data)[x], "~ell+meals+mobility")), 
            data = data, ...))
        })
    return(model)
}

然后,您可以通过该功能运行所需的列。

# To run columns 13 - 15 and get the results into a list
results <- mysvy(apistrat, 13:15, design = dstrat)
# should return a list of 3. results[[1]] to see the first