R 在svy包中循环使用数据集变量

R 在svy包中循环使用数据集变量,r,R,我构建了一个R函数,它在一系列列上使用相同的解释变量。我已经使用了glm函数,但是现在我需要对调查包中的svyglm执行相同的操作。我遇到的主要问题是,我不能像在glm中那样使用svyglm(Data[,I]~explanatoryVariables)构建循环,因为它不喜欢列名(尽管列名在循环中非常实用) 例如,如果您尝试 library(survey) data(api) dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=a

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

例如,如果您尝试

library(survey)
data(api)
dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc)
summary(svyglm(api00~ell+meals+mobility, design=dstrat))
有人知道怎么避开这件事吗?为了给出一个简单的例子(不考虑统计精度或链接函数),我需要在正常的
glm
中实现这一点,但使用
svyglm

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

您需要使用
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)
}

mysvy看看这个问题和答案
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