如何解决mlogitsolve.default(H,g [!fixed])中的错误:系统在计算上是单数的:倒数条件数= 3.03549e-18?

时间:2020-05-29 08:53:44

标签: r mixed-models mlogit

我有一个宽格式的数据,我正在调用mlogit.data,并且尝试使用mlogit包实现一个混合的logit模型,我对分类列(color,size_group)进行了热编码,这是导致以下错误的原因?

model_data中的数字特征已进行log1p转换。

Complete.choice <- mlogit.data(model_data, choice = "y", 
                                 varying = 2:79, shape = "wide", sep = "__", id = "customer_id")
formula <- as.formula("y ~ price + weight + length + height + width + color_white + 
                    color_red + color_black + size_group_1 + size_group_3 + size_group_5 + 
                     size_group_4 + size_group_2 | -1")

# rpar
 features <- c("price","weight","length","height","width","color_white",
              "color_red","color_black" ,"size_group_1",
              "size_group_3","size_group_5","size_group_4","size_group_2" )
random_parameter <- rep("n", 1:length(features))
names(random_parameter) <- features

sample.mxl <- mlogit(formula, Complete.choice , rpar = random_parameter, 
                       R = 40, halton = NA, panel = TRUE, seed = 123, print.level = 0)

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

1 个答案:

答案 0 :(得分:0)

该错误表示Hessian矩阵是奇异的,即行列式为零,并且不存在逆函数。实际上,您无法获得方差-协方差矩阵。

发生这种情况的原因有很多:

  1. 您的数据变化不足以识别模型。您正在尝试估算一个非常复杂的数据,需要从您的数据(变异和观察)中获取大量信息。
  2. 模型规格过多(您是否进行了正确的归一化?)
  3. 您正在估计13个随机参数,这对您的数据有很多要求。我将从一个随机参数开始,然后逐渐增加以查看模型何时失败。此外,如果使用的随机参数超过4-5,则不应使用Halton绘制,而需要某种类型的加扰过程。我会推荐加扰的Sobol抽奖,MLHS抽奖或加顿的Halton抽奖。
  4. 您仅使用R=40。这是一个非常低的数字。它将无法很好地近似多维积分,即混合对数概率。模型的复杂性,可用的替代方法等都需要越来越多的抽奖。许多人认为500-1000是好的,而其他人则倾向于使用5000或更高。我,我从1000开始,然后逐渐增加到参数稳定的位置。抽奖次数过少也可能导致您看到的错误。

如果不测试实际数据就无法诊断出原因,但是这些至少是一些让您入门的指针。