r - 使用 mlogit 包版本 1.1-0 时出错。 dfidx::dfidx 提供 id2 是无关紧要的

标签 r mlogit

以下是生成错误的最小工作示例。以下代码在以前版本的 mlogit 中有效,但在 1.1-0 版本(2020 年 5 月 26 日发布)中不再有效。

library(mlogit)
data("ModeCanada", package = "mlogit")
bususers <- with(ModeCanada, case[choice == 1 & alt == "bus"]) 
ModeCanada <- subset(ModeCanada, ! case %in% bususers) 
ModeCanada <- subset(ModeCanada, noalt == 4) 
ModeCanada <- subset(ModeCanada, alt != "bus") 
ModeCanada$alt <- ModeCanada$alt[drop = TRUE] 
KoppWen00 <- mlogit.data(ModeCanada, shape='long', 
    chid.var = 'case',alt.var = 'alt', choice = 'choice',            
    drop.index = TRUE, varying = 5:8) 

在执行上面最后一行代码时,会生成以下错误:error in dfidx::dfidx(data = data, dfa$idx, drop.index = dfa#drop.index for data in wide format,提供 id2 是无关紧要的。 此错误消息在两个方面令人困惑。首先,代码似乎误解了我的数据;数据是长格式(这是 附带的示例“长”数据mlogit 打包并在他们的几个示例中工作)并且我将参数传递给函数“long”,但错误表明数据被解释为“wide”并且这导致了问题。第二部分错误消息告诉我 id2 是无关紧要的,但我不知道 id2 是什么;搜索 mlogit 小插图和包描述id2 未产生任何结果。

最佳答案

问题似乎是由 dfidx 处理(或接收)数据的方式引起的。默认情况下,mlogit.data(在最新版本的 mlogit 包中是 dfidx 的包装器)能够找到“varying”列,当数据是长格式时。例如,关于交通选择的数据,如果个人 i 选择交通选项 j = 1, .., J,dfidx 可以看出第 5 列到第 8 列是不同交通选择 j 的属性(例如,乘坐汽车的成本、火车或公共(public)汽车),而不是个人 i 的属性(property)(参见 ModeCanada 第 9 列中的收入,它不是“变化的”)。因此,似乎当“可变”参数传递给 mlogit.data 时,它会强制函数将数据解释为“宽”格式,尽管用户甚至传递了函数参数“shape = long”。

在这种情况下,解决方案只是从函数 mlogit.data 中删除参数“varying”,因为当您向 mlogit.data 传递 long 数据时,mlogit.data 现在可以确定自己的可变列格式。也就是说,以下代码将实现您的目标。

library(mlogit)
data("ModeCanada", package = "mlogit")
bususers <- with(ModeCanada, case[choice == 1 & alt == "bus"]) 
ModeCanada <- subset(ModeCanada, ! case %in% bususers) 
ModeCanada <- subset(ModeCanada, noalt == 4) 
ModeCanada <- subset(ModeCanada, alt != "bus") 
ModeCanada$alt <- ModeCanada$alt[drop = TRUE] 
KoppWen00 <- mlogit.data(ModeCanada, shape='long', 
    chid.var = 'case',alt.var = 'alt', choice = 'choice',            
    drop.index = TRUE) 

关于r - 使用 mlogit 包版本 1.1-0 时出错。 dfidx::dfidx 提供 id2 是无关紧要的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62249678/

相关文章:

r - 如何将参数传递给函数内的 dplyr 连接函数?

R - 仅选择数据框的因子列

r - 用于多项回归的多重插补和 mlogit

R:如何将我的数据格式化为多项式 Logit?

R mlogit 包 : use LAPACK instead of LINPACK

python - Python 和 Stata 多项式 Logit 模型不同的结果

r - dplyr group_by 超过两列的元素

r - summary.rms(sfit) : adjustment values not defined here or with datadist for some variables 中的错误

在 R 中删除国家 map 边界之外的数据

r - mlogit 的 vglm() 和 multinomial() 结果的巨大差异