使用mlogit包设置多项logit模型

时间:2012-09-25 17:05:17

标签: r

我们正在尝试使用mlogit包估算旅行模式选择模型。最终,我们打算建立一个包含更多变量的嵌套模型,但是我们试图首先建立一个非常简单的非嵌套多项模型来进行测试。特别是,我们试图实现的目标与mlogit包中的示例不同之处在于我们有一些特定于替代的(例如自行车与步行与驱动)实用程序功能。

我们的起始数据集(简化)具有以下形式:

"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)= beta1 * carsdivworkers

Utility(Walk)= Constant(Walk)+ beta6 *(walk_mode_time)+ beta7 *(carsdivworkers)

Utility(Bike)= Constant(Bike)+ beta8 *(bike_mode_time)+ beta9 *(carsdivworkers))

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

  1. 复制的每条记录(列出所选备选方案)也包括特定行程的未选择备选方案。
  2. 针对未选择的替代方案的替代特定值归零
  3. 这导致数据结构如下:

    "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 [!fixed]):   Lapack例程dgesv:系统完全是单数

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

1 个答案:

答案 0 :(得分: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给出的值小于备选量(未指定的系数为{1}}因此零和其他相对于那个)。

您的数据也可能出现问题,例如:选择零或多个备选方案的选择情况,对所有备选方案具有相同值的变量等。如果公式0 | 1 | 0失败,则可能存在数据问题,如果您有公式问题,则可能存在问题。