针对R中的列向量回归矩阵

时间:2018-10-24 14:45:23

标签: r for-loop lm

我正在尝试针对单个列向量(独立变量)对矩阵的每一列(因变量)进行回归,并存储系数和残差。 到目前为止,这是示例数据和我的代码:

gwthRatesAllCities06To08 <- matrix(1:60, nrow = 4, ncol = 15)
natGwthRates06To08 <- c(2,1,3,5)

for (i in 1 : ncol(gwthRatesAllCities06To08)) {
OLSEst[[i]]<- lm(formula = gwthRatesAllCities06To08[,i] ~ natGwthRates06To08)
}

但是,上面的代码没有给我我想要的,请您帮我弄清楚原因吗?提前非常感谢!

3 个答案:

答案 0 :(得分:2)

lm可以在同一右手侧回归多个Y向量。只需将左侧指定为以Y向量为列的矩阵即可。

y <- matrix(1:60, nrow = 4, ncol = 15)
x <- c(2,1,3,5)

fm <- lm(y ~ x)

coef(fm) # the 15 columns of coef are the 15 sets of coefficients
resid(fm) # the 15 columns of resid are the 15 sets of residuals

答案 1 :(得分:1)

我认为您的代码运行良好,我可以检索系数和残差:

OLSEst <- list()
for (i in 1 : ncol(gwthRatesAllCities06To08)) {
  OLSEst[[i]]<- lm(formula = gwthRatesAllCities06To08[,i] ~ natGwthRates06To08)
}
mod <- OLSEst[[15]]
> mod$coefficients
       (Intercept) natGwthRates06To08 
        56.7714286          0.6285714 
> mod$residuals
          1           2           3           4 
-1.02857143  0.60000000  0.34285714  0.08571429 

答案 2 :(得分:1)

您需要先在for循环之外创建列表。然后,将结果添加到列表中。

gwthRatesAllCities06To08 <- matrix(1:60, nrow = 4, ncol = 15)
natGwthRates06To08 <- c(2,1,3,5)
OLSEst <- list()

for (i in 1 : ncol(gwthRatesAllCities06To08)) {
  OLSEst[[i]]<- lm(formula = gwthRatesAllCities06To08[,i] ~ natGwthRates06To08)
}

如果仅需要系数,请考虑仅获取所需的回归对象的部分。检查下面的内容以开始使用。

test <- lm(formula = gwthRatesAllCities06To08[,i] ~ natGwthRates06To08)
test$coefficients