2012-09-25 97 views
3

我们正在尝试使用mlogit软件包来估计一个旅行模式选择模型。最终,我们打算建立一个包含更多变量的嵌套模型,但是我们试图首先设置一个非常简单的非嵌套多项式模型来测试。特别是,我们试图完成的不同于mlogit包中的示例,因为我们有一些替代特定的(例如,自行车vs.步行与驱动器)效用函数。使用mlogit软件包设置多项logit模型

我们的出发数据集(简化)有以下形式:

"recid","mode","walk_mode_time","bike_mode_time","carsdivworkers" 
254,"Bike",15.0666484832764,4.51999473571777,0.5 
7,"SOV",17.9941387176514,5.39824199676514,2 
40,"Walk",43,12.8999996185303,1 

,我们要指定该测试模型的效用函数如下:

实用程序(SOV)=β1的* carsdivworkers

实用程序(步行)=常数(步行)+ beta6 *(walk_mode_time)+联蛋白β7*(carsdivworkers)

实用程序(自行车)=常数(自行车)+ beta8 *(bike_mode_tim E)+ beta9 *(carsdivworkers))

为了使我们的数据看起来更像mlogit文档中的例子中,我们认为,我们需要构建我们的数据:

  1. 每个记录(其中列出了选择替代)复制也包括给定旅行的非选择替代品。
  2. 另类特定值清零对非选择的替代

这导致了数据结构,看起来像:

"recid","mode","choice","walk_mode_time",”bike_mode_time","cardivwkr" 
7,"Bike",FALSE,0,5.39824199676514,1 
7,"DriveTransit",FALSE,0,0,1 
7,"HOV2",FALSE,0,0,1 
7,"HOV3",FALSE,0,0,1 
7,"SOV",TRUE,0,0,1 
7,"Walk",FALSE,17.9941387176514,0,1 
7,"WalkTransit",FALSE,0,0,1 
40,"Bike",FALSE,0,12.8999996185303,0.5 
40,"DriveTransit",FALSE,0,0,0.5 
40,"HOV2",FALSE,0,0,0.5 
40,"HOV3",FALSE,0,0,0.5 
40,"SOV",FALSE,0,0,0.5 
40,"Walk",TRUE,43,0,0.5 
40,"WalkTransit",FALSE,0,0,0.5 
254,"Bike",TRUE,0,4.51999473571777,1 
254,"DriveTransit",FALSE,0,0,1 
254,"HOV2",FALSE,0,0,1 
254,"HOV3",FALSE,0,0,1 
254,"SOV",FALSE,0,0,1 
254,"Walk",FALSE,15.0666484832764,0,1 
254,"WalkTransit",FALSE,0,0,1 

然后我们变成一个mlogit数据结构此如下:

logit_data <- mlogit.data(data=joined_data, 
          choice="choice", 
          shape="long", 
          alt.var="mode", 
          chid.var="recid", 
          drop.index=TRUE, 
          reflevel= "SOV") 

而我们的型号规格:

mc <-mlogit(formula= choice ~ 1 | carsdivworkers | walk_mode_time + bike_mode_time, 
      data = logit_data, reflevel= "SOV") 

不幸的是,我们得到以下错误,当我们运行这个对我们的完整数据集:在solve.default

错误(H,G [固定的!): LAPACK日常dgesv:系统正是奇异

我们认为这个公式指定了我们想要的效用函数,但是不确定。它是否正确?另外,我们是否需要手动复制我们的数据记录?或者有没有办法让mlogit.data()从我们的初始数据集中构建一组选择选项?

回答

0

考虑到你准备的方式walk_mode_timebike_mode_time你应该尝试walk_mode_time + bike_mode_time | 1 + carsdivworkers | 0作为公式。我通常发现生成部分归零变量很方便,并且只使用公式的第一部分,即walk_mode_time + bike_mode_time + walk_mode_carsdivworkers + bike_mode_carsdivworkers + ... | 1 | 0*_carsdivworkers给出的值小于替代值的数量(因此未指定的变量的系数因此为0,其他变量相对于此) 。

也可能是您的数据有问题,例如,选择零个或多于一个替代品的选择情况,对所有替代品具有相同价值的变量等。如果公式0 | 1 | 0失败,那么您可能会遇到数据问题,如果发生这种情况,则会出现公式问题。

+0

谢谢 - 这是一个很好的测试,试图缩小问题的范围。我重新运行估算,将公式更改为上面的建议版本。我得到了同样的错误。所以现在是分析数据格式不正确的时候了。当我用公式0 |进行测试时1 | 0,我得到一个新的错误:错误if(abs(x - oldx) Ennazus