如何获取R语言逐步回归(Stepwise Regression)每一步的系数?
R语言逐步回归获取各步骤系数的实现方法
在R中使用step()进行向前逐步回归时,完全可以获取每一步的系数,实现方式如下:
核心方法:利用step()的keep参数捕获每一步模型
step()函数提供了keep参数,允许我们指定一个函数,在每一步拟合完成后保存当前模型的信息(包括系数)。
具体实现代码
基于你原有的代码,修改如下:
# 1. 拟合全模型和截距-only模型 model_scicareer_all <- glm(scicareer ~ ., family = binomial(link = "logit"), data = clean_data) intercept_only <- glm(scicareer ~ -1, family = binomial(link = "logit"), data = clean_data) # 2. 定义保存每一步系数的函数 keep_coef <- function(fit) { list(coefficients = coef(fit)) } # 3. 运行逐步回归,启用keep参数捕获每一步系数 forward <- step(intercept_only, direction='forward', scope=formula(model_scicareer_all), trace=1000, keep = keep_coef) # 4. 提取并整理所有步骤的系数为表格 step_coefs <- lapply(forward$keep, function(x) as.data.frame(t(x$coefficients))) coef_df <- do.call(rbind, step_coefs) # 为行命名对应步骤 rownames(coef_df) <- paste0("Step ", 1:nrow(coef_df)) # 查看最终整理后的系数表格 print(coef_df)
简化版实现
如果需要保留每一步的完整模型,也可以直接保存模型对象,后续再提取系数:
# 运行逐步回归时直接保存每一步模型 forward <- step(intercept_only, direction='forward', scope=formula(model_scicareer_all), trace=1000, keep = function(fit) fit) # 提取每一步模型的系数并整理 step_coefs <- lapply(forward$keep, coef) coef_df <- as.data.frame(do.call(rbind, step_coefs)) rownames(coef_df) <- paste0("Step ", seq_along(step_coefs)) print(coef_df)
说明
trace=1000会输出每一步的变量选择过程,若不需要冗余输出可改为trace=0- 整理后的
coef_df会以表格形式展示每一步的所有系数,未纳入该步骤的变量系数会显示为NA
内容的提问来源于stack exchange,提问作者Juan Pedro Ross
相关产品推荐
相关产品推荐

