【问题标题】:R mlogit throws Error in solve.default(H, g[!fixed]):system is computationally singular: reciprocal condition numberR mlogit 在solve.default(H,g [!fixed])中抛出错误:系统在计算上是奇异的:倒数条件数
【发布时间】:2017-07-21 06:38:17
【问题描述】:

我正在尝试对以下数据进行离散选择建模。基本上,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 做了什么。

【问题讨论】:

    标签: r mlogit


    【解决方案1】:

    无法解决此问题。虽然您可以使用 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
    

    【讨论】:

    • 感谢您跟进有关您如何处理它的一些信息。您能否在nnet 中发布更多详细信息,说明您最终如何让您的模型工作,以使您问题的未来读者受益?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多