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

时间:2016-05-19 04:33:42

标签: r loops regression

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

谢谢!

2 个答案:

答案 0 :(得分:0)

如果真的想要这样做,那么lapply()就会非常简单,我们会用它来“循环”df的其他列。自定义函数将每个变量依次作为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个对象的列表。 names的{​​{1}}包含用于拟合模型的协变量的名称。这主要的负面影响是使用变量mods来拟合所有模型。更多的努力可能会解决这个问题,但我怀疑这种努力值得花时间。

如果您只是选择可能不确定的模型,还有其他方法可以实现这一目标。例如,通过 leaps 包及其x函数:

regsubsets

然后library("leapls") a <- regsubsets(crim ~ ., data = df, nvmax = 1, nbest = ncol(df) - 1) summa <- summary(a) 将显示哪些模型“最佳”,例如。

原始

如果我理解你想要的东西(plot(a)是一个协变量而其他变量是你想要使用crim预测/建模的响应),那么你不需要循环。您可以使用标准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()输出。

答案 1 :(得分:0)

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

H =虹膜[, - 5]

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

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