mar*_*llt 5 r multinomial logistic-regression mlogit
我在程序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
Run Code Online (Sandbox Code Playgroud)
'act2'是因变量,由船上接近漂浮在水面上的鸟类的选择组成; 飞,潜水,或没有.我感兴趣的是这些概率如何与data.frame中剩余的自变量相关,即与船舶路径(pdist)的海洋条件(海洋),速度(avgknots),到岸(岸)的距离等的垂直距离.变量由二分,因子和连续变量组成.
我运行了两个多项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
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,chisquare统计是负面的!我认为我要么做错了,要么就是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
Run Code Online (Sandbox Code Playgroud)
我已经阅读了一些关于此错误消息的信息,因为完全分离可能会发生这种情况.我查看了一些数据表,并且不相信这种情况正在发生,因为我有4,000多个观测值,只有一个因子变量超过2个等级(它有3个).
非常感谢您对这些特定问题的帮助,但我也愿意接受我可以用来回答我的问题的替代分析.我主要感兴趣的是飞行的概率与船舶路径的垂直距离的函数.
蒂姆,谢谢
小智 0
要获得正的卡方,请按如下方式更改代码:
alt.subset = c("none", "fly")
Run Code Online (Sandbox Code Playgroud)
也就是说,参考电平也将在子集中。尽管 P 值可能变化不大,但它可能会有所帮助。