我有一个宽格式的数据,我正在调用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
答案 0 :(得分:0)
该错误表示Hessian矩阵是奇异的,即行列式为零,并且不存在逆函数。实际上,您无法获得方差-协方差矩阵。
发生这种情况的原因有很多:
R=40
。这是一个非常低的数字。它将无法很好地近似多维积分,即混合对数概率。模型的复杂性,可用的替代方法等都需要越来越多的抽奖。许多人认为500-1000是好的,而其他人则倾向于使用5000或更高。我,我从1000开始,然后逐渐增加到参数稳定的位置。抽奖次数过少也可能导致您看到的错误。 如果不测试实际数据就无法诊断出原因,但是这些至少是一些让您入门的指针。