2

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

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")

最后,当我使用 mlgit 命令时,我得到了这个错误。

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 上的第一篇文章。我经常访问这个网站,到目前为止,我已经找到了解决方案,因此不需要发帖。我浏览了几乎所有类似的帖子,都是徒劳的。我是离散选择建模的新手,所以我不知道我是否在这里犯了任何基本错误。

另外,我不确定是什么chid.var

4

1 回答 1

0

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

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

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

其中选择是您要预测的因分类变量。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
于 2017-07-28T17:25:21.120 回答