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

R语言mlogit拟合probit模型报下标越界、计算奇异错误求助

mlogit包probit模型报错排查

报错1:下标越界 Error in As[[pos[i, j]]] : subscript out of bounds

触发原因有两个:

  • 核心原因:mlogit的probit模型(即多元probit设定)不支持不同选择情景备选方案数量不一致。你的原始数据中,选择情景1、2含5个备选方案,情景3含7个备选方案,情景4仅含3个备选方案,选择集大小不统一时,模型构造多元正态分布协方差矩阵的索引逻辑会失效,直接触发下标越界。
  • 代码笔误:mlogit.data函数中你写的是choice = "Place",但实际因变量列名为pla,该笔误会导致选择变量匹配失败。

报错2:计算奇异 Error in solve.default(H, g[!fixed]) : system is computationally singular: reciprocal condition number = 9.15665e-23

截取前2个等长选择集后仍报错,是三类问题叠加:

  • 样本量严重不足:仅保留2个选择观测时,模型待估参数(含方案特定变量系数、情景特定变量的方案专属系数、probit协方差矩阵参数)远大于观测提供的自由度,参数完全无法识别。
  • 自变量无变异:数据中cou列全部取值为0,变量没有任何波动,无法估计对应系数,直接导致海塞矩阵不可逆。
  • 数据结构限制:全样本id.var取值均为1,即仅包含1名决策者的选择数据,本身可提供的偏好识别信息极弱,小样本下根本无法支撑probit模型估计。
修正方案
  • 先修正代码笔误,将mlogit.data中的choice = "Place"改为choice = "pla"。
  • 若要使用多元probit设定,必须保证所有选择情景的备选方案数量完全一致:要么筛选保留所有情景都包含的公共备选方案,要么放弃probit设定改用标准条件logit(不设置probit=TRUE),标准logit版本支持可变大小的选择集。
  • 保证充足样本量:多元probit待估参数远多于同设定的logit模型,至少需要数十个以上独立选择情景才能稳定收敛,仅2个观测不可能得到有效估计结果。
  • 建模前先检查自变量变异:剔除全样本取值完全一致的变量(如当前数据中的cou),这类变量没有识别力,必然导致矩阵奇异。
  • 若确实只有1名决策者的多次选择数据,可删除mlogit.data中的id.var参数,避免模型错误按多主体面板结构构造协方差项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:36:38