Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的有效循环logistic回归_R_Loops_Runtime_Regression - Fatal编程技术网

R中的有效循环logistic回归

R中的有效循环logistic回归,r,loops,runtime,regression,R,Loops,Runtime,Regression,我正在尝试对每个~400k预测变量进行多元逻辑回归分析。我想将每次运行的输出捕获到输出表的行/列中 我的数据分为两部分。我有一个400000 x 189双矩阵(mydatamatrix),其中包含在189个个体(P1)中测量的400000个预测变量的观察值/数据。我还有第二个189x20数据框(mydataframe),其中包含结果变量和另一个预测变量(O1和P2)以及本次特定分析中未使用的18个其他变量 我的回归模型是O1~P1+P2,其中O1是二进制的 我实现了以下循环: 为结果创建输出文件

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

我的数据分为两部分。我有一个400000 x 189双矩阵(
mydatamatrix
),其中包含在189个个体(
P1
)中测量的400000个预测变量的观察值/数据。我还有第二个189x20数据框(
mydataframe
),其中包含结果变量和另一个预测变量(
O1
P2
)以及本次特定分析中未使用的18个其他变量

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

我实现了以下循环:

为结果创建输出文件

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

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

如果您使用
apply
而不是
for
循环,它将更快:

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

只要他们预先分配了results对象,
apply
就不太可能在一个(写得好的)for循环中产生显著的速度增益。@joran同意,但我认为速度增益与使用
coef
summary
只有一次四次。是的,我只是怀疑(但我愿意被证明不是这样)考虑到这里的总时间尺度(似乎是小时)即使这样,速度的提高也会非常小。@sven Hohenstein,非常感谢你的建议-我只是刚刚熟悉R,所以非常感谢你的帮助。我现在正在运行你的脚本,虽然它仍然需要一些时间,到目前为止已经超过一个小时了。@joran,我想你是对的-可能需要几个小时而不是几分钟来完成这个任务当前的分析,因此我在此论坛上寻求帮助的原因。您能澄清一下预分配结果对象是什么意思吗?您有其他加快此分析的建议吗?我有几点要做。谢谢!我的实际建议可能有点让人失望:根本不要这样做。运行400k RegressionIO每个变量上的ns不太可能产生很多有用的信息。至少,我会研究一些用于变量选择的惩罚回归方法,如lasso或LARS。
t(apply(mydatamatrix, 2,
        function(x)
          coef(summary(glm(mydataframe$O1 ~ x + as.factor(mydataframe$P2), 
                           family=binomial)))[2, 1:4]))