【问题标题】:How to solve mlogit Error in solve.default(H, g[!fixed]) : system is computationally singular: reciprocal condition number = 3.03549e-18?如何解决solve.default(H,g [!fixed])中的mlogit错误:系统在计算上是奇异的:倒数条件数= 3.03549e-18?
【发布时间】:2020-05-29 08:53:44
【问题描述】:

我有一个宽格式数据,我打电话给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

【问题讨论】:

标签: r mixed-models mlogit


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的解释。如何在 mlogit 模型中添加分类特征?我需要 One Hot 编码吗?
  • 我对@9​​87654322@ 包不太熟悉,但您可能可以将它们作为因子变量包含在模型公式中。我想说,最安全的方法是对它们进行虚拟编码,因为它可以让您完全控制省略哪个类别进行识别。
  • 例如只能估计J-1替代特定常数,或者如果你有一个分类变量你已经变成了哑元,你需要省略一个类别/哑元,或者换一种说法,将一个参数标准化/固定为零。如果你不这样做,你将拥有完美的多重共线性
猜你喜欢
  • 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
相关资源
最近更新 更多