【发布时间】:2014-10-13 13:12:46
【问题描述】:
我正在使用 lm() 使用两个矩阵(一个数据和一个权重)进行线性回归,其中我循环遍历列并一次使用一列进行回归。我的数据 (e) 是一个 102 x 200,000 的矩阵,看起来像:
V1 V2 V3 ...
-0.79 -0.79 -0.79 ...
-0.93 -0.93 -0.93 ...
-0.18 -0.18 -0.18 ...
而且我的权重矩阵(权重)在维度上是相等的。我的设计矩阵 (mod.our) 是 102 x 29,看起来像:
X-intercept GI Hematopoietic Brain ...
1 0 0 1
1 0 0 0
1 0 1 0
我的代码是:
lm.i<-c()
for (i in seq(1,216063,1)){
lm.i<-c(lm.i,lm(formula=e[,i] ~ mod.our, weights=weights[,i]))
}
问题是它已经运行了超过 24 小时。有谁知道如何更快地做到这一点?还是一般来说更好的方法?
【问题讨论】:
-
线性回归只适合斜率加常数,或 NVAR + 1,或 103 个系数。您需要的最小行数是 206。您可以随机抽样数据行,并从中选择 1000 行,这样可以减少问题的大小并可能加快问题的速度。
-
不要通过附加来增加结果列表:预先分配它。分布/并行化问题也很容易。
-
嗨@BenBolker,您的意思是使用一个for循环进行并行化,例如一次1000列(而不是全部216,000列)?
-
使用
lm.wfit效率更高(如果指定了权重,这是拟合函数lm调用)。当然,请遵循 Ben Bolker 的建议(最好使用lapply或其并行版本之一)。
标签: r regression lm