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

gmnl包拟合多分类Logit模型报错argument is not a matrix求助

gmnl包t.default(x) : argument is not a matrix报错解决方案

核心原因

gmnl包最后一次更新为2020年,仅适配1.1-0及更早版本的mlogit包。新版本mlogit(1.2.0及以上)修改了mlogit.data()生成的对象结构,导致gmnl读取数据时无法正确识别为矩阵,触发报错。你用mixl包可以正常运行数据,也进一步验证了是包兼容性问题而非数据本身的问题。

修复方案

方案1:降级mlogit到兼容版本(最稳妥,成功率最高)

  1. 先卸载现有版本的mlogit和gmnl:
remove.packages(c("mlogit", "gmnl"))
  1. 安装1.1.0版本的mlogit,再重新安装gmnl:
# 未安装devtools的话先执行install.packages("devtools")
library(devtools)
install_version("mlogit", version = "1.1-0")
install.packages("gmnl")
  1. 重启R会话后重新运行原有代码即可。

方案2:手动调整数据结构(不想改动现有包版本时使用)

在mlogit.data()生成df01后,添加两行代码清除数据的特殊属性:

# 强制转为纯数据框,清除tibble遗留属性
df01 <- as.data.frame(df01)
# 确保所有自变量为数值型
model_cols <- c("MODE", "DWELLING", "SIZE", "COST", "DISTANCE")
df01[model_cols] <- lapply(df01[model_cols], as.numeric)

调整完成后再运行gmnl估计代码即可。

替代分析方案

如果不想修复gmnl的兼容问题,可直接用成熟替代工具完成需求:

  • 你已经验证过mixl包可正常运行该数据,mixl的混合Logit、潜在类别Logit估计结果和gmnl完全可比,且输出的支付意愿测算接口更完善,直接用mixl完成后续分析即可
  • 也可使用mlogit包自带的mlogit()函数,通过设置rpar参数完成随机参数/潜在类别离散选择模型估计,或者用flexmix包实现潜在类别模型估计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:06:04