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

Logistic回归中Cooks.distance返回行数与数据集不符的问题

解决Cook's D与数据集行数不匹配的问题

嘿,这个问题我之前做逻辑回归时也碰到过!虽然你已经处理了缺失值,且模型summary里没有“因缺失删除观测值”的提示,但cooks.distance()返回的结果行数比原数据集少,核心原因是glm拟合时悄悄排除了一些存在完全/准完全分离的观测,而非缺失值导致的。

先确认问题根源

首先用代码验证模型实际使用的观测数:

# 查看原数据集行数
nrow(mydata1)
# 查看模型实际用到的观测数
nobs(fit)

你会发现nobs(fit)的结果正好是38941,说明glm自动剔除了1059行数据。

为什么会发生这种情况?当你的某个自变量(或多个自变量组合)的取值能完全预测因变量CHURN时——比如某变量的某类取值对应的CHURN全为1或全为0,逻辑回归的最大似然估计会不存在,glm就会自动排除这些观测,且不会在summary里专门提示(因为这些行没有缺失值,只是模型无法处理)。

找出被排除的观测

用以下代码定位被剔除的行,分析其特征:

# 获取模型实际使用的观测行名
model_used_rows <- rownames(model.frame(fit))
# 筛选原数据集中未被模型使用的行
excluded_data <- mydata1[!rownames(mydata1) %in% model_used_rows, ]

# 查看被排除行的CHURN分布
table(excluded_data$CHURN)
# 举例:检查某个可疑自变量与CHURN的交叉表(比如CREDITA)
table(excluded_data$CREDITA, excluded_data$CHURN)

通过交叉表你就能看到,是不是某个变量的特定水平对应的CHURN全为0或1,导致了完全分离。

解决办法

方法1:处理导致分离的自变量

  • 如果是某个小众类别导致的问题,可以将该类别与其他类别合并;
  • 若该自变量对模型影响不大,直接删除后重新拟合模型。

方法2:使用支持完全分离的模型

推荐使用logistf包的logistf()函数,它采用Firth偏似然估计,能避免完全分离问题,不会删除观测:

# 安装并加载包(首次使用需安装)
install.packages("logistf")
library(logistf)

# 拟合Firth逻辑回归模型
fit_firth <- logistf(CHURN~CHILDREN+CREDITA+CREDITAA+CREDITB+ CREDITC+CREDITDE+CREDITGY+ CREDITZ+PRIZMRUR+ PRIZMUB+PRIZMTWN+REFURB+WEBCAP+TRUCK+RV+OCCPROF+OCCCLER+ OCCCRFT+OCCSTUD+OCCHMKR+ OCCRET+ OCCSELF+OWNRENT+MARRYUN+MARRYYES+MARRYNO+ MAILORD+MAILRES+MAILFLAG+TRAVEL+PCOWN+ CREDITCD+ NEWCELLY+NEWCELLN+INCMISS +MCYCLE+SETPRCM + REVENUE +MOU+RECCHRGE+ DIRECTAS+OVERAGE+ROAM+CHANGEM+CHANGER+DROPVCE+BLCKVCE+ UNANSVCE+CUSTCARE+THREEWAY+ MOUREC+OUTCALLS+INCALLS+PEAKVCE+OPEAKVCE+DROPBLK+ CALLFWDV+CALLWAIT+MONTHS+UNIQSUBS+ ACTVSUBS+PHONES+MODELS+EQPDAYS+AGE1+AGE2+REFER+INCOME+ CREDITAD+SETPRC,data = mydata1, family = binomial(logit))

# 计算Cook's D
cd_firth <- cooks.distance(fit_firth)
# 合并数据集
mydata2 <- cbind(mydata1, cd_firth)

这样cd_firth的行数就会和原数据集完全匹配,不会再出现行数不一致的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:07:06