在矩阵中将lm()应用于R中的1个变量

时间:2014-03-05 23:26:57

标签: r loops apply

我正在尝试使用apply()系列函数来回归向量上矩阵的每一列,为每列生成一组系数,但我无法绕过它。例如,我可以通过循环执行此操作,如下所示:

x <-  matrix(runif(10*10), 10,10)
y <-  runif(10)

coefs <- matrix(NA, ncol = 2, nrow = 10)

for(i in 1:10){
    coefs[i,] <- lm(y~x[,i])$coef
}

非常感谢帮助将上面的循环转换为应用函数。感谢。

1 个答案:

答案 0 :(得分:1)

这应该这样做:

t(apply(x, 2, function(x.col) lm(y~x.col)$coef))

我们通过列应用矩阵x(这是2的意思),我们定义一个简单的函数来获得结果。 apply会自动将结果堆叠为2行矩阵,我们会将其转换为t所需的格式:

      (Intercept)        x.col
 [1,]   0.6314854 -0.567179167
 [2,]   0.3679481  0.020019158
 [3,]   0.2448379  0.280314036
 [4,]   0.4195727 -0.082207564
 [5,]   0.1249273  0.425974675
 [6,]   0.4567553 -0.194174789
 [7,]   0.2653036  0.181709766
 [8,]   0.2963443  0.217408463
 [9,]   0.2902572  0.174962624
[10,]   0.3730373  0.007380176

注意你的循环没有问题。由于您初始化coefs,因此它应该与apply一样快。如果你想要速度,你应该看一个比lm更快的计算斜率和截距的选项,因为这样可以减慢它的速度。