You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R执行logistic回归出现不明缺失值删除及极端P值异常问题

逻辑回归异常问题排查与解答

问题背景

本次分析基于370行的医学数据集开展二分类logistic回归,研究目标为探究各检查指标与肝硬化结局的关联:

  • 因变量为fibrosis.score,二分类因子变量,0代表无肝硬化,1代表存在肝硬化
  • 自变量均为2~4水平的因子变量,包含CT、MR、US扫描结果,腹水、黄疸、静脉曲张出血等临床症状指标

初始异常表现

执行回归代码:

model0 <- glm(Fibrosis.score ~ Fibroscan + CT + MR + UL + ascites + ikterus + varicebloedning, family = binomial, data=d3)

出现两类异常:

  • 收到警告:glm.fit: fitted probabilities numerically 0 or 1 occurred
  • summary(model0)输出显示124条观测因缺失被删除,但已确认纳入回归的自变量无缺失;绝大多数自变量P值接近0.99,和预期显著性表现不符。

核心疑问解答

1. glm函数是否会删除整行存在缺失的观测,即使缺失值出现在未纳入回归的列?

glm默认的缺失值处理规则为仅检查回归公式中涉及的所有变量(包括因变量和全部自变量),仅当某行在公式覆盖的任意变量上存在缺失时,才会被整行删除,未纳入回归公式的列的缺失值不会触发行删除。

2. 极端P值是否和参照水平设置有关?

接近1的极端P值通常和参照水平设置无关,更可能由两类问题导致:

  • 完全/准完全分离:即某自变量的某一水平下,因变量的取值完全一致(比如CT提示肝硬化的分类下所有患者的因变量均为1),此时会出现你收到的拟合概率为0或1的警告,回归系数估计会异常偏大、标准误极高,最终P值接近1
  • 共线性问题:如果自变量之间存在高度甚至完全共线性,也会导致系数估计不稳定,出现极端P值

3. 如何解决124条观测被意外删除的问题,是否需要单独提取回归用到的变量构建新数据集?

无需单独构建新数据集,按以下步骤排查即可:

  1. 优先检查回归公式覆盖的所有变量(不要仅检查自变量)的缺失情况,可执行以下代码统计缺失数:
# 替换错误的all.variables为正确的函数名all.vars
vars_used <- all.vars(Fibrosis.score ~ Fibroscan + CT + MR + UL + ascites + ikterus + varicebloedning)
apply(d3[,vars_used], 2, function(x) sum(is.na(x)))
  1. 若确认上述变量无官方NA编码,需排查是否存在非标准缺失值编码(比如用-99、空白字符串、特殊符号代替NA的情况)

附带报错说明

你运行代码时出现的could not find function "all.variables"报错是函数名拼写错误导致,R中提取公式涉及变量的正确函数名为all.vars。

最终问题根因

最终排查确认:因变量fibrosis.score存在124个缺失值,因此触发了glm的行删除规则,处理因变量缺失问题后回归结果恢复正常。

内容的提问来源于stack exchange,提问作者le2001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:15:04