使用Rank-ordered Logit(rol)模型出现“replacement has length zero”错误的原因
Rank-ordered Logit模型运行错误原因分析
问题场景
尝试运行Rank-ordered Logit模型(rol)时,以下数据集触发错误:
Wild<-c(1,1,2,2,3,3) Input<-c(2,3,1,3,1,2) Sale<-c(3,2,3,2,1,1) HH<-c(6,5,4,3,2,1) data<-data.frame(Wild,Input,Sale)
执行summary(rol(data,HH))时,出现错误:
Error in pr[i] <- pr[i] * exp(util_combine[i, oset[i, j]])/deno : replacement has length zero
但使用另一组相似数据集却能正常返回系数结果:
X1<-c(1,1,2,2,3,3) X2<-c(2,3,1,3,1,2) X3<-c(3,2,3,1,2,1) X4<-c(6,5,4,3,2,1) test<-data.frame(X1,X2,X3) summary(rol(test,X4))
错误原因
两组数据的核心差异在于排序值的唯一性:
- 第一组数据中,第5行(对应
HH=2)的三个排序列Wild=3、Input=1、Sale=1出现了并列排名(两个1)。 - Rank-ordered Logit模型要求每个观测的偏好排序必须是严格的、无重复的(每个选项的排名值唯一),
rol函数无法处理并列排名的情况,计算过程中会出现效用项或分母为空的情况,最终触发赋值长度为0的错误。 - 第二组数据的所有观测中,三个排序值都是唯一的(比如第5行
X1=3、X2=1、X3=2无重复),因此模型可以正常计算。
解决方法
检查并修正数据集,确保每个HH对应的所有选项的排序值都是严格唯一的,不存在并列排名的情况。
内容的提问来源于stack exchange,提问作者Kartik Chugh
相关产品推荐
相关产品推荐

