我在 R 中使用逐步回归,代码如下:
model_scicareer_all <- glm(scicareer ~ .,
family = binomial(link = "logit"), data = clean_data)
summary(model_scicareer_all)
intercept_only <- glm(scicareer ~ -1,
family = binomial(link = "logit"), data = clean_data)
forward <- step(intercept_only, direction='forward', scope=formula(model_scicareer_all), trace=1000)
代码运行没有问题。但是,我想获得每一步的系数。那可能吗? (我知道 SPSS 就是这样做的。)
我尝试了不同的输入,但无法打印每一步的系数
step 有
keep
参数。用它来获取每个模型运行的系数:
示例:
final <- step(lm(mpg~1,mtcars), DF2formula(mtcars),keep = \(x,y)list(coef(x)), trace = FALSE)
c(final$keep)
[[1]]
(Intercept)
20.09062
[[2]]
(Intercept) wt
37.285126 -5.344472
[[3]]
(Intercept) wt cyl
39.686261 -3.190972 -1.507795
[[4]]
(Intercept) wt cyl hp
38.7517874 -3.1669731 -0.9416168 -0.0180381
请注意,您可以保留任何东西。包括模型本身:
final <- step(lm(mpg~1,mtcars), DF2formula(mtcars),keep = \(x)list(x), trace = FALSE)
[[1]]
Call:
lm(formula = mpg ~ 1, data = mtcars)
Coefficients:
(Intercept)
20.09
[[2]]
Call:
lm(formula = mpg ~ wt, data = mtcars)
Coefficients:
(Intercept) wt
37.285 -5.344
[[3]]
Call:
lm(formula = mpg ~ wt + cyl, data = mtcars)
Coefficients:
(Intercept) wt cyl
39.686 -3.191 -1.508
[[4]]
Call:
lm(formula = mpg ~ wt + cyl + hp, data = mtcars)
Coefficients:
(Intercept) wt cyl hp
38.75179 -3.16697 -0.94162 -0.01804
step
有一个 trace
参数,但似乎它不返回系数。请改用如图所示的 trace
函数。
trace(glm, exit = quote(print(coef(returnValue()))))
fm <- glm(mpg ~., data = mtcars)
step(fm)
untrace(flm)
您可以通过捕获输出、提取公式并为每个公式重新运行模型来以一种黑客的方式获得系数。仅当您想要将表中的系数与未包含在特定模型中的系数的
dplyr::bind_rows()
值组合起来时,才需要下面的最后一步 (NA
)(这当然也可以在基 R 中完成,但不能像紧凑)。
fm <- lm(mpg ~ ., data = mtcars)
cc <- capture.output(step(fm))
## get all lines with a tilde but *without* a comma (the finally selected
## model includes the formula, we don't want that line)
forms <- grep("~", cc, value = TRUE) |>
grep(pattern = ",", invert = TRUE, value = TRUE)
## refit the model, get coefficients
coefs <- lapply(forms, \(f) coef(update(fm, formula = f)))
dplyr::bind_rows(coefs)
# A tibble: 8 × 11
`(Intercept)` cyl disp hp drat wt qsec vs am gear
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 12.3 -0.111 0.0133 -0.0215 0.787 -3.72 0.821 0.318 2.52 0.655
2 11.0 NA 0.0128 -0.0219 0.835 -3.69 0.842 0.390 2.58 0.712
3 9.77 NA 0.0121 -0.0210 0.875 -3.71 0.911 NA 2.52 0.760
4 9.20 NA 0.0155 -0.0247 0.810 -4.13 1.01 NA 2.59 0.606
5 10.7 NA 0.0131 -0.0218 1.02 -4.04 0.991 NA 2.98 NA
6 14.4 NA 0.0112 -0.0212 NA -4.08 1.01 NA 3.47 NA
7 17.4 NA NA -0.0176 NA -3.24 0.811 NA 2.93 NA
8 9.62 NA NA NA NA -3.92 1.23 NA 2.94 NA
[...]