通过 R 中的多个因变量和自变量循环逻辑回归

looping logistic regressions through multiple dependent and independent variables in R

与许多人一样,我相信这不是一个困难的答案,但作为 RI 的新手我一直无法弄明白。

我有一个包含大约 10 万个案例的数据集,我正在尝试 运行 一系列循环遍历各种因变量和自变量的逻辑回归。

我不确定如何在此处提供数据,但这里有一个示例:

Loc1  loc2  loc3  demo1  demo2  demo3  demo4  demo5  Outcome1  Outcome2
1     0     0     0      1      0      0      1      1         0
0     1     0     1      0      0      1      0      0         1
1     0     0     0      0      1      0      1      0         1
0     0     1     1      0      0      1      0      1         0

基本上,它是一堆虚拟变量,我想 运行 像这样进行一堆回归: glm(结果~位置*人口统计变量)

其中 9 个地点和 13 个不同的人口统计变量的每个组合将预测 4 个结果变量。

同样 - 我认为这不是一个困难的答案,但我很难弄清楚如何像这样同时循环多个变量。 提前致谢。

好的 - 让我试着澄清一下。 我主要想 运行 按位置分组的回归,所以我会看到位置 1 的所有回归,然后是位置 2、位置 3 等的所有回归。

有 9 个不同的位置、13 个不同的人口统计变量和 4 个不同的结果变量。

我想要一个循环来达到这种效果:

for(location):
    for(outcome):
        for(demographic):
           summary(glm(outcome ~ demographic * location))

我不知道如何添加样本数据集,但如果有人告诉我,我可以添加比我在这里放的 4 个案例更实质性的东西。

这将构建该数据集可能的所有组合,然后通过循环运行它们以打印和存储结果。我必须警告你,从统计学上讲这是一个糟糕的想法,所以这只是为了展示代码是如何工作的。我假设您并不期望所有模型都能使用这样的玩具数据集提供有意义的结果。

combos <- expand.grid( 
         locs = names(dat)[ grep("loc", names(dat), ignore.case=TRUE)], 
         demos = names(dat)[ grep("demo", names(dat),ignore.case=TRUE)]  )
res.list =list()
for (i in 1:3 ){
                form=as.formula(paste0("cbind(dat$Outcome1,dat$Outcome2) ~", 
                                         combos$locs[i], "+", combos$demos[i]));
                res.list[[1]] <- print( glm(form, data=dat, family="binomial") )}

输出

#--------
Call:  glm(formula = form, family = "binomial", data = dat)

Coefficients:
(Intercept)         Loc1        demo1  
  2.220e-16   -4.441e-16           NA  

Degrees of Freedom: 3 Total (i.e. Null);  2 Residual
Null Deviance:      5.545 
Residual Deviance: 5.545    AIC: 9.545

Call:  glm(formula = form, family = "binomial", data = dat)

Coefficients:
(Intercept)         loc2        demo1  
  4.960e-18   -3.913e+01    1.957e+01  

Degrees of Freedom: 3 Total (i.e. Null);  1 Residual
Null Deviance:      5.545 
Residual Deviance: 2.773    AIC: 8.773

Call:  glm(formula = form, family = "binomial", data = dat)

Coefficients:
(Intercept)         loc3        demo1  
  1.341e-16    3.913e+01   -1.957e+01  

Degrees of Freedom: 3 Total (i.e. Null);  1 Residual
Null Deviance:      5.545 
Residual Deviance: 2.773    AIC: 8.773