R mlogit抛出solve.default中的错误(H,g [!fixed]):系统是计算奇异的:倒数条件数

时间:2017-07-21 06:38:18

标签: r mlogit

我试图对以下数据进行离散选择建模。基本上,30个顾客有16种不同的披萨选择。他们可以选择超过1种比萨饼,他们选择的比萨饼由选择变量表示。

pizza   cust choice pan thin pineapple veggie sausage romano mozarella oz
1      1  Cust1      0   1    0         1      0       0      1         0  1
2      2  Cust1      1   0    1         1      0       0      0         0  0
3      3  Cust1      0   0    0         1      0       0      0         1  1
4      4  Cust1      1   0    1         1      0       0      0         0  0
5      5  Cust1      1   1    0         0      1       0      0         0  1
6      6  Cust1      0   0    1         0      1       0      1         0  0
7      7  Cust1      0   0    0         0      1       0      0         0  1
8      8  Cust1      1   0    1         0      1       0      0         1  0
9      9  Cust1      0   1    0         0      0       1      0         1  0
10    10  Cust1      1   0    1         0      0       1      0         0  1
11    11  Cust1      0   0    0         0      0       1      1         0  0
12    12  Cust1      0   0    1         0      0       1      0         0  1
13    13  Cust1      0   1    0         0      0       0      0         0  0
14    14  Cust1      1   0    1         0      0       0      0         1  1
15    15  Cust1      0   0    0         0      0       0      0         0  0
16    16  Cust1      0   0    1         0      0       0      1         0  1
17     1 Cust10      0   1    0         1      0       0      1         0  1
18     2 Cust10      0   0    1         1      0       0      0         0  0
19     3 Cust10      0   0    0         1      0       0      0         1  1
20     4 Cust10      0   0    1         1      0       0      0         0  0

当我使用以下命令转换我的数据时。我尝试在此处进行一些更改,例如添加chid.var = "chid"alt.levels=c(1:16)。如果我同时使用alt.levelsalt.var,则会给我一个错误,说披萨已经存在并将被替换。但是,如果我使用其中任何一个,我都没有错误。

pz <- mlogit.data(pizza,shape = "long",choice = "choice",
                  varying = 4:8, id = "cust", alt.var =  "pizza")

最后,当我使用mlogit命令时,我收到此错误。

mlogit(choice ~ pan + thin + pineapple + veggie + sausage + romano + mozarella + oz, pz)

Error in solve.default(H, g[!fixed]) : 
  system is computationally singular: reciprocal condition number = 8.23306e-19

这是我在stackoverflow上的第一篇文章。我经常访问这个网站,到目前为止从来没有发布,因为我已经找到了解决方案。我经历了几乎所有类似的帖子,如this一个但是徒劳无功。我是离散选择建模的新手,所以我不知道我是否在这里犯了任何根本性的错误。

另外,我不确定chid.var的作用。

1 个答案:

答案 0 :(得分:0)

无法解决此问题。虽然你可以使用nnet包中的multinom函数。它似乎工作。验证了答案。

数据集保持与问题中显示的相同,因此不需要任何转换

library("nnet")
pizza_model <- multinom(choice ~ Price + IsThin + IsPan ,data=pizza_all)
summary(pizza_model)

其中choice是您要预测的依赖分类变量。 Price,IsThin和IsPan是独立变量。以下是输出

Call:
multinom(formula = choice ~ Price + I_cPan + I_cThin, data = pizza_all)

Coefficients:
                  Values Std. Err.
(Intercept)  0.007192623 1.3298018
Price       -0.149665357 0.1464976
I_cPan       0.098438084 0.3138538
I_cThin      0.624447867 0.2637110

Residual Deviance: 553.8519 
AIC: 561.8519