0

我有一个宽格式数据,我正在打电话mlogit.data我尝试使用 mlogit 包实现一个混合 logit 模型,我有一个热编码的分类列(颜色,大小组)是导致以下错误吗?

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
4

1 回答 1

1

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

发生这种情况的原因有几个:

  1. 您的数据没有足够的变化来识别模型。您正在尝试估计一个非常复杂的数据,并且需要大量数据(变化和观察)。
  2. 模型过度指定(您是否进行了正确的标准化?)
  3. 您正在估计 13 个随机参数,这对您的数据提出了很多要求。我会从一个随机参数开始,然后逐渐增加以查看您的模型何时失败。同样具有超过 4-5 个随机参数,您不应该使用 Halton 抽签,但需要某种类型的加扰程序。我会推荐加扰的 Sobol 抽签、MLHS 抽签或加扰的 Halton 抽签。
  4. 你只是在使用R=40. 这是一个非常低的数字。它将对作为混合 logit 概率的多维积分给出较差的近似值。模型的复杂性、可用的替代方案等方面所需的绘制次数正在增加。许多人认为 500-1000 是好的,而其他人倾向于使用 5000 或更高。我,我从 1000 开始,然后逐渐增加到我的参数稳定的地方。平局太少也可能导致您看到的错误。

如果不对实际数据进行测试,就不可能诊断出原因,但这些至少是一些帮助您入门的指针。

于 2020-05-29T10:51:02.667 回答