3

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

我的数据分为两部分。我有一个 400000 x 189 双矩阵 ( mydatamatrix),其中包含在 189 个人 ( P1) 中测量的 400000 个预测变量中的每一个的观察/数据。我还有第二个 189 x 20数据mydataframe框(O1P2

我的回归模型是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 个测试需要一个多小时)。是否有更有效的方法来运行此分析?

4

1 回答 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]))
于 2012-11-16T14:12:09.547 回答