Come impostare e stimare un modello logit multinomiale in R?


20

Ho eseguito un modello logit multinomiale in JMP e ho ottenuto risultati che includevano l'AIC e valori p chi-quadrati per ogni stima dei parametri. Il modello ha un esito categorico e 7 varianti esplicative categoriche.

Quindi adatterò ciò che pensavo avrebbe creato lo stesso modello in R, usando la multinomfunzione nel pacchetto nnet .

Il codice era sostanzialmente:

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

Tuttavia, i due danno risultati diversi. Con JMP l'AIC è 2923.21 e con nnet::multinomAIC è 3116.588.

Quindi la mia prima domanda è: uno dei modelli è sbagliato?

La seconda cosa è che JMP fornisce valori p al quadrato per ogni stima di parametro, di cui ho bisogno. L'esecuzione del riepilogo sul multinom fit1non lo fa: fornisce solo le stime, AIC e Devianza.

La mia seconda domanda è quindi: c'è un modo per ottenere i valori p per il modello e le stime quando si usa nnet::multinom?

So che mlogit è un altro pacchetto R per questo e sembra che il suo output includa i valori p; tuttavia, non sono stato in grado di eseguire mlogitutilizzando i miei dati. Penso di avere i dati formattati correttamente, ma ha detto che avevo una formula non valida. Ho usato la stessa formula che ho usato per multinom, ma sembra che richieda un formato diverso usando una pipe e non capisco come funzioni.

Grazie.


2
È possibile impostare l'argomento Hess = TRUE per recuperare l'Assia da Multinom e quindi calcolare manualmente i valori p. Ma ti suggerisco di usare la libreria mlogit (la nnet può avere problemi di convergenza quando le covariate non sono ridimensionate correttamente). Le vignette per mlogit sono piuttosto buone e dovrebbero aiutarti a configurare correttamente i tuoi dati. Le vignette si trovano nel solito posto: cran.r-project.org/web/packages/mlogit
Jason Morgan,

Risposte:


9

Sono sicuro che hai già trovato le tue soluzioni poiché questo post è molto vecchio, ma per quelli di noi che sono ancora alla ricerca di soluzioni - ho trovato http://youtu.be/-Cp_KP9mq94 è un'ottima fonte di istruzioni su come eseguire un modello di regressione logistica multinomiale in R usando il pacchetto mlogit. Se vai sul sito web dell'accademia di econonometria, ha tutti gli script, i dati per R, SAS e STATA, penso o SPSS uno di quelli.

Che tipo di spiega come / perché e cosa fare per trasformare i tuoi dati nel formato del "lungo" formato contro "largo". Molto probabilmente hai un formato ampio, che richiede trasformazione.

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


3

In generale, le differenze nei valori AIC tra due diversi software non sono del tutto sorprendenti. Il calcolo delle probabilità comporta spesso una costante identica tra diversi modelli degli stessi dati. Diversi sviluppatori possono fare diverse scelte su cosa lasciare dentro o fuori da quella costante. Quando dovresti preoccuparti è quando le differenze nei valori AIC tra due modelli differiscono. In realtà ho appena notato un argomento che multinom()ti consente di cambiare il modo in cui vengono compresse le righe con valori X identici e che ciò influisce sulla linea di base della devianza, e quindi sull'AIC. Potresti provare diversi valori dell'argomento summ e vedere se ciò fa concordare le deviazioni. Non sappiamo cosa sta facendo JMP! :)

Se i coefficienti stimati e gli errori standard sono gli stessi, allora sei a posto. Se i coefficienti non sono gli stessi, non dimenticare che JMP potrebbe scegliere un risultato di base diverso per il calcolo dei coefficienti. multinom()fa scelte diverse mlogit(), ad esempio.

Ottenere valori p dal risultato di sintesi () di multinom () è abbastanza semplice. Non riesco a riprodurre i tuoi modelli, quindi ecco l'esempio dalla pagina di aiuto su 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)

Sono d'accordo che capire il pacchetto mlogit è un po 'una sfida! Leggi le vignette, attentamente. Aiutano.


Come utilizzerei le altre variabili (generiche) dal Fishingset di dati con multinom?
gregmacfarlane,

@gmacfarlane Basta aggiungere le variabili che vuoi alla formula in multinom (mode ~ income + price.beach, ...
atiretoo

@atiretoo Stavo cercando un modo per ottenere i miei pvals quindi grazie! ma solo per chiarimenti: da dove viene il 6 con il df? come cosa dovrei contare per ottenere il mio df? Ho una variabile continua e una variabile categoriale (4 categorie) nel mio modello. Quindi sarebbe un df di 5? Inoltre, la pesca è l'intero set di dati giusto? Qual è la dimensione del campione, il grado di libertà.
Kerry,

@atiretoo Chiedo scusa, ho appena scoperto che se si utilizza il pacchetto nnet per eseguire la regressione del logit, in realtà calcola il df effettivo e viene archiviato nell'oggetto nnet. Quindi, posso estrarre il df dal modello e usarlo. Non ho verificato se l'oggetto mlogit avrà le stesse informazioni.
Kerry,

@Kerry felice di averlo trovato.
atiretoo,

1

Puoi anche provare a eseguire un log multinomiale usando il pacchetto glmnet. Non sono sicuro di come forzarlo per mantenere tutte le variabili, ma sono sicuro che sia possibile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.