Вот что я хочу сделать, но, похоже, нет 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)
r
logistic
logit
multinomial
Zach
источник
источник
Ответы:
Вот полезный трюк: добавьте данные, которые вы хотите предсказать, в исходную оценочную выборку, но используйте переменную weights, чтобы установить вес этих новых наблюдений равным нулю. Оцените модель (с учетом новых наблюдений, взвешенных до нуля), и получите прогнозы из вывода «вероятности». Таким образом, вы можете обойти функцию предсказания, которая является беспорядком.
источник
В пакете mlogit есть метод предиката (), по крайней мере в той версии, которую я использую (0.2-3 с R 2.15.3).
Код, созданный @Zach, содержит одну ошибку. Данные «длинного формата», используемые mlogit (), имеют по одной строке для каждой альтернативы; это формат, созданный функцией mlogit.data (). Поэтому, чтобы получить прогноз для первого случая, вам нужно вытащить все строки для этого случая, а их 4:
что дает хороший результат.
источник
После довольно больших усилий по использованию функции прогнозирования для населения я думаю, что смогу добавить несколько идей ко всем вашим ответам.
predict
Функция mlogit работает нормально, вы просто должны внести некоторые коррективы и убедитесь , что следующие вещи заботятся:newdata
(Как ожидалось) должны включать в себя одни и те же данные, что и образец , используемый для оценки модели. Это означает, что следует проверять наличие «скрытых» свойств данных (например, таких,factor
которые наследуют несуществующие уровни -droplevel
может быть полезно в этом случае - или не введено в выборочные факторы, или неправильноcolname
и т. Д.).Вы должны сделать произвольный выбор в ваших новых данных (если они не существуют), что можно легко сделать с помощью
sample
функции:Следующий необходимый шаг - снова преобразовать данные в данные Mlogit, используя ту же функцию, что и для данных примера, например:
Последним шагом будет фактический прогноз с использованием
predict
функции.источник
Чтобы ответить на мой собственный вопрос, я перешел к использованию пакета 'glmnet', чтобы соответствовать моим многочленным логитам, который имеет дополнительное преимущество использования лассо или эластичной сети для регуляризации моих независимых переменных. glmnet выглядит гораздо более «законченным», чем mlogit, в комплекте с функцией предсказания.
источник
mlogit
имеет функцию прогнозирования, но мне было очень сложно использовать. Я написал свой собственный очень уродливый набор функций для реализации, которая у меня есть. Любой желающий может использовать или улучшить их, хранящиеся в моем профиле github .источник
Я уверен, что это легко сделать с помощью данного пакета mlogit, используя встроенную функцию, а затем стандартную функцию R-предсказания. Как указал chl, хотя я сам еще этого не сделал (по крайней мере, не предсказал), пример приведен в виньетках пакета здесь, на стр. 29.
источник