Come posso eseguire l'analisi della regressione logistica ordinale in R con valori numerici / categorici?


17

Dati di base : ho ~ 1.000 persone contrassegnate con valutazioni: '1,' [buono] '2,' [medio] o '3' [cattivo] - questi sono i valori che cercherò di prevedere per le persone in futuro . Inoltre, ho alcune informazioni demografiche: sesso (categorico: M / F), età (numerico: 17-80) e razza (categorico: nero / caucasico / latino).

Ho principalmente quattro domande:

  1. Inizialmente stavo cercando di eseguire il set di dati descritto sopra come analisi di regressione multipla. Ma di recente ho imparato che, poiché la mia dipendenza è un fattore ordinato e non una variabile continua, dovrei usare la regressione logistica ordinale per qualcosa del genere. Inizialmente stavo usando qualcosa del genere mod <- lm(assessment ~ age + gender + race, data = dataset), qualcuno può indicarmi la giusta direzione?

  2. Da lì, supponendo che ottenga coefficienti con cui mi sento a mio agio, capisco come collegare solo valori numerici per x1, x2, ecc. - Ma come dovrei affrontare la razza, ad esempio, dove ci sono più risposte: nero / caucasico / latino? Quindi, se mi dice che il coefficiente caucasico è 0,289 e qualcuno che sto cercando di prevedere è caucasico, come posso ricollegarlo poiché il valore non è numerico?

  3. Ho anche dei valori casuali mancanti: alcuni per razza, altri per genere, ecc. Devo fare qualcosa in più per assicurarmi che non stia distorcendo nulla? (Ho notato quando il mio set di dati viene caricato in R-Studio, quando i dati mancanti vengono caricati come NA, R dice qualcosa di simile (162 observations deleted due to missingness)- ma se vengono caricati come spazi vuoti, non fa nulla.)

  4. Supponendo che tutto ciò funzioni e che ho nuovi dati con sesso, età e razza su cui voglio prevedere - c'è un modo più semplice in R di eseguire tutto ciò attraverso qualunque sia la mia formula con nuovi coefficienti, piuttosto che farlo manualmente? (Se questa domanda non è appropriata qui, posso riportarla al forum R.)

Risposte:


16

Ecco alcune informazioni che potrebbero indirizzarti nella giusta direzione.

Per quanto riguarda i tuoi dati, quello che hai è una risposta con più categorie e ogni volta che stai cercando di modellare una risposta che è categorica, hai ragione a provare e usare un tipo di modello lineare generalizzato (GLM). Nel tuo caso hai ulteriori informazioni che devi prendere in considerazione per quanto riguarda la tua risposta e cioè che i tuoi livelli di risposta hanno un ordinamento naturale buono> medio> cattivo, nota come questo sia diverso dal provare a modellare una risposta come il palloncino di colore che qualcuno è probabile che acquisti (rosso / blu / verde), questi valori non hanno un ordinamento naturale. Quando si esegue questo tipo di modello con una risposta ordinata, è possibile prendere in considerazione l'utilizzo di un modello di probabilità proporzionale.

http://en.wikipedia.org/wiki/Ordered_logit

Non l'ho usato da solo, ma polr()è probabile che la funzione nel pacchetto MASS sia di qualche utilità, in alternativa ho usato la lrm()funzione nel pacchetto rms per fare analoghi tipi di analisi e l'ho trovata abbastanza utile. Se carichi questi pacchetti basta usare ?polro ?lrmper le informazioni sulla funzione.

Va bene lo sfondo, alle tue domande:

  1. Questo dovrebbe essere coperto sopra, controlla questi pacchetti / funzioni e leggi sulla regressione logistica ordinale e sui modelli di quote proporzionali

  2. Ogni volta che hai una covariata che è categorica (razza / sesso / colore dei capelli) vuoi trattarli come "fattori" nella tua codifica R per modellarli in modo appropriato. È importante sapere che cos'è un fattore e come vengono trattati, ma essenzialmente trattate ciascuna categoria come un livello separato e quindi modellatele in modo appropriato. Leggi i fattori nei modelli e dovresti essere in grado di stuzzicare ciò che sta succedendo. Tieni presente che il trattamento delle variabili categoriali come fattori non è univoco per i modelli glm o i modelli di quote proporzionali, ma è in genere il modo in cui tutti i modelli gestiscono le variabili categoriali. http://www.stat.berkeley.edu/classes/s133/factors.html

  3. I valori mancanti a volte possono essere una seccatura da affrontare, ma se stai facendo un'analisi abbastanza semplice è probabilmente sicuro rimuovere solo le righe di dati che contengono valori mancanti (questo non è sempre vero, ma in base al tuo attuale livello di esperienza sono supponendo che non sia necessario preoccuparsi delle specifiche di quando e come gestire i valori mancanti). In realtà questo è praticamente ciò che fa R. Se si dispone di dati che si stanno utilizzando per modellare, se mancano informazioni in una riga per la risposta o qualsiasi covariata nel modello R si escluderanno questi dati (questo è l'avvertimento che si vede). Ovviamente se si esclude gran parte dei dati a causa della mancanza, i risultati potrebbero essere distorti ed è probabilmente utile cercare di ottenere qualche informazione in più sul perché ci sono così tanti valori mancanti, ma se si ' mi mancano 162 osservazioni in 10.000 file di dati che non vorrei sudare troppo. Puoi cercare su Google metodi per gestire i dati mancanti se sei interessato ad alcuni dettagli più specifici.

  4. Quasi tutti gli oggetti del modello R ( lm, glm, lrm, ...) avranno un associato predict()funzione che vi permetterà di calcolare i valori previsti per il set di dati di modellazione corrente e inoltre per un altro set di dati che si desidera prevedere un risultato per. Basta cercare ?predict.glmo ?predict.lmprovare a ottenere ulteriori informazioni per qualsiasi tipo di modello con cui si desidera lavorare. Questa è una cosa molto tipica che le persone desiderano fare con i modelli, quindi state certi che ci sono alcune funzioni e metodi integrati che dovrebbero rendere questo processo relativamente semplice.

Buona fortuna!


2
  1. Sì, logit o probit ordinati sarebbero da dove iniziare. Ecco un tutorial sul logit ordinato che utilizza R. Altre domande sul CV possono probabilmente aiutarti con tutti gli ostacoli in cui ti imbatti: prova i tag 'logit', 'probit' e 'ordinal'.

  2. Un approccio standard per gestire una variabile categoriale indipendente con K valori è codice fittizio come K-1valori binari. Questo è spiegato in modo più completo qui , ma in breve: l'effetto di una categoria viene sommato nell'intercetta e i coefficienti vengono adattati alle restanti categorie. Nel tuo esempio, ci sarebbe una variabile fittizia caucasianche sarebbe codificata su 1 per un intervistato caucasico, 0 altrimenti.

  3. Gestire i dati mancanti dipende molto dal problema in questione e, sì, il modo in cui gestisci i dati mancanti può introdurre distorsioni. Questo estratto del libro descrive bene quattro meccanismi in grado di produrre dati mancanti, che dovrebbero aiutarti a considerare potenziali errori nel tuo problema. (In particolare, sezione 25.1, p. 530.)

  4. Molti pacchetti di modellazione hanno una predictfunzione di qualche tipo, e in effetti il ​​primo tutorial collegato sopra include una dimostrazione.


Grazie mille! Rapido follow-up su 2: questa era la mia ipotesi di base - ma qual è il codice ci sono più di due variabili? Ad esempio, caucasico, nero, latino.
Ryan,

Molto benvenuto! In quell'esempio, sceglieresti una categoria da includere nell'intercettazione, diciamo latino, e i manichini per le altre due. Un valore 1 per il caucasianmanichino indica un rispondente caucasico, simile per la blackvariabile fittizia. Un valore 0 per entrambi indica un rispondente latino. Ha senso?
Sean Easter,

Quindi dovrei semplicemente cambiare il set di dati da una colonna con risposte multiple ('nero,' 'caucasico' 'e' latino ') a una colonna' nera 'con 1s e 0s, una colonna' caucasica 'con 1s e 0s e una colonna "latino" con 1 e 0?
Ryan,

Questo è un approccio che funzionerà bene. L'unica differenza dall'uso di due colonne è il modo in cui interpreti l'intercettazione. Puoi farlo manualmente, ma credo che i fattori in R possano gestirlo per te. Prova questo: analizza i fattori con un esempio simile. Saluti!
Sean Easter

1
Il collegamento al tutorial è interrotto. Se qualcuno può risolverlo, sarebbe fantastico!
Dan Hicks,
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.