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

在R中运行非平衡因变量的Bivariate Probit Model报错求助

问题分析与解决

报错根源

你遇到的错误和警告源于两个核心问题:

  1. 模型类型与数据结构不匹配:你的研究是「先建模是否受害,再在受害者中建模是否多次受害」,属于样本选择模型(Heckman-type模型),但你误用了普通联合双变量Probit(model = "B")。polyvictimization10仅在polyvictimization9=1时有有效值,其余为NA,普通双变量Probit无法处理这种选择性缺失,导致计算残差相关系数时出现标准差为0的异常。
  2. 小样本拟合不稳定:polyvictimization10仅31个有效样本,容易引发模型拟合的数值问题(比如完全分离)。

解决方案

1. 切换为样本选择型双变量Probit模型

GJRM包支持样本选择模型,只需指定model = "S",并明确区分选择方程(是否受害)和结果方程(是否多次受害):

library(GJRM)

# 拟合样本选择模型
bl_pdu <- gjrm(
  list(
    selection = polyvictimization9 ~ yrsaddr_1 + yrsaddr_2 + cartot_1,  # 选择方程:是否受害
    outcome = polyvictimization10 ~ cartot_1 + cartot_2                 # 结果方程:受害者中是否多次受害
  ),
  data = pdu,
  margins = c("probit", "probit"),
  model = "S"  # 关键:指定为样本选择模型
)

# 查看模型结果
summary(bl_pdu)

2. 排查数据与变量问题

如果修改后仍报错,按以下步骤排查:

  • 检查结果变量分布:查看polyvictimization10的取值分布(table(pdu$polyvictimization10, useNA = "no")),如果某一类样本量过少(如<5),考虑合并类别或补充样本;
  • 检查自变量变异:用sapply(pdu[, c("yrsaddr_1", "yrsaddr_2", "cartot_1", "cartot_2")], sd)查看自变量标准差,排除零变异变量;
  • 检查共线性:用cor(pdu[, c("yrsaddr_1", "yrsaddr_2", "cartot_1", "cartot_2")])查看自变量相关性,移除高度共线性的变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:23:36