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

标签 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
}

帮助将上面的循环转换为应用函数将不胜感激。谢谢。

最佳答案

应该这样做:

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

我们按列(这就是 2 的意思)应用于您的矩阵 x,并且我们定义了一个简单的函数来获取结果。 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 更快的计算斜率和截距的选项,因为它会做很多其他事情并减慢它的速度。

关于r - 将 lm() 应用于 R 中 1 个变量的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22211629/

相关文章:

Java 高级循环 : what is (not) evaluated in the loop's header?

string - 如何矢量化具有嵌套 for 循环的字符串获取脚本?

r - 在 R 中跨列应用用户定义的函数

c - 对于循环来说这意味着什么?

测试可被 7 整除/倍数的 C++ 程序

r - R 中的词云来自值列表(不是来自文本文档)

r - 在数据帧 R 中取消嵌套数据帧

r - 如何按顺序更新评级?

r - 如何获得逻辑回归模型测试项目的错误模式?

r - Copula 包的 R 中的 loadNamespace 错误