在R中运行回归循环的最佳方法是什么?

时间:2010-04-17 00:22:22

标签: r apply

假设我有可索引的数据X和Y源,比如矩阵。我想运行一组独立的回归并存储结果。我的初步方法是

results = matrix(nrow=nrow(X), ncol=(2))
for(i in 1:ncol(X)) {
        matrix[i,] = coefficients(lm(Y[i,] ~ X[i,])

}

但是,循环很糟糕,所以我可以用lapply来做这个

out <- lapply(1:nrow(X), function(i) { coefficients(lm(Y[i,] ~ X[i,])) } )

有更好的方法吗?

3 个答案:

答案 0 :(得分:6)

你肯定在这里过度优化。与模型拟合的过程相比,循环的开销可以忽略不计,因此简单的答案是 - 使用您发现的最容易理解的方式。我会去for-loop,但lapply也很好。

答案 1 :(得分:1)

我用plyr做这类事情,但我同意这不是一个处理效率问题,就像你阅读和写作一样舒服。

答案 2 :(得分:0)

如果您只想执行简单的多元线性回归,那么我建议使用lm() not 。有lsfit(),但我不确定它会提供多少加速(我从未进行过正式比较)。相反,我建议使用qr()和qrcoef()执行(X'X)^ { - 1} X'y。这将允许您执行多元多元线性回归;也就是说,将响应变量视为矩阵而不是向量,并对每行观察应用相同的回归。

Z # design matrix
Y # matrix of observations (each row is a vector of observations)
## Estimation via multivariate multiple linear regression                    
beta <- qr.coef(qr(Z), Y)
## Fitted values                                                             
Yhat <- Z %*% beta
## Residuals                                                                 
u <- Y - Yhat

在您的示例中,每个观测矢量是否有不同的设计矩阵?如果是这样,您可以修改Z以便仍能适应这种情况。