针对矩阵的每列线性回归矢量

时间:2013-09-25 18:11:29

标签: r loops matrix plyr linear-regression

我有一个非常简单的问题,我相信有一个优雅的答案(我也确定上面的标题是不合适的)。我有一个y值的向量:

y = matrix(c(1, 2, 3, 4, 5, 6, 7), nrow=7, ncol=1)

我想对矩阵中的每一列进行回归,x:

x = matrix(c(1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 4, 4, 4, 4, 4, 4, 4), nrow=7, ncol=3)

例如,我想将x的第一列与y线性回归,然后x的第二列对y进行线性回归,直到达到x的最后一列:

regression.1=lm(y~x[,1])
regression.2=lm(y~x[,2])

我稍后想要绘制这些回归与其他参数的斜率,因此如果模型系数参数可以通过常规方式轻松获取,那将非常有用:

slope.1 = summary(regression.1)$coefficients[2,1]

我猜是使用类似plyr的列表,但我对这个游戏来说太新了,无法找到最简单的代码编码方式。

2 个答案:

答案 0 :(得分:6)

store <- mapply(col.ind = 1:ncol(x),function(col.ind){ lm(y~x[,col.ind]) })

然后您可以使用以下方式访问斜率:

> store[1,]
[[1]]
  (Intercept) x[, col.ind] 
 6.713998e-16 1.000000e+00 

[[2]]
  (Intercept) x[, col.ind] 
            8           -1 

[[3]]
  (Intercept) x[, col.ind] 
            4           NA 

答案 1 :(得分:2)

另一种方式:

regression <- apply(x, 2, function(z)lm(y~z))

slope <- sapply(regression, function(z)unname(coef(z)[2]))

结果:

> slope
[1]  1 -1 NA