我们正在尝试使用 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* cardivworkers
效用(步行)= 常数(步行)+ beta6*(walk_mode_time)+ beta7 *(carsdivworkers)
效用(自行车)= 常数(自行车)+ beta8*(bike_mode_time)+ beta9 *(carsdivworkers))
为了使我们的数据看起来更像 mlogit 文档中的示例,我们认为我们需要使用以下结构构建数据:
- 复制的每条记录(其中列出了一个选择的备选方案)还包括给定行程的未选择的备选方案。
- 未选择的替代品的替代品特定值归零
这导致数据结构如下所示:
"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() 从我们的初始数据集中构建一组选择?