Прогнозирование после запуска функции mlogit в R

11

Вот что я хочу сделать, но, похоже, нет predictспособа для mlogit. Любые идеи?

library(mlogit)
data("Fishing", package = "mlogit")
Fish <- mlogit.data(Fishing, varying = c(2:9), shape = "wide", choice = "mode")

Fish_fit<-Fish[-1,]
Fish_test<-Fish[1,]
m <- mlogit(mode ~price+ catch | income, data = Fish_fit)
predict(m,newdata=Fish_test)
Zach
источник
4
Вы читали сопровождающую виньетку, Оценка полиномиальных логит-моделей в R: Млогит-пакеты ? Мне кажется, вам просто нужно применить подогнанные коэффициенты к новым данным, не так ли?
Ч.л.
@chl, это то, что мне нужно сделать, да, но я надеялся, что мне не придется заново изобретать колесо.
Зак

Ответы:

2

Вот полезный трюк: добавьте данные, которые вы хотите предсказать, в исходную оценочную выборку, но используйте переменную weights, чтобы установить вес этих новых наблюдений равным нулю. Оцените модель (с учетом новых наблюдений, взвешенных до нуля), и получите прогнозы из вывода «вероятности». Таким образом, вы можете обойти функцию предсказания, которая является беспорядком.

Роберт Брей
источник
6

В пакете mlogit есть метод предиката (), по крайней мере в той версии, которую я использую (0.2-3 с R 2.15.3).

Код, созданный @Zach, содержит одну ошибку. Данные «длинного формата», используемые mlogit (), имеют по одной строке для каждой альтернативы; это формат, созданный функцией mlogit.data (). Поэтому, чтобы получить прогноз для первого случая, вам нужно вытащить все строки для этого случая, а их 4:

Fish_fit<-Fish[-(1:4),]
Fish_test<-Fish[1:4,]
m <- mlogit(mode ~price+ catch | income, data = Fish_fit)
predict(m,newdata=Fish_test)

что дает хороший результат.

atiretoo - восстановить монику
источник
4

После довольно больших усилий по использованию функции прогнозирования для населения я думаю, что смогу добавить несколько идей ко всем вашим ответам.

predictФункция mlogit работает нормально, вы просто должны внести некоторые коррективы и убедитесь , что следующие вещи заботятся:

  1. newdata(Как ожидалось) должны включать в себя одни и те же данные, что и образец , используемый для оценки модели. Это означает, что следует проверять наличие «скрытых» свойств данных (например, таких, factorкоторые наследуют несуществующие уровни - droplevelможет быть полезно в этом случае - или не введено в выборочные факторы, или неправильно colnameи т. Д.).

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

    MrChoice <-sample(c("Car", "Bus", "Walk"),nrow(datase),replace=TRUE, prob = c(0.5, 0.4, 0.1))
    mynewData$mode<-MrChoice
  3. Следующий необходимый шаг - снова преобразовать данные в данные Mlogit, используя ту же функцию, что и для данных примера, например:

    ExpData3<- mlogit.data(mynewData, shape="wide", choice = "mode",sep=".",id = "TripID")
  4. Последним шагом будет фактический прогноз с использованием predictфункции.

    resulted<-predict(ml1,newdata=ExpData3)
Манос С
источник
2

Чтобы ответить на мой собственный вопрос, я перешел к использованию пакета 'glmnet', чтобы соответствовать моим многочленным логитам, который имеет дополнительное преимущество использования лассо или эластичной сети для регуляризации моих независимых переменных. glmnet выглядит гораздо более «законченным», чем mlogit, в комплекте с функцией предсказания.

Zach
источник
1

mlogitимеет функцию прогнозирования, но мне было очень сложно использовать. Я написал свой собственный очень уродливый набор функций для реализации, которая у меня есть. Любой желающий может использовать или улучшить их, хранящиеся в моем профиле github .

gregmacfarlane
источник
0

Я уверен, что это легко сделать с помощью данного пакета mlogit, используя встроенную функцию, а затем стандартную функцию R-предсказания. Как указал chl, хотя я сам еще этого не сделал (по крайней мере, не предсказал), пример приведен в виньетках пакета здесь, на стр. 29.

сим
источник
1
Виньетка обманчиво проста; на практике я не мог понять, как применить к новым данным. Поэтому я написал свой собственный код, связанный ниже.
gregmacfarlane