1

我正在尝试在 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,但我不确定如何解决这个问题。如果它不适用于所有替代方案,我如何包含替代特定变量?

4

2 回答 2

2

我并不精通 logit 模型的各种实现,但我想这与确保您在不同人之间存在差异有关,并且可以通过替代方案和选择器之间的差异来正确确定矩阵的替代方案。你从说什么

amres<-mlogit(mode~distance| nveh | ivt+board,data=AMLOGIT)

mlogit在管道之间有一个组分隔,据我了解如下:第一部分是您的基本公式,第二部分是变量,不会因替代品而变化(即只有个人特定、性别、收入——我认为 nveh 应该在这里),而第三部分因替代方案而异。

顺便说一句,Ken Train 有一组关于 mlogit 的小插曲,这可能会有所帮助。Viton 提到了带有管道的隔板。

肯火车的小插曲

菲利普·维顿的小插曲

伊夫羊角面包的小插曲

于 2013-12-11T21:33:26.213 回答
2

看起来你可能有完美的分离。您是否通过例如查看变量的交叉表来检查这一点?(如果预测变量的一种组合允许完美预测,则无法拟合模型......)在这方面了解数据集的大小会有所帮助 - 您可能过度拟合您拥有的数据量。这是建模中的一般问题,而不是特定于mlogit.

您说“统计数据看起来很棒”,但Pr(>|t|)s 的值和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. Errors 的大小相对于系数的值非常大。你也应该被提醒Number of Fisher Scoring iterations: 17- 大号。拟合所需的迭代表明数值不稳定性。

您的解决方案似乎涉及确保在您的模型中不会出现这种完全分离的问题,尽管如果没有最小的工作示例就很难确定。

于 2013-12-11T22:42:31.907 回答