逻辑回归线性性假设检验R代码优化:适配多自变量检验与绘图场景
解决思路
将原单变量检验逻辑封装为可复用的自定义函数,通过参数传递要检验的自变量名称,再批量遍历所有待检验的自变量即可实现多场景适配,无需重复编写代码。
优化后代码
# 如需将多张图排布在同一画布可加载gridExtra包,无需求可省略 library(gridExtra) # 自定义逻辑回归线性假设检验函数 check_logit_linearity <- function(var_name, df, dep_name = "dependent") { # 提取当前检验的自变量和因变量 x <- df[[var_name]] y <- df[[dep_name]] # 计算自变量四分位数 q <- quantile(x, probs = seq(0, 1, 0.25), na.rm = TRUE) # 生成分组判断逻辑 group1 <- x < q[2] group2 <- x >= q[2] & x < q[3] group3 <- x >= q[3] & x < q[4] group4 <- x >= q[4] # 计算各组正例概率,加极小值修正避免0/1导致对数几率计算报错 p1 <- mean(y[group1], na.rm = TRUE) p2 <- mean(y[group2], na.rm = TRUE) p3 <- mean(y[group3], na.rm = TRUE) p4 <- mean(y[group4], na.rm = TRUE) probs <- pmax(pmin(c(p1, p2, p3, p4), 0.9999), 0.0001) # 计算对数几率 logits <- log(probs/(1-probs)) # 计算各组自变量中位数 meds <- c( median(x[group1], na.rm = TRUE), median(x[group2], na.rm = TRUE), median(x[group3], na.rm = TRUE), median(x[group4], na.rm = TRUE) ) # 绘制检验图,新增红色拟合辅助线方便判断线性关系 plot(meds, logits, main = paste(var_name, "对数几率线性检验图"), xlab = var_name, ylab = paste0("log-odds(", dep_name, "|", var_name, ")"), las = 1, pch = 16, col = "#2c3e50") abline(lm(logits ~ meds), col = "#e74c3c", lwd = 2, lty = 2) # 可返回数值结果供后续查验,无需求可删除return部分 return(list( quantiles = q, group_probs = probs, group_logits = logits, group_medians = meds )) } # -------------------- 批量调用示例 -------------------- # 填入所有需要检验的自变量名称 test_vars <- c("independent1", "independent2") # 所有检验结果会输出到同一行,如需调整布局可修改mfrow参数 par(mfrow = c(1, length(test_vars))) test_results <- lapply(test_vars, check_logit_linearity, df = df) # 恢复默认画布设置 par(mfrow = c(1,1)) # 如需查看某一自变量的数值检验结果,可通过下标提取 # print(test_results[[1]])
功能说明
- 适配任意数量自变量:只需修改
test_vars向量内容,填入所有待检验的自变量名称即可 - 自动适配不同自变量的分位数边界,无需手动调整分组阈值
- 新增边界值修正逻辑,避免分组概率为0或1时对数几率计算出错
- 新增拟合辅助线,更直观判断线性关系
- 支持返回数值结果,可按需导出查验
内容的提问来源于stack exchange,提问作者TarJae
相关产品推荐
相关产品推荐

