我在程序 R 中使用 mlogit 包。我已将数据从原始宽格式转换为长格式。这是转换后的 data.frame 的示例,我将其称为“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”是因变量,包括漂浮在水面上的鸟在靠近船时可能做出的选择;飞行、潜水或无。我对这些概率如何与 data.frame 中的剩余自变量相关感兴趣,即与船舶路径 (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
如您所见,卡方统计量为负!我假设我要么 1. 做错了事,要么 2. 违反了 IIA。这个结果适用于选择子集(飞行,潜水),但是选择子集(无,潜水)支持 IIA 假设?这让我很困惑。
接下来,我尝试制定一个嵌套模型来放松 IIA 假设。我将选项嵌套为nest1 = none,nest2 = fly,dive。这对我来说很有意义,因为这似乎是一个合乎逻辑的中断,鸟决定做出反应或不做出反应,然后决定做出哪种反应。
我不清楚如何运行嵌套的 logit 模型(即使在阅读了 mlogit、Croissant vignette和Train 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
我已经阅读了一些有关此错误消息的信息,它可能由于完全分离而发生。我查看了一些数据表,但不相信这种情况正在发生,因为我有 4,000 多个观察值,并且只有一个因子变量具有 2 个以上的水平(它有 3 个)。
非常感谢您对这些特定问题的帮助,但我也愿意接受可以用来回答我的问题的替代分析。我主要对飞行概率作为与船舶路径垂直距离的函数感兴趣。
谢谢,蒂姆