首页 文章

R中的有效循环逻辑回归

提问于
浏览
3

我正在尝试对每个~400k预测变量进行多个逻辑回归分析 . 我想将每次运行的输出捕获到输出表的行/列中 .

我的数据分为两部分 . 我有一个400000 x 189双矩阵( mydatamatrix ),其中包含我在189个人( P1 )中测量的每个400000预测变量的观察/数据 . 我还有第二个189 x 20数据框( mydataframe ),其中包含结果变量和另一个预测变量( O1P2 )以及此特定分析中未使用的18个其他变量 .

我的回归模型是 O1~ P1+P2 ,其中 O1 是二进制的 .

我得到以下循环工作:

为结果创建输出文件

output<-data.frame(matrix(nrow=400000, ncol=4))
names(output)=c("Estimate", " Std. Error", " z value", " Pr(>|z|)")

运行 i 预测变量的逻辑回归循环并将输出存储在输出文件中

for (i in c(1:400000)){
  result<-(glm(mydataframe$O1 ~ mydatamatrix[,i] + as.factor(mydataframe$P2),
               family=binomial))
  row.names(output)<-row.names(mydatamatrix)
  output[i,1]<-coef(summary(result))[2,1]
  output[i,2]<-coef(summary(result))[2,2]
  output[i,3]<-coef(summary(result))[2,3]
  output[i,4]<-coef(summary(result))[2,4]
}

但是,运行时间很长(输出前20k测试需要一个多小时) . 有没有更有效的方法来运行此分析?

1 回答

  • 1

    如果你使用 apply 而不是 for 循环会更快:

    t(apply(mydatamatrix, 2,
            function(x)
              coef(summary(glm(mydataframe$O1 ~ x + as.factor(mydataframe$P2), 
                               family=binomial)))[2, 1:4]))
    

相关问题