我瀏覽了論壇,但找不到我要找的東西。
我想運行幾次簡單的線性回歸。每次使用不同的列作為我的自變數時,因變數保持不變。運行它后,我希望能夠從每個回歸中提取 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 平方。
uj5u.com熱心網友回復:
您可以formula在回圈中創建,然后運行lm??. 例如,如果我想在每個 上運行回歸以mtcars進行回歸,我可以使用以下命令:mpgcyl, wt, hp
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)
uj5u.com熱心網友回復:
這是一種使用broom::glance()和purrr::map_dfr()收集模型摘要統計資訊到一個整潔的小標題的方法:
library(broom)
library(purrr)
lm.test <- map_dfr(
set_names(names(df)[-2]),
~ glance(lm(
as.formula(paste("value ~", .x)),
data = df
)),
.id = "predictor"
)
結果:
# A tibble: 4 x 13
predictor r.squared adj.r.squared sigma statistic p.value df logLik AIC
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 num 0.131 -0.739 27.4 0.150 0.765 1 -12.5 31.1
2 person1 0.836 0.672 11.9 5.10 0.265 1 -10.0 26.1
3 person2 0.542 0.0831 19.9 1.18 0.474 1 -11.6 29.2
4 person3 0.607 0.215 18.4 1.55 0.431 1 -11.3 28.7
# ... with 4 more variables: BIC <dbl>, deviance <dbl>, df.residual <int>,
# nobs <int>
注意,您可以使用類似的方法來捕獲模型系數,broom::tidy()而不是glance().
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/445794.html
