【问题标题】:R Multiple Regression Loop and Extract CoefficientsR 多重回归循环和提取系数
【发布时间】:2015-07-13 08:37:37
【问题描述】:

我必须对同一自变量矩阵上的许多因变量向量执行多元线性回归。

例如,我想创建 3 个模型:

lm( d ~ a + b + c )
lm( e ~ a + b + c )
lm( f ~ a + b + c )

来自以下矩阵(a,b,c 是自变量,d,e,f 是因变量)

       [,1]     [,2]     [,3]     [,4]     [,5]     [,6]
[1,]    a1       b1       c1       d1       e1       f1
[2,]    a2       b2       c2       d2       e2       f2
[3,]    a3       b3       c3       d3       e3       f3

然后我想将回归中的系数存储在另一个矩阵中(为了便于解释,我在示例中减少了列和向量的数量)。

【问题讨论】:

  • 请展示一个reproducible的例子。另外,检查here
  • 对不起,我是第一次使用。该链接看起来与我正在尝试做的类似。谢谢
  • 其他矩阵看起来如何?因变量没有系数。
  • 谢谢Ken Benoit,正是我所需要的。

标签: r for-loop extract coefficients multiple-regression


【解决方案1】:

这是一个不是很通用的方法,但是如果您在depvar 中替换您自己的因变量名称,当然还有内部lm() 调用中所有模型共有的自变量,当然还有数据集名称。在这里,我在mtcars 上进行了演示,这是 R 提供的内置数据集。

depvar <- c("mpg", "disp", "qsec")
regresults <- lapply(depvar, function(dv) {
    tmplm <- lm(get(dv) ~ cyl + hp + wt, data = mtcars)
    coef(tmplm)
})
# returns a list, where each element is a vector of coefficients
# do.call(rbind, ) will paste them together
allresults <- data.frame(depvar = depvar, 
                         do.call(rbind, regresults))
# tidy up name of intercept variable
names(allresults)[2] <- "intercept"
allresults
##   depvar  intercept        cyl          hp        wt
## 1    mpg   38.75179 -0.9416168 -0.01803810 -3.166973
## 2   disp -179.04186 30.3212049  0.21555502 59.222023
## 3   qsec   19.76879 -0.5825700 -0.01881199  1.381334

编辑根据@Mike Wise 的建议:

如果您只想要一个数字数据集但想保留标识符,您可以将其添加为 row.name,如下所示:

allresults <- data.frame(do.call(rbind, regresults),
                         row.names = depvar)
# tidy up name of intercept variable
names(allresults)[1] <- "intercept"
allresults
##       intercept        cyl          hp        wt
## mpg    38.75179 -0.9416168 -0.01803810 -3.166973
## disp -179.04186 30.3212049  0.21555502 59.222023
## qsec   19.76879 -0.5825700 -0.01881199  1.381334

【讨论】:

  • 这在我看来就是他的意思。我认为需要编辑问题并删除此答案的因变量列以匹配问题。
  • 谢谢你是对的 - 我添加了一个替代方案,它返回一个仅包含系数的 data.frame。
【解决方案2】:

我实际上最近遇到了同样的问题,一个快速简便的解决方法是简单地将所有结果手动添加到带有系数函数的数据帧中。

coeffdf &lt;- data.frame(coefficients(lm1),coefficients(lm2))

如果每个回归都有相同的变量,它会很好地工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多