如何使用循环在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
个对象的列表。 mods
的 names
包含用于拟合模型的协变量的名称。这样做的主要缺点是所有模型都使用变量 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,....
我想知道是否可以使用 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
个对象的列表。 mods
的 names
包含用于拟合模型的协变量的名称。这样做的主要缺点是所有模型都使用变量 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,....