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

使用polr()做有序逻辑回归时遇svd(X)错误:数据含缺失/无穷值

解决polr()模型summary报错问题

第一步:修正变量名大小写错误

R语言对变量名大小写敏感,你的代码中先创建了dataW,但后续生成data_new时误用了Data_W,直接修正为一致变量名:

data_new <- dataW |>
  mutate(los = case_when(
    length_of_stay < 50 ~ "< 50",
    between(length_of_stay, 50, 100) ~ "50 - 100",
    length_of_stay > 100 ~ "> 100"
  )) |>
  mutate(los = factor(los, ordered = TRUE))

第二步:清理数据中的缺失/无限值

错误核心是数据存在缺失或无限值,执行以下检查和处理:

  • 检查关键变量的缺失与无限值情况:
# 查看缺失值数量
colSums(is.na(data_new[, c("los", "total_payment_amount", "payer_grouping")]))
# 检查是否存在无限值
sum(is.infinite(data_new$total_payment_amount))
  • 过滤异常数据行:
data_clean <- data_new |>
  filter(!is.na(los), !is.na(total_payment_amount), !is.infinite(total_payment_amount))

第三步:检查分组合理性与样本量

  • 确认los分组无空组:
table(data_clean$los)

若某组样本量为0,调整case_when的分组逻辑(比如合并组或修正区间边界)。

  • 检查payer_grouping类别样本量,若某类别样本量极小(如少于5个),考虑合并同类别:
table(data_clean$payer_grouping)

第四步:重新拟合模型并生成摘要

用清理后的数据重新运行模型:

polr2 <- polr(los ~ total_payment_amount + payer_grouping, data = data_clean)
summary(polr2)

可选优化:数值缩放

如果total_payment_amount取值范围极大,可能引发数值计算问题,可先标准化处理:

data_clean <- data_clean |>
  mutate(total_payment_scaled = scale(total_payment_amount))

polr2 <- polr(los ~ total_payment_scaled + payer_grouping, data = data_clean)
summary(polr2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:43:01