通过 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
与许多人一样,我相信这不是一个困难的答案,但作为 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