r - 为什么 DCE 随机参数模型中的奇点错误 - mlogit - 由于选择退出/不购买?
问题描述
我正在从事具有以下特征的离散选择实验: 3 个备选方案,其中包括 1 个选择退出。2 个备选方案中的每一个都具有 3 个属性,每个属性具有 3 个因子水平。每个受访者有 6 个选择任务要完成。所有 3 个参数(替代项)都已进行效果类型编码。
我想创建一个随机参数错误组件模型,没有购买/退出作为拦截。但是,这会在使用“mlogit”包时产生奇异错误。任何人都可以就如何处理这个问题提供建议吗?
随机参数模型创建:
rpm1 <- mlogit(choice ~ 0 + Prot + Carb + Price, data=ce,
rpar = c(Prot = "n", Carb = "n", Price = "n"), panel = TRUE,
correlation = TRUE, R = 10, Halton = TRUE)
数据示例(长格式):
id ques choice alti Prot Carb Price NoBuy
1 26 1 FALSE 1 Meat B 20 0
2 26 1 FALSE 2 Veg A 20 0
3 26 1 TRUE 3 NoBurger 0 0 1
4 26 2 FALSE 1 Meat C 10 0
5 26 2 FALSE 2 Poultry A 10 0
6 26 2 TRUE 3 NoBurger 0 0 1
7 26 3 FALSE 1 Poultry C 5 0
8 26 3 TRUE 2 Meat B 20 0
9 26 3 FALSE 3 NoBurger 0 0 1
10 26 4 FALSE 1 Poultry A 20 0
11 26 4 FALSE 2 Veg B 5 0
12 26 4 TRUE 3 NoBurger 0 0 1
13 26 5 FALSE 1 Veg B 10 0
14 26 5 FALSE 2 Meat C 10 0
15 26 5 TRUE 3 NoBurger 0 0 1
16 26 6 FALSE 1 Veg A 5 0
17 26 6 FALSE 2 Poultry B 5 0
18 26 6 TRUE 3 NoBurger 0 0 1
19 30 1 TRUE 1 Meat B 20 0
20 30 1 FALSE 2 Veg A 20 0
解决方案
根据您所说的来诊断问题有点棘手,但是,您可以尝试一些事情。
奇点误差意味着您的粗麻布矩阵不能反转,即您无法获得标准误差。这很可能是由于您的模型被过度指定或您的数据没有足够的变化造成的。
你可以试试这个模型调用:
rpm1 <- mlogit(choice ~ Price + Prot + Carb + NoBuy |-1, data=ce,
rpar = c(Prot = "n", Carb = "n", Price = "n"), panel = TRUE,
correlation = TRUE, R = 10, Halton = TRUE)
我已经添加NoBuy
了您的实用程序函数,它将计算并作为截距工作。我还添加了|-1
,这将删除任何其他拦截。您只能估计最多等于备选方案的数量J-1
。J
如果您尝试估计 all J
,您的模型将失败。
其他一些需要注意的事情。抽奖次数非常非常少。您将很难使模型收敛,并且您的结果不会很有意义。correlation = TRUE
是一个完全指定的混合 logit,其中下 Cholesky 矩阵的所有非对角元素都被估计。这是一个非常复杂的模型,如果您的数据很差,可能很难估计。最后,我会仔细考虑使用正态分布的价格参数,因为您无法从这样的模型中估计福利措施。
推荐阅读
- python - 奶牛和公牛游戏一直在说 0 头牛,0 头公牛?
- python - 如何将登录重定向到Django中不同用户的不同页面?
- angular - Angular ngx-extended-pdf-viewer 禁用媒体打印属性
- node.js - 我想更新用户资料
- javascript - 在javascript按钮中分配html实体代码不起作用
- javascript - 我在从 create-react-app 项目连接 auth0 授权时遇到问题
- oracle-cloud-infrastructure - 终止的实例需要多长时间才能从控制台中删除?
- python-3.x - 获取div内的所有span
- java - Java API中“实现”和“所有实现的接口”之间的区别
- c# - Selenium:其他测试用例无法访问的变量