r - 使用 mlogit 包设置多项式 logit 模型

标签 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)

效用(自行车)= 常数(自行车)+ beta8*(bike_mode_time) + 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[!fixed]) 中的错误: Lapack例程dgesv: system is exactly singular

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

最佳答案

考虑到您准备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 失败,您可能遇到数据问题,如果有效,您遇到公式问题。

关于r - 使用 mlogit 包设置多项式 logit 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12587784/

相关文章:

r - 使用 RSelenium 跨 Windows 和 Mac 进行网页抓取

r - 在R中更改目录

r - ggplot重命名facet_wrap中的facet标签

r - R中列表中元素的快速组合

r - dplyr 无效的下标类型列表

r - 如何减少 ggplot2 中分类 y 轴之间的差距下注刻度

python - 如何在Python中绘制小平面网格(R中的ggplot)

r - Shiny 模块 : switch tabs from within modules that have different namespaces

r - 如何更改 Shiny 的 fileInput 对象的样式?

r - 2条曲线同时非线性回归