使用 mlogit 在多项式混合 logit 模型中变化的问题

Issue with varying in multinomial mixed logit model using mlogit

提问人:mmm coder 提问时间:7/24/2023 最后编辑:jay.sfmmm coder 更新时间:7/24/2023 访问量:41

问:

我正在尝试运行随机截距多项式 logit 模型

编号 分辨率 Index_1 Index_2
6 安定 印第安纳州 43.3267816 49.2
8 安定 特拉华州 72.6980536 48.5
9 解雇 特拉华州 72.6980536 48.5
10 安定 纽约 72.0173234 48.4
11 得克萨斯州 84.8092534 49.8

结果变量为“分辨率”,Index_1和Index_2嵌套在状态中。

无论在尝试设置数据时形状是设置为“宽”还是“长”,我都会收到此错误: 猜测错误(变化): 未能从其名称中猜测时变变量

mlogit_data <- mlogit.data(data, shape = "wide", choice = "_Resolution", varying = 3:5, alt.levels = NULL)

有谁知道如何解决这个问题?

R mlogit

评论

0赞 jay.sf 7/24/2023
尝试,更容易。或。nnet::multinom()VGAM::multinomial()
0赞 mmm coder 7/24/2023
@jay.sf NNET 是否允许我嵌套在状态数据中/使用多级建模?
0赞 jay.sf 7/24/2023
可能不会,但不确定是否会。请看下面的回答。mlogit:mlogit

答:

0赞 jay.sf 7/24/2023 #1

作为初步说明,如果您想计算多项式混合 logit 模型,这里有一个非常相关的答案,您可能会感兴趣。

无论如何,您在指定参数时可能会打错字。此外,您需要使用参数,该参数指的是在名称中附加字符后缀,默认值为 but you have ;这是必需的,以便内部调用的人可以正确猜测名称(另请参阅 )。sep=".""_"reshape?reshape

mlogit_data <- mlogit::mlogit.data(dat, 
                                   choice="Resolution", 
                                   shape="wide", 
                                   varying=4:5,  ## refers to the Index_* columns
                                   sep='_')
mlogit_data
#    ID Resolution    STATE alt    Index chid idx
# 1   6      FALSE  Indiana   1 43.32678    1 1:1
# 2   6      FALSE  Indiana   2 49.20000    1 1:2
# 3   8      FALSE Delaware   1 72.69805    2 2:1
# 4   8      FALSE Delaware   2 48.50000    2 2:2
# 5   9      FALSE Delaware   1 72.69805    3 3:1
# 6   9      FALSE Delaware   2 48.50000    3 3:2
# 7  10      FALSE New York   1 72.01732    4 4:1
# 8  10      FALSE New York   2 48.40000    4 4:2
# 9  11      FALSE    Texas   1 84.80925    5 5:1
# 10 11      FALSE    Texas   2 49.80000    5 5:2
# 
# ~~~ indexes ~~~~
#    chid alt
# 1     1   1
# 2     1   2
# 3     2   1
# 4     2   2
# 5     3   1
# 6     3   2
# 7     4   1
# 8     4   2
# 9     5   1
# 10    5   2
# indexes:  1, 2 

但是,出于某种原因,他们弃用了该函数并调用了该函数。mlogit::mlogit.datadfidx::dfidx

dfidx::dfidx(dat, idx=c('ID', 'STATE'))
#   Resolution  Index_1 Index_2     idx
# 1    Settled 43.32678    49.2  6:iana
# 2    Settled 72.69805    48.5  8:ware
# 3  Dismissed 72.69805    48.5  9:ware
# 4    Settled 72.01732    48.4 10:York
# 5       Stay 84.80925    49.8 11:exas
# 
# ~~~ indexes ~~~~
#   ID    STATE
# 1  6  Indiana
# 2  8 Delaware
# 3  9 Delaware
# 4 10 New York
# 5 11    Texas
# indexes:  1, 2