R调用mlogit运行多元logit模型报错及与gmnl的差异
报错原因说明
该报错属于代码公式语法问题,与数据格式无关,你的dt1数据结构是正确的,否则gmnl()也无法正常运行。
mlogit包的mlogit()函数对公式语法有特殊要求,和gmnl()的规则不同:mlogit()的公式标准结构为 选择变量 ~ 随备选方案变化的变量 | 随个体固定的变量 | 同时随个体和备选方案变化的变量,三个部分用竖线分隔,即使某部分没有对应变量,也需要显式标注为0,不能省略。
你当前写的Buy~norRebate没有明确区分变量所属的类型,函数自动解析公式时补全了多余的竖线,触发了语法解析错误。
你可以根据norRebate的变量属性调整公式即可解决报错:
- 如果
norRebate是仅随备选方案变化的变量,使用公式:
mlogit(Buy ~ norRebate | 0, data = dt1)
- 如果
norRebate是仅随个体变化的变量,使用公式:
mlogit(Buy ~ 1 | norRebate, data = dt1)
mlogit()和gmnl()的核心区别
- 支持的模型范围不同:
mlogit()主要用于估计标准多元logit、巢式logit、基础混合logit等经典离散选择模型;gmnl()专门面向广义多元logit模型,除基础模型外,还支持随机参数异质性、异质性均值/方差、随机缩放系数等更复杂的异质性离散选择模型。 - 公式语法要求不同:
gmnl()对公式的语法要求更宽松,不需要严格按三部分手动分隔,会自动识别变量类型;mlogit()对公式结构要求严格,必须明确分隔不同类型的自变量,否则会触发语法错误。 - 估计效率不同:
mlogit()默认使用最大似然估计,混合logit场景下支持模拟最大似然;gmnl()针对复杂异质性模型做了专门优化,默认使用最大模拟似然估计,对高复杂度模型的估计效率更高。 - 数据格式兼容性一致:两个函数都兼容
mlogit.data()生成的标准长格式离散选择数据集,不需要额外做数据转换。
内容的提问来源于stack exchange,提问作者Carey Li
相关产品推荐
相关产品推荐

