与许多人一样,我确信这不是一个困难的答案,但对R来说是新手,我一直无法理解。
我有一个大约有100K个案例的数据集,我试图运行一系列逻辑回归,循环遍历各种相关和自变量。
我不确定如何在这里提供数据,但这是一个示例:
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(结果〜位置*人口统计变量)
其中有4个结果变量将由9个地点和13个不同的人口统计变量的每个组合预测。
再次 - 我认为这不是一个困难的答案,但我很难弄清楚如何同时循环多个变量。 提前谢谢。
好的 - 让我试着澄清一下。 我主要想要运行按位置分组的回归,所以我会看到它们全部用于位置1,然后全部用于位置2,位置3等。
有9个不同的位置,13个不同的人口统计变量和4个不同的结果变量。
我想要一个能起到这种作用的循环:
for(location):
for(outcome):
for(demographic):
summary(glm(outcome ~ demographic * location))
我不知道如何添加样本数据集,但如果有人让我知道我可以添加比我放在这里的4个案例更重要的东西。
答案 0 :(得分:1)
这将构建该数据集可能的所有组合,然后通过循环运行它们以打印和存储结果。我必须警告你,这在统计上是一个糟糕的想法,所以这只是为了说明代码是如何工作的。我假设您并不希望所有模型都能通过这样的玩具数据集提供有意义的结果。
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