我们正在尝试使用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 *
效用(步行)=常数(步行)+ beta6 *(walk_mode_time)+ beta7 *(carsdivworkers)
Utility(Bike)=常数(Bike)+ 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")
不幸的是,当对整个数据集运行此错误时,会出现以下错误:
resolve.default(H,g [!fixed])中的错误:
Lapack例行dgesv:系统完全是单一的
我们认为该公式指定了所需的实用程序函数,但不确定。这样对吗?此外,我们是否需要像完成的那样手动复制数据记录?还是有一种方法让mlogit.data()从我们的初始数据集中构建一组选择备选方案?
最佳答案
考虑到您准备walk_mode_time
和bike_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
失败,则可能是数据问题,如果可行,则是公式问题。
关于r - 使用mlogit软件包设置多项式logit模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12587784/