我有一个非常简单的问题,我相信有一个优雅的答案(我也确定上面的标题是不合适的)。我有一个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的列表,但我对这个游戏来说太新了,无法找到最简单的代码编码方式。
答案 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