0

我正在从事具有以下特征的离散选择实验: 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
4

2 回答 2

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-1J如果您尝试估计 all J,您的模型将失败。

其他一些需要注意的事情。抽奖次数非常非常少。您将很难使模型收敛,并且您的结果不会很有意义。correlation = TRUE是一个完全指定的混合 logit,其中下 Cholesky 矩阵的所有非对角元素都被估计。这是一个非常复杂的模型,如果您的数据很差,可能很难估计。最后,我会仔细考虑使用正态分布的价格参数,因为您无法从这样的模型中估计福利措施。

于 2019-11-30T11:45:46.420 回答
0

我相信我面临着与此处提到的相同的问题:包括选择退出作为 R Mlogit 中的替代特定常量

当我在示例中为我的虚拟变量编码时NoBuy,我仍然遇到与奇点相关的问题。如果选择此选项,则选择退出的虚拟NoBuy变量为 1,而如果选择选项 A 或 B,则它的值为 -1。(如果我在上面的数据框中选择选项 A 或 B 时将值 0 分配给选择退出虚拟对象,我会遇到同样的问题。)即,Warning message: In sqrt(diag(vcov(object))) : NaNs produced

我对属性和NoBuy虚拟对象的效果类型编码是否正确?

这是我的效果编码示例(始终使用选择退出属性级别作为参考):

contrasts(ce_long$Prot) Meat Poultry Veg Meat 1 0 0 Poultry 0 1 0 Veg 0 0 1 NoBurger -1 -1 -1

contrasts(ce_long$Carb) A B C A 1 0 0 B 0 1 0 C 0 0 1 0 -1 -1 -1

contrasts(ce_long$Price) 10 20 5 10 1 0 0 20 0 1 0 5 0 0 1 0 -1 -1 -1

于 2019-12-03T11:42:45.400 回答