线性回归上的 R 循环

标签 r loops regression linear-regression lm

我浏览了论坛,但找不到我要找的东西。


我想运行几次简单的线性回归。每次使用不同的列作为自变量时,因变量保持不变。运行它后,我希望能够从每个回归中提取 R 平方。我的思考过程是使用一个简单的 for 循环。但是,我无法让它工作。

假设我使用以下数据:

    num value person1 person2 person3
0   1   229   29      81      0
1   2   203   17      75      0
2   3   244   62      0       55

并且我想在 value 上运行回归使用三个变量:person1 , person2person3 。请注意,这是一个最小的工作示例,但我希望概括这个想法。

所以我最初的尝试是:

column <- names(df)[-2]
for(i in 3:5){
  temp <- df[,c("value", column[i])]
  lm.test <- lm(value ~ ., data = temp)
  i + 1 
}

但是,当我运行 summary(lm.test) 时我只得到最后一次回归的摘要,即 lm(value ~ person3)我认为这是有道理的,但是当尝试将其重写为:lm.test[i] <- lm(value ~ ., data = temp)时我收到以下错误:

debug at #3: temp <- df[,c("value", column[i])]

表明第 3 行有问题?

如果可能的话,我希望能够捕获每个回归的摘要,但是我真正追求的是每个回归的 R 平方

最佳答案

您可以在循环中创建公式,然后运行lm。例如,如果我想在 mtcars 上运行回归,以在每个 cyl、wt、hp 上回归 mpg,我可以使用以下命令:

vars <- c("cyl", "wt", "hp")
lm_results <- lapply(vars, function(col){
    lm_formula <- as.formula(paste0("mpg ~ ", col))
    lm(lm_formula, data = mtcars)
})

然后您可以再次迭代 lm_results 来获取 r.squared:

lapply(lm_results, function(x) summary(x)$r.squared)

关于线性回归上的 R 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71546726/

相关文章:

r - 在 R 中进行简单蒙特卡洛积分时出现错误结果

list - 列出R中的整数或 double

arrays - 将旧的 C for 循环更改为新的 Swift 循环

loops - 网格计算并导出为 CSV

r - R 中的多项式回归(二阶)图

r - 如何使用聚类协方差矩阵对回归系数进行线性假设检验?

R-forge vs Rforge?

当列名在别处预定义时,R data.table 在条件子集设置方面苦苦挣扎

javascript - 每次循环分配新值时 DRY

r - R 中的 Knn 回归