Как настроить и оценить полиномиальную модель логита в R?


20

Я запустил полиномиальную модель логита в JMP и получил результаты, которые включали AIC, а также х-квадратные p-значения для каждой оценки параметра. Модель имеет один категорический результат и 7 категориальных объяснительных переменных.

Затем я соответствую тому, что, как я думал, построю ту же модель в R, используя multinomфункцию из пакета nnet .

Код был в основном:

fit1 <- multinom(y ~ x1+x2+...xn,data=mydata);
summary(fit1);

Тем не менее, эти два дают разные результаты. С JMP AIC составляет 2923,21, а с nnet::multinomAIC - 3116,588.

Итак, мой первый вопрос : одна из моделей не так?

Во-вторых, JMP выдает значения хи-квадрат для каждой оценки параметра, которая мне нужна. Беглого резюме по мультиному fit1нет - он просто дает оценки AIC и Deviance.

Мой второй вопрос , таким образом: есть ли способ получить p-значения для модели и оценки при использовании nnet::multinom?

Я знаю, что mlogit - это еще один пакет R для этого, и похоже, что его вывод включает в себя p-значения; Однако я не смог запустить mlogitс использованием моих данных. Я думаю, что я правильно отформатировал данные, но там говорилось, что у меня неверная формула. Я использовал ту же формулу, что и для меня multinom, но, похоже, для нее требуется другой формат с использованием канала, и я не понимаю, как это работает.

Благодарю.


2
Вы можете установить аргумент Hess = TRUE, чтобы вернуть гессиан от мултинома, а затем вычислить p-значения вручную. Но я предлагаю вам использовать библиотеку mlogit (у nnet могут возникнуть проблемы сходимости, если ковариаты неправильно масштабируются). Виньетки для mlogit довольно хороши и должны помочь вам правильно настроить данные. Виньетки можно найти в обычном месте: cran.r-project.org/web/packages/mlogit
Джейсон Морган,

Ответы:


9

Я уверен, что вы уже нашли свои решения, поскольку этот пост очень старый, но для тех из нас, кто все еще ищет решения, я обнаружил, что http://youtu.be/-Cp_KP9mq94 - отличный источник инструкций о том, как запустить модель многочленной логистической регрессии в R, используя пакет mlogit. Если вы зайдете на сайт Академии эконометрики, у нее есть все сценарии, данные для R и SAS и STATA, я думаю, или SPSS, один из них.

Какой вид объясняет, как / почему и что делать с преобразованием ваших данных в формат «длинный» или «широкий». Скорее всего у вас широкий формат, который требует трансформации.

https://sites.google.com/site/econometricsacademy/econometrics-models/multinomial-probit-and-logit-models


3

В целом, различия в значениях AIC между двумя различными частями программного обеспечения не являются полностью удивительными. Расчет вероятностей часто включает в себя постоянную, которая одинакова для разных моделей одних и тех же данных. Разные разработчики могут по-разному выбирать, что оставить в этой константе или нет. Когда вам следует беспокоиться, это когда различия в значениях AIC между двумя моделями различаются. На самом деле я только что заметил аргумент, multinom()позволяющий вам изменить способ сворачивания строк с одинаковыми значениями X, и это влияет на базовую линию отклонения и, следовательно, на AIC. Вы можете попробовать разные значения аргумента summ и посмотреть, согласны ли эти отклонения. Мы не знаем, что делает JMP! :)

Если оценочные коэффициенты и стандартные ошибки одинаковы, то все хорошо. Если коэффициенты не одинаковы, не забывайте, что JMP может выбрать другой исходный исход для расчета коэффициентов. multinom()например, делает разные выборы mlogit().

Получить p-значения из итогового () результата multinom () довольно легко. Я не могу воспроизвести ваши модели, поэтому вот пример со страницы справки на multinom ():

library("nnet")
data("Fishing", package = "mlogit")
fishing.mu <- multinom(mode ~ income, data = Fishing)
sum.fishing <- summary(fishing.mu) # gives a table of outcomes by covariates for coef and SE
str(sum.fishing)
# now get the p values by first getting the t values
pt(abs(sum.fishing$coefficients / sum.fishing$standard.errors),
  df=nrow(Fishing)-6,lower=FALSE)

Я согласен, что выяснить пакет mlogit - это сложная задача! Читайте виньетки, внимательно. Они помогают.


Как бы я использовал другие (универсальные) переменные из Fishingнабора данных с multinom?
gregmacfarlane

@gmacfarlane Просто добавьте нужные переменные в формулу в мултином (режим ~ доход + цена.beach, ...
atiretoo

@atiretoo Я искал способ получить своих приятелей, так что спасибо! но только для пояснения - откуда взялись 6 с df? как то, что я должен рассчитывать, чтобы получить мой df? У меня есть непрерывная переменная и категориальная переменная (4 категории) в моей модели. Так будет ли это df 5? Кроме того, рыбалка весь набор данных правильно? Какой размер выборки - степень свободы.
Керри

@atiretoo Я прошу прощения, я только что обнаружил, что если использовать пакет nnet для запуска регрессии logit - он фактически вычисляет эффективную df и хранится в объекте nnet. Итак, я могу извлечь df из модели и использовать его. Я не проверял, будет ли объект mlogit иметь такую ​​же информацию.
Керри

@ Керри, рад, что ты нашел это.
atiretoo

1

Вы также можете попробовать запустить многочленный логит с помощью пакета glmnet. Я не уверен, как заставить все переменные, но я уверен, что это возможно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.