Использование mlogit в R с переменными, которые применяются только к определенным альтернативам

Я пытаюсь использовать mlogit в R для выбора режима транспортировки. Проблема в том, что у меня есть переменная, которая применяется только к определенным альтернативам.

Чтобы быть более конкретным, я пытаюсь предсказать вероятность использования автомобильного, транзитного и немоторизованного видов транспорта. Мои предикторы: расстояние, время ожидания в пути, количество транспортных средств в семье и время в пути.

Он работает, когда я форматирую его следующим образом:

> amres<-mlogit(mode~ivt+board|distance+nveh,data=AMLOGIT)

Однако результаты, которые я получаю для времени в пути (ivt), не имеют смысла:

    > summary(amres)

Call:
mlogit(formula = mode ~ ivt + board | distance + nveh, data = AMLOGIT, 
    method = "nr", print.level = 0)

Frequencies of alternatives:
    auto   tansit nonmotor 
 0.24654  0.28378  0.46968 

nr method
5 iterations, 0h:0m:2s 
g'(-H)^-1g = 6.34E-08 
gradient close to zero 

Coefficients :
                        Estimate  Std. Error  t-value  Pr(>|t|)    
tansit:(intercept)    7.8392e-01  8.3761e-02   9.3590 < 2.2e-16 ***
nonmotor:(intercept)  3.2853e+00  7.1492e-02  45.9532 < 2.2e-16 ***
ivt                   1.6435e-03  1.2673e-04  12.9691 < 2.2e-16 ***
board                -3.9996e-04  1.2436e-04  -3.2161  0.001299 ** 
tansit:distance       3.2618e-04  2.0217e-05  16.1336 < 2.2e-16 ***
nonmotor:distance    -2.9457e-04  3.3772e-05  -8.7224 < 2.2e-16 ***
tansit:nveh          -1.5791e+00  4.5932e-02 -34.3799 < 2.2e-16 ***
nonmotor:nveh        -1.8008e+00  4.8577e-02 -37.0720 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Log-Likelihood: -10107
McFadden R^2:  0.30354 
Likelihood ratio test : chisq = 8810.1 (p.value = < 2.22e-16)

Как видите, статистика выглядит отлично, но коэффициент ivt должен быть отрицательным, а не положительным. Я думаю, что на это влияет немоторизованная часть, которая равна 0. Я считаю, что мне нужно использовать третью часть уравнения, как показано ниже:

> amres<-mlogit(mode~board|distance+nveh|ivt,data=AMLOGIT)

Однако это приводит к:

Error in solve.default(H, g[!fixed]) : 
  Lapack routine dgesv: system is exactly singular: U[10,10] = 0

Я полагаю, что это опять же потому, что все переменные равны 0 для немоторизованных, но я не знаю, как это исправить. Как включить конкретную альтернативную переменную, если она не применяется ко всем альтернативам?


person user3092719    schedule 11.12.2013    source источник


Ответы (2)


Я не очень хорошо разбираюсь в различных реализациях логит-моделей, но я полагаю, что это связано с тем, чтобы убедиться, что у вас есть различия между людьми, и альтернативы матрице могут быть правильно определены с различиями между альтернативами и выбирающими. Что вы получаете, говоря

amres<-mlogit(mode~distance| nveh | ivt+board,data=AMLOGIT)

mlogit имеет групповое разделение между трубами, как я понимаю, следующим образом: первая часть - это ваша базовая формула, вторая часть - это переменные, которые не меняются между альтернативами (т.е. зависят только от человека, пола, дохода - я думаю, nveh должно быть здесь), а третья часть зависит от альтернативы.

Между прочим, у Кена Трейна есть набор виньеток, специально посвященных mlogit, которые могут оказаться полезными. Витон упоминает перегородку с трубами.

Виньетки Кена Трейна

Виньетки Филипа Витона

Виньетки Ива Круассана

person ako    schedule 11.12.2013
comment
Спасибо за ресурсы. Я считаю, что смог решить свою проблему, но сначала я рассмотрю вашу ситуацию. Расстояние должно быть во второй части, потому что, хотя это не похоже на особенность турмейкера, оно зависит от того, где находится пункт отправления и пункт назначения желаемой поездки. Предполагается, что это фиксированное значение, поэтому оно зависит от туроператора. Хотя ivt и board должны работать в третьей части, я не могу заставить их работать. Возможно что то связано с особенностями моих данных. - person user3092719; 13.12.2013
comment
Вместо этого я объединил время всех режимов, чтобы получить общее время в пути. Затем я разделяю немоторизованные виды транспорта на цикл и ходьбу и оцениваю время в пути для них в зависимости от расстояния. Затем у меня было общее время поездки в качестве согласованной меры для всех трех режимов, которые я мог использовать в части 1. Результаты имеют смысл и должны работать для приложения, для которого они мне нужны. Я также убрал расстояние, так как теперь оно связано со временем в пути. Еще раз спасибо за помощь и дайте мне знать, если вам нужны какие-либо разъяснения или если вы видите какие-либо проблемы в моих рассуждениях. - person user3092719; 13.12.2013
comment
Для тех, кто ищет обновления ссылок, я нашел сценка Кена Трейна и Филипп Виньетка Витона, которую, как я полагаю, имел в виду @ako. - person 4redwood; 20.07.2020

Похоже, у вас идеальное разделение. Вы проверили это, например. глядя на crosstables переменных? (Невозможно подобрать модель, если одна комбинация предикторов позволяет сделать идеальный прогноз...) В этом отношении было бы полезно узнать размер набора данных - возможно, вы слишком подходите для количества данных, которые у вас есть. Это общая проблема моделирования, не относящаяся к mlogit.

Вы говорите, что «статистика выглядит великолепно», но значения для Pr(>|t|)s и Likelihood ratio test выглядят неправдоподобно значительными, что согласуется с этой проблемой. Это означает, что оценки коэффициентов, вероятно, будут неточными. (Подобны ли они коэффициентам, полученным при одномерном моделировании?). Возможно, более простая модель была бы более подходящей.

Изменить @user3092719 :

Вы аппроксимируете обобщенную линейную модель, которую можно легко переобучить (поскольку переменная результата является дискретной или номинальной, т. е. . значений). mlogit является расширением логистической регрессии; вот простой пример последнего для иллюстрации:

> df1 <- data.frame(x=c(0, rep(1, 3)),
                    y=rep(c(0, 1), 2))
> xtabs( ~ x + y, data=df1)
   y
x   0 1
  0 1 0
  1 1 2

Обратите внимание на ноль в правом верхнем углу. Это показывает «идеальное разделение», что означает, что если x=0 вы знаете наверняка, что y=0 основано на этом наборе. Таким образом, вероятностная прогностическая модель не имеет особого смысла. Некоторый вывод из

> summary(glm(y ~ x, data=df1, binomial(link = "logit")))

дает

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)   -18.57    6522.64  -0.003    0.998
x              19.26    6522.64   0.003    0.998

Здесь размер Std. Errors подозрительно велик по сравнению со значением коэффициентов. Вас также должен насторожить Number of Fisher Scoring iterations: 17 — большой номер. итерации, необходимые для подгонки, предполагают числовую нестабильность.

Ваше решение, по-видимому, включает в себя обеспечение того, чтобы эта проблема полного разделения не возникала в вашей модели, хотя трудно быть уверенным, не имея минимального рабочего примера.

person dardisco    schedule 11.12.2013
comment
Я понимаю идею переоснащения модели в целом, однако я не понимаю, как линейная модель может быть переоснащена. Нелинейная модель может слишком точно соответствовать набору точек, так что ее нельзя будет обобщить. Однако, когда вы подгоняете линейную модель, я не понимаю, как это может произойти. Буду очень признателен за любые разъяснения или ресурсы для понимания этого. - person user3092719; 13.12.2013