使用mlogit包建立多项式Logit模型的设置

3
我们正在试图使用mlogit包来估计出行方式选择模型。最终,我们打算设置一个更多变量的嵌套模型,但是我们首先尝试建立一个非嵌套多项式模型来进行测试。特别地,我们试图实现的与mlogit包中的示例不同,因为我们具有某些特定替代品(例如自行车 vs 步行 vs 驾驶)效用函数。
我们起始的数据集(简化版)如下所示:
"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

我们要为这个测试模型指定的效用函数如下:

效用(汽车)=beta1*汽车数/工人数

效用(步行)=步行方式时间常量+beta6*步行方式时间+beta7*汽车数/工人数

效用(自行车)=自行车方式时间常量+beta8*自行车方式时间+beta9*汽车数/工人数

我们认为,为了使我们的数据看起来更像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[!fixed])的错误信息为: Lapack例程dgesv:系统恰好是奇异的

我们认为这个公式指定了我们想要的效用函数,但不确定是否正确。此外,我们需要手动复制我们已经完成的数据记录吗?或者mlogit.data()能否从我们的初始数据集中构建一组选择备选项?

1个回答

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 | 1 | 0失败,则可能存在数据问题;如果成功,则存在公式问题。

谢谢,这是一个很好的测试,可以尝试缩小问题范围。我重新运行了估计,将公式更改为上面建议的版本。我得到了相同的错误。现在是分析数据可能格式不正确的时候了。当我使用公式0 | 1 | 0进行测试时,我得到了一个新的错误:如果(abs(x-oldx)<ftol){:TRUE / FALSE需要缺少值,在数据某处缺少值时会出现此错误。 - Ennazus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接