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

使用mlogit函数报错‘replacement has 8 rows, data has 9’求助

问题原因与解决方案

错误原因

你遇到的replacement has 8 rows, data has 9错误,核心是模型公式设定错误:
你将object_id(产品标识)和price(产品-个体层面变量)放到了公式中|的右侧,这部分是用来定义仅随个体变化的变量的,但price是随个体和产品共同变化的,object_id是产品属性而非个体属性。mlogit在处理这部分变量时,会尝试为每个个体生成单一值,但每个个体对应多个产品,导致内部生成的变量行数与原数据的9行不匹配,触发替换行数错误。

解决方案

你的目标是估计price的系数β和各产品的固定效应fixed_effect_j,需要根据mlogit的公式规则,正确区分变量类型:

  • price属于备选方案-个体层面变量(随个体i和产品j变化),应放在~之后、第一个|之前;
  • 产品固定效应属于备选方案层面变量(仅随产品j变化),可通过公式第三部分(第二个|之后)指定,或直接作为分类变量纳入公式。

修正后的代码示例

方式一:用公式第三部分指定产品固定效应

library(mlogit)
library(data.table)

# 示例数据
temp <- data.table(
  session_id = c(1, 1, 2, 2, 2, 3, 3, 3, 3),
  object_id = c(1, 2, 1, 2, 3, 1, 2, 3, 4),
  chosen = c(0, 1, 1, 0, 0, 0, 1, 0, 0),
  price = c(10, 20, 30, 25, 20, 15, 30, 25, 10)
)

# 转换为mlogit专用格式(可选,让数据结构更清晰)
temp_mlogit <- mlogit.data(temp, shape = "long", choice = "chosen", 
                           alt.var = "object_id", id.var = "session_id")

# 拟合模型:price在第一部分,产品固定效应在第三部分
formula <- chosen ~ price | 0 | object_id
model <- mlogit(formula, data = temp_mlogit)

# 查看估计结果
summary(model)

方式二:将object_id作为分类变量纳入公式

# 拟合模型:直接将object_id作为分类变量,去掉基准组以保留所有产品固定效应
formula <- chosen ~ price + factor(object_id) - 1
model <- mlogit(formula, data = temp_mlogit)

# 查看估计结果
summary(model)

说明

两种方式都能得到你需要的β系数和各产品的固定效应,结果等价。方式一更贴合mlogit的变量类型区分逻辑,方式二通过分类变量直接实现固定效应估计,更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:52:42