通过R

时间:2016-04-09 03:48:38

标签: r loops logistic-regression

与许多人一样,我确信这不是一个困难的答案,但对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个案例更重要的东西。

1 个答案:

答案 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