2015-07-13 122 views
1

我必须对自变量的相同矩阵上的多个因变量向量执行多重线性回归。R多重回归循环和提取系数

例如,我想创建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 

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

+1

请表明为[可再现]的例子(http://stackoverflow.com/questions/5963269/how-to-make-a -great-R再现的-例子)。另外,检查[这里](http://stackoverflow.com/questions/31377737/repeat-regression-with-varying-dependent-variable) – akrun

+0

对不起,我是第一次使用。该链接看起来与我想要做的相似。谢谢 –

+0

其他矩阵是如何看起来的?没有因变量的系数。 –

回答

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明智的建议:

如果你只想要一个数字数据集,但要保留标识符,则可以将其添加为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 
+1

这在我看来是他的意思。我认为这个问题需要进行编辑,并删除这个答案的因变量列以匹配问题。 –

+1

谢谢你是对的 - 我添加了一个替代方法,返回一个只包含系数的data.frame。 –