假设我有可索引的数据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,])) } )
有更好的方法吗?
答案 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以便仍能适应这种情况。