如何使用循环在R中做线性回归

how to use loop to do linear regression in R

我想知道是否可以使用 for 循环或应用函数等在 R 中进行线性回归。我有一个数据框,其中包含 crim、rm、ad、wd 等变量。我想对每个其他变量进行 crim 的简单线性回归。

谢谢!

如果您真的想要这样做,使用 lapply() 非常简单,我们用它 "loop" 覆盖 [= 的其他列15=]。自定义函数依次将每个变量作为 x 并拟合该协变量的模型。

df <- data.frame(crim = rnorm(20), rm = rnorm(20), ad = rnorm(20), wd = rnorm(20))

mods <- lapply(df[, -1], function(x, dat) lm(crim ~ x, data = dat))

mods 现在是 lm 个对象的列表。 modsnames 包含用于拟合模型的协变量的名称。这样做的主要缺点是所有模型都使用变量 x 进行拟合。更多的努力可能会解决这个问题,但我怀疑这种努力是否值得花时间。

如果您只是选择模型,这可能是可疑的,还有其他方法可以实现这一点。例如通过 leaps 包及其 regsubsets 函数:

library("leapls")
a <- regsubsets(crim ~ ., data = df, nvmax = 1, nbest = ncol(df) - 1)
summa <- summary(a)

然后plot(a)会显示哪个模型是"best",例如

原创

如果我明白你想要什么(crim 是一个协变量,其他变量是你想要 predict/model 使用 crim 的响应),那么你不需要环形。您可以使用标准 lm().

中的矩阵响应来执行此操作

使用一些虚拟数据:

df <- data.frame(crim = rnorm(20), rm = rnorm(20), ad = rnorm(20), wd = rnorm(20))

我们通过 cbind() 创建一个矩阵或多元响应,将我们感兴趣的三个响应变量传递给它。调用 lm 的其余部分与单变量响应:

mods <- lm(cbind(rm, ad, wd) ~ crim, data = df)
mods 

> mods

Call:
lm(formula = cbind(rm, ad, wd) ~ crim, data = df)

Coefficients:
             rm        ad        wd      
(Intercept)  -0.12026  -0.47653  -0.26419
crim         -0.26548   0.07145   0.68426

summary() 方法为每个响应生成标准 summary.lm 输出。

假设您希望将响应变量修复作为数据框的第一列,并且您希望 运行 简单线性回归与其他变量单独多次保持第一个变量修复作为响应变量。

h=虹膜[-5]

for (j in 2:ncol(h)){
  assign(paste("a", j, sep = ""),lm(h[,1]~h[,j]))
}

以上代码将创建多个回归输出列表并将其存储在 a2,a3,....