Я пытаюсь оценить вложенную модель логита как последовательность MNL для целей обучения. В какой-то момент этой процедуры (см. Ben Akiva & Lerman, 1986, Ch. 10, 10.4) совместно оцениваются MNL, представляющие гнезда. MNL (то есть «гнезда») представлены соответствующими наборами выбора.
Однако при оценке модели я сталкиваюсь с сообщением об ошибке из-за сингулярности.
Я попробовал код ниже.
library(mlogit)
data("Fishing", package = "mlogit")
# nest1: beach & pier -> model 1
# nest2: boat & charter -> model 2
# joint estimation of model 1 and 2
# Ben Akiva & Lerman (1986), Chp. 10 (.4)
# availabilities according to models
Fishing$avail.beach <- 0
Fishing$avail.pier <- 0
Fishing$avail.boat <- 0
Fishing$avail.charter <- 0
Fishing$avail.charter[Fishing$mode == "charter" | Fishing$mode == "boat"] <- 1
Fishing$avail.boat[Fishing$mode == "charter" | Fishing$mode == "boat"] <- 1
Fishing$avail.pier[Fishing$mode == "pier" | Fishing$mode == "beach"] <- 1
Fishing$avail.beach[Fishing$mode == "pier" | Fishing$mode == "beach"] <- 1
names(Fishing)
Fish <- mlogit.data(Fishing, shape="wide", varying=c(2:9, 11:14), choice="mode")
fish.joint <- subset(Fish, avail ==1) # eliminate rows of non-available alts
head(model.matrix(mFormula(mode ~ price), fish.joint), n=4)
fish.1 <- mlogit(mode ~ price, fish.joint)
Мне модель.matrix выглядит идентифицируемой
> head(model.matrix(mFormula(mode ~ price), fish.joint), n=4)
boat:(intercept) charter:(intercept) pier:(intercept) price
1.boat 1 0 0 157.930
1.charter 0 1 0 182.930
2.boat 1 0 0 10.534
2.charter 0 1 0 34.534
Тем не менее,
> fish.1 <- mlogit(mode ~ price, fish.joint)
Error in solve.default(H, g[!fixed]) :
Lapack routine dgesv: system is exactly singular: U[2,2] = 0