我想知道我是否可以使用for循环或应用函数在R中进行线性回归。我有一个包含变量的数据框,如crim,rm,ad,wd。我想对每个其他变量进行简单的crim线性回归。
谢谢!
答案 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,....