每个独立变量的线性回归循环单独依赖于依赖

时间:2014-07-30 11:45:47

标签: r statistics

我想弄清楚如何创建循环或使用其中一个应用函数来获取数据集中每个变量与因变量的单独1:1回归信息。

让我们说我正在使用mtcars。我将如何编写R代码来获取数据框中的每个变量并将其针对MPG进行回归?

更好的方法是获取每个自变量的摘要,并使用某种名称赋值,例如x1 =,x2 = etc

summary(lm(mpg~eachvar,data=mtcars))

3 个答案:

答案 0 :(得分:10)

这将为你做。

lapply( mtcars[,-1], function(x) summary(lm(mtcars$mpg ~ x)) )

data.frame对象是一个包含其他一些功能的列表,因此这将通过mtcars的每一列(第一列除外)并执行回归。如果将结果列表保存为L之类的内容,则只需使用与原始data.frame中的列相同的名称或编号即可轻松访问每个列表。因此,L$cyl会在mpg上为cyl提供回归摘要。

答案 1 :(得分:6)

Johns解决方案的data.table版本

library(data.table)
Fits <- 
    data.table(mtcars)[, 
              .(MyFits = lapply(.SD, function(x) summary(lm(mpg ~ x)))), 
              .SDcols = -1]

代码的一些解释

  • data.table会将mtcars转换为data.table对象
  • .SD也是data.table对象,其中包含要操作的列
  • .SDcols = -1告诉.SD不要使用第一列(因为我们不想让lm(mpg ~ mpg)
  • lapply只在.SD中的所有列上运行模型(我们跳过的列除外)并返回类list的对象

Fit将成为摘要列表,您可以使用

进行检查
Fits$MyFits

但您也可以对它们进行操作,例如,在每个拟合

上应用coef函数
Fits[, lapply(MyFits, coef)]

或获取r.squered

Fits[, lapply(MyFits, `[[`, "r.squared")]

答案 2 :(得分:3)

你喜欢这样的事情:

models <- lapply(paste("mpg", names(mtcars)[-1], sep = "~"), formula)
res.models <- lapply(models, FUN = function(x) {summary(lm(formula = x, data = mtcars))})
names(res.models) <- paste("mpg", names(mtcars)[-1], sep = "~")
res.models[["mpg~disp"]]


# Call:
# lm(formula = x, data = mtcars)

# Residuals:
#     Min      1Q  Median      3Q     Max 
# -4.8922 -2.2022 -0.9631  1.6272  7.2305 

# Coefficients:
#              Estimate Std. Error t value Pr(>|t|)    
# (Intercept) 29.599855   1.229720  24.070  < 2e-16 ***
# disp        -0.041215   0.004712  -8.747 9.38e-10 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

# Residual standard error: 3.251 on 30 degrees of freedom
# Multiple R-squared:  0.7183,  Adjusted R-squared:  0.709 
# F-statistic: 76.51 on 1 and 30 DF,  p-value: 9.38e-10