我想弄清楚如何创建循环或使用其中一个应用函数来获取数据集中每个变量与因变量的单独1:1回归信息。
让我们说我正在使用mtcars。我将如何编写R代码来获取数据框中的每个变量并将其针对MPG进行回归?
更好的方法是获取每个自变量的摘要,并使用某种名称赋值,例如x1 =,x2 = etc
summary(lm(mpg~eachvar,data=mtcars))
答案 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