我试图在R中使用mlogit来产生运输模式选择。问题是我有一个仅适用于某些替代方案的变量。
更具体地说,我试图预测使用汽车,公交和非机动交通方式的可能性。我的预测因素是:距离,公交等待时间,家庭车辆数量和车辆出行时间。
当我以这种方式格式化时,它可以工作:
> amres<-mlogit(mode~ivt+board|distance+nveh,data=AMLOGIT)
然而,我在车辆旅行时间(ivt)中得到的结果没有意义:
> summary(amres)
Call:
mlogit(formula = mode ~ ivt + board | distance + nveh, data = AMLOGIT,
method = "nr", print.level = 0)
Frequencies of alternatives:
auto tansit nonmotor
0.24654 0.28378 0.46968
nr method
5 iterations, 0h:0m:2s
g'(-H)^-1g = 6.34E-08
gradient close to zero
Coefficients :
Estimate Std. Error t-value Pr(>|t|)
tansit:(intercept) 7.8392e-01 8.3761e-02 9.3590 < 2.2e-16 ***
nonmotor:(intercept) 3.2853e+00 7.1492e-02 45.9532 < 2.2e-16 ***
ivt 1.6435e-03 1.2673e-04 12.9691 < 2.2e-16 ***
board -3.9996e-04 1.2436e-04 -3.2161 0.001299 **
tansit:distance 3.2618e-04 2.0217e-05 16.1336 < 2.2e-16 ***
nonmotor:distance -2.9457e-04 3.3772e-05 -8.7224 < 2.2e-16 ***
tansit:nveh -1.5791e+00 4.5932e-02 -34.3799 < 2.2e-16 ***
nonmotor:nveh -1.8008e+00 4.8577e-02 -37.0720 < 2.2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Log-Likelihood: -10107
McFadden R^2: 0.30354
Likelihood ratio test : chisq = 8810.1 (p.value = < 2.22e-16)
正如你所看到的,统计数据看起来很棒,但ivt应该是一个负系数而不是一个正数。我的想法是,非机动部分全部为0,正在影响它。我相信我要做的就是使用如下所示的等式的第三部分:
> amres<-mlogit(mode~board|distance+nveh|ivt,data=AMLOGIT)
然而,这导致:
Error in solve.default(H, g[!fixed]) :
Lapack routine dgesv: system is exactly singular: U[10,10] = 0
我相信这也是因为非机动车的变量全是0,但我不确定如何解决这个问题。如果不适用于所有备选方案,如何包含备用特定变量?
答案 0 :(得分:2)
我并不精通logit模型的各种实现,但我认为它与确保您在人与人之间存在差异有关,矩阵的替代方案可以通过替代选择器和选择器之间的变化来正确确定。 你怎么说
amres<-mlogit(mode~distance| nveh | ivt+board,data=AMLOGIT)
mlogit
在管道之间有一个组间隔,我理解如下:第一部分是你的基本公式,第二部分是不同选择的变量(即只有特定于人,性别,收入 - 我认为nveh应该在这里)而第三部分则因其他选择而异。
答案 1 :(得分:2)
看起来你可能完美分离。你有没有通过例如检查看看变量的crosstables? (如果预测变量的一个组合允许完美预测,则无法拟合模型...)在这方面有助于了解数据集的大小 - 您可能过度拟合了您拥有的数据量。这是建模中的一般问题,并非特定于mlogit
。
你说“统计数据看起来很棒”,但Pr(>|t|)
和Likelihood ratio test
的值看起来令人难以置信,这与这个问题是一致的。这意味着系数的估计可能是不准确的。 (它们是否与单变量建模产生的系数相似?)。也许更简单的模型会更合适。
修改 @ user3092719:
你正在拟合广义线性模型,它很容易过度拟合(因为结果变量是离散或名义 - 即限制数量的值)。 mlogit
是逻辑回归的延伸;这是后者的一个简单例子:
> df1 <- data.frame(x=c(0, rep(1, 3)),
y=rep(c(0, 1), 2))
> xtabs( ~ x + y, data=df1)
y
x 0 1
0 1 0
1 1 2
请注意右上角的零点。这显示了“完美分离”,这意味着如果您x=0
基于此集合确定 y=0
,则> summary(glm(y ~ x, data=df1, binomial(link = "logit")))
。因此,概率预测模型没有多大意义。
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -18.57 6522.64 -0.003 0.998
x 19.26 6522.64 0.003 0.998
给出
Std. Error
这里Number of Fisher Scoring iterations: 17
s的大小相对于系数的值而言是可疑的。你也应该被{{1}}警告 - 大号。需要适合的迭代表明数值不稳定。
您的解决方案似乎涉及确保您的模型中不会出现完全分离的问题,但如果没有最小的工作示例则很难确定。