首页 > 解决方案 > 与模式相关的 mlogit 包的问题

问题描述

我正在使用 mlogit 包来运行多项混合效应模型。数据一开始就是长格式。我试图确定一个变量是否与具有 3 个类别(0、1、2)的分类结果、睡眠持续时间的差异有关。样本数据为:

id  sleep  var1
1    0     1.5
1    2     1.5
2    1      2
2    1      2
3    0      1

我尝试运行以下代码:

mldata <- mlogit.data(df, choice="sleep", shape ="long")

mlogit.model1 <- mlogit(sleep ~ 1 | var1, data = df, reflevel = "0")

Error in dfidx::dfidx(data = data, dfa$idx, drop.index = dfa$drop.index,  :
  The choice variable must have exactly two modalities

在之前的一篇文章中,我读到这条消息是由于包含 mlogit 包的“变化”功能引起的。但是,我没有包括在内,所以我不明白发生了什么。

有人可以帮忙吗?

标签: rmlogit

解决方案


我有同样的问题,但似乎与shape争论的一些混淆有关。从其中一个小插曲:

数据集可以有两种不同的形状:宽形(每种选择情况一行)或长形(每种选择一行,因此,每种选择情况的行数与选择数一样多)。

因此,虽然您的数据在传统意义上是长格式的,但它在 mlogit 包意义上是宽格式,因为每一行都有一个选择。

我发现这非常令人困惑,并且错误消息根本没有帮助。包中的两个示例是

data("Fishing", package = "mlogit")
head(Fishing[, 1:4])
#R>      mode price.beach price.pier price.boat
#R> 1 charter     157.930    157.930    157.930
#R> 2 charter      15.114     15.114     10.534
#R> 3    boat     161.874    161.874     24.334
#R> 4    pier      15.134     15.134     55.930
#R> 5    boat     106.930    106.930     41.514
#R> 6 charter     192.474    192.474     28.934
Fish <- dfidx(Fishing, varying = 2:9, shape = "wide", choice = "mode")

对于宽格式和

data("TravelMode", package = "AER")
head(TravelMode)
#R>   individual  mode choice wait vcost travel gcost income size
#R> 1          1   air     no   69    59    100    70     35    1
#R> 2          1 train     no   34    31    372    71     35    1
#R> 3          1   bus     no   35    25    417    70     35    1
#R> 4          1   car    yes    0    10    180    30     35    1
#R> 5          2   air     no   64    58     68    68     30    2
#R> 6          2 train     no   44    31    354    84     30    2

# default for dfidx's shape is long
TM2 <- dfidx(TravelMode, idx = c("individual", "mode"))

对于长格式。注意modechoice带有no/的列yes


推荐阅读