我浏览了论坛,但找不到我要找的东西。
我想运行几次简单的线性回归。每次使用不同的列作为自变量时,因变量保持不变。运行它后,我希望能够从每个回归中提取 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
, person2
和person3
。请注意,这是一个最小的工作示例,但我希望概括这个想法。
所以我最初的尝试是:
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/