多项式Logit模型和嵌套Logit模型

6

我正在使用R编程中的mlogit包。我已经将原始数据从宽格式转换为长格式。这是一个转换后的数据框的示例,我称之为'long_perp'。所有独立变量都是个体特定的。数据集中有4258个唯一观察值。

         date_id  act2 grp.bin pdist   ship   sea avgknots   shore day location chid  alt
4.dive 40707_004  TRUE       2 2.250 second light 14.06809 2.30805  12    Lower    4 dive
4.fly  40707_004 FALSE       2 2.250 second light 14.06809 2.30805  12    Lower    4  fly
4.none 40707_004 FALSE       2 2.250 second light 14.06809 2.30805  12    Lower    4 none
5.dive 40707_006 FALSE       2 0.000 second light 15.12650 2.53312  12    Lower    5 dive
5.fly  40707_006  TRUE       2 0.000 second light 15.12650 2.53312  12    Lower    5  fly
5.none 40707_006 FALSE       2 0.000 second light 15.12650 2.53312  12    Lower    5 none
6.dive 40707_007 FALSE       1 1.995 second light 14.02101 2.01680  12    Lower    6 dive
6.fly  40707_007  TRUE       1 1.995 second light 14.02101 2.01680  12    Lower    6  fly
6.none 40707_007 FALSE       1 1.995 second light 14.02101 2.01680  12    Lower    6 none

'act2'是因变量,由一只漂浮在水上的鸟在遇到船时可以做出的选择组成;飞行、潜水或无动作。我对这些概率与数据框中其余自变量的关系感兴趣,即垂直距离船舶路径(pdist)、海况(sea)、速度(avgknots)、离岸距离(shore)等。自变量由二元、因子和连续变量组成。
我运行了两个多项Logit模型,一个包括所有选择选项,另一个仅包括子集。然后,我使用hmftest()函数比较这些模型以测试IIA假设。结果非常令人困惑。我将包括两个模型和测试输出的代码(以防我在代码中误指定模型)。
# model including all choice options (fly, dive, none)
mod.1 <- mlogit(act2 ~ 1 | pdist + as.factor(grp.bin)  +
    as.factor(sea) + avgknots + shore + as.factor(location),long_perp , 
    reflevel = 'none')  

# model including only a subset of choice options (fly, dive)
mod.alt <- mlogit(act2 ~ 1 | pdist + as.factor(grp.bin)  +
    as.factor(sea) + avgknots + shore + as.factor(location),long_perp , 
    reflevel = 'none', alt.subset = c("fly","dive"))

# IIA test
hmftest(mod.1, mod.alt)
# output
            Hausman-McFadden test

data:  long_perp
chisq = -968.7303, df = 7, p-value = 1
alternative hypothesis: IIA is rejected

如您所见,卡方统计量为负数!我认为我要么做错了什么,要么IIA被违反了。这个结果对选择子集(飞行、潜水)成立,但是在选择子集(无、潜水)中保持了IIA假设?这让我感到困惑。
接下来,我尝试制定一个嵌套模型来放宽IIA假设。我将选择嵌套为nest1 = none,nest2 = fly,dive。这对我来说很有意义,因为这似乎是一个逻辑上的分界点,鸟决定是否反应,然后决定采取哪种反应。
我不清楚如何运行嵌套逻辑模型(即使在阅读了mlogit的两篇vignettes之后,Croissant vignetteTrain vignette)。
当我按照Croissant vignette中的示例运行我的分析时,我会得到以下错误。
nested.1 <- mlogit(act2 ~  0 | pdist + as.factor(grp.bin) + as.factor(ship) +
    as.factor(sea) + avgknots + shore + as.factor(location),
    long_perp , reflevel="none",nests = list(noact = "none", 
    react = c("dive","fly")), unscaled = TRUE)

# Error in solve.default(crossprod(attr(x, "gradi")[, !fixed])) : 
  Lapack routine dgesv: system is exactly singular: U[19,19] = 0

我已经阅读了关于这个错误信息的一些内容,它可能是由于完全分离而发生。我查看了一些数据表,不认为这是发生的情况,因为我有4000多个观测值,只有一个因子变量具有超过2个水平(它有3个)。
非常感谢对这些特定问题的帮助,但我也愿意接受其他分析方法来回答我的问题。我主要关心飞行概率与垂直距离船舶路径的函数关系。
谢谢,Tim
1个回答

0

要获得正的卡方值,请按以下方式更改代码:

alt.subset = c("none", "fly")

也就是说,参考水平也将包含在子集中。这可能会有所帮助,尽管 P 值可能不会有太大变化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接