Як встановити та оцінити багаточленну модель Logit в R?


20

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

Потім я підходив до того, що, як я думав, створив би ту саму модель в R, використовуючи multinomфункцію в пакеті nnet .

Основний код:

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

Однак вони дають різні результати. З JMP AIC становить 2923,21, а з nnet::multinomAIC - 3116,588.

Тож перше моє запитання : чи одна з моделей помилкова?

Друга річ - JMP надає р-значення c-квадрата для кожної оцінки параметра, що мені потрібно. Підсумок на мультиномі fit1не робить - він лише дає оцінки, AIC та Deviance.

Моє друге питання таким чином: Чи є спосіб отримати р-значення для моделі та оцінки при використанні nnet::multinom?

Я знаю, що mlogit - це ще один пакет R для цього, і схоже, що його вихід включає р-значення; проте я не зміг запустити, mlogitвикористовуючи свої дані. Я думаю, що я мав правильні формати даних, але він сказав, що у мене неправильна формула. Я використовував ту саму формулу, що і я multinom, але, схоже, вона вимагає іншого формату за допомогою труби, і я не розумію, як це працює.

Спасибі.


2
Ви можете встановити аргумент Hess = TRUE, щоб повернути Гессіана з мультинома, а потім обчислити значення p вручну. Але я пропоную вам скористатися бібліотекою mlogit (мережа може мати проблеми конвергенції, коли коваріати не масштабуються правильно). Віньєтки для 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. Ви можете спробувати різні значення аргументу підсумків і побачити, чи це обумовлює відхилення. Ми не знаємо, що робить JMP! :)

Якщо розрахункові коефіцієнти та стандартні помилки однакові, то ви добрі. Якщо коефіцієнти не збігаються, не забувайте, що для розрахунку коефіцієнтів JMP може обрати інший базовий результат. multinom()наприклад, робить різний вибір mlogit(), наприклад.

Отримати p-значення з підсумкового () результату мультинома () досить просто. Я не можу відтворити ваші моделі, тому ось приклад зі сторінки довідки на мультиномі ():

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набору даних з мультином?
gregmacfarlane

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

@atiretoo Я шукав спосіб отримати свої pvals, тому дякую! але лише для уточнення - звідки походить 6 із df? як, що я повинен розраховувати, щоб отримати свій df? У моїй моделі є безперервна змінна та категоріальна змінна (4 категорії). Так би це було df 5? Крім того, риболовля - це цілий набір даних, правильно? Який розмір вибірки-ступінь свободи.
Керрі

@atiretoo Вибачте, я щойно встановив, що якщо використовувати пакет nnet для запуску регресії logit - він фактично обчислює ефективний df і він зберігається всередині об’єкта nnet. Отже, я можу витягти df з моделі та використовувати це. Я не перевіряв, чи буде об'єкт mlogit мати ту саму інформацію.
Керрі

@Kerry радий, що ти його знайшов.
atiretoo

1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.