我正在尝试对每个~400k预测变量进行多个逻辑回归分析。我想将每次运行的输出捕获到输出表的行/列中。
我的数据分为两部分。我有一个400000 x 189双矩阵(mydatamatrix
),其中包含我在189个人(P1
)中测量的每个400000预测变量的观察/数据。我还有第二个189 x 20数据框(mydataframe
),其中包含结果变量和另一个预测变量(O1
和P2
)以及此特定分析中未使用的18个其他变量。 / p>
我的回归模型为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测试花了一个多小时)。是否有更有效的方法来运行此分析?
答案 0 :(得分:1)
如果您使用apply
而不是for
循环,会更快:
t(apply(mydatamatrix, 2,
function(x)
coef(summary(glm(mydataframe$O1 ~ x + as.factor(mydataframe$P2),
family=binomial)))[2, 1:4]))