Проблема сингулярности с последовательной оценкой модели вложенного логита - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь оценить вложенную модель логита как последовательность 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...