In un modello logit, esiste un modo più intelligente per determinare l'effetto di una variabile ordinale indipendente piuttosto che utilizzare variabili fittizie per ogni livello?
In un modello logit, esiste un modo più intelligente per determinare l'effetto di una variabile ordinale indipendente piuttosto che utilizzare variabili fittizie per ogni livello?
Risposte:
Per aggiungere alla risposta di @ dmk38, "qualsiasi set di punteggi fornisce un test valido , a condizione che siano costruiti senza consultare i risultati dell'esperimento. Se il set di punteggi è scadente, in quanto distorce gravemente una scala numerica che è alla base del classifica ordinata, il test non sarà sensibile. I punteggi dovrebbero quindi incarnare le migliori informazioni disponibili sul modo in cui la classificazione è stata costruita e utilizzata. " (Cochran, 1954, citato da Agresti, 2002, pagg. 88-89). In altre parole, trattare un fattore ordinato come una variabile con punteggio numerico è semplicemente un problema di modellazione. Se ha senso, ciò influirà solo sul modo in cui interpreti il risultato e non esiste una regola empirica definitiva su come scegliere la migliore rappresentazione per una variabile ordinale.
Si consideri il seguente esempio sul consumo materno di alcol e la presenza o l'assenza di malformazione congenita (Agresti, Analisi dei dati categorici , Tabella 3.7 p.89):
0 <1 1-2 3-5 6+
Absent 17066 14464 788 126 37
Present 48 38 5 1 1
In questo caso particolare, possiamo modellare il risultato usando la regressione logistica o una semplice tabella di associazione. Facciamolo in R:
tab3.7 <- matrix(c(17066,48,14464,38,788,5,126,1,37,1), nr=2,
dimnames=list(c("Absent","Present"),
c("0","<1","1-2","3-5","6+")))
library(vcd)
assocstats(tab3.7)
Le statistiche usuali (12.08, p = 0.016751) o LR (6.20, p = 0.184562) (con 4 df) non tengono conto dei livelli ordinati nel consumo di alcol.
Considerando entrambe le variabili come ordinali con punteggi equidistanti (questo non ha alcun impatto per le variabili binarie, come la malformazione, e scegliamo la linea di base come 0 = assente), potremmo testare un'associazione lineare per lineare. Costruiamo prima una versione esplosa di questa tabella di contingenza:
library(reshape)
tab3.7.df <- untable(data.frame(malform=gl(2,1,10,labels=0:1),
alcohol=gl(5,2,10,labels=colnames(tab3.7))),
c(tab3.7))
# xtabs(~malform+alcohol, tab3.7.df) # check
Quindi possiamo testare un'associazione lineare usando
library(coin)
#lbl_test(as.table(tab3.7))
lbl_test(malform ~ alcohol, data=tab3.7.df)
che produce con . Si noti che questa statistica è semplicemente la correlazione tra le due serie di punteggi (che Agresti ha chiamato ), che è prontamente calcolato come
cor(sapply(tab3.7.df, as.numeric))[1,2]^2*(32574-1)
Come si può vedere, non ci sono molte prove di una chiara associazione tra le due variabili. Come fatto da Agresti, se scegliamo di ricodificare i livelli di alcol come {0,0.5,1.5,4,7}, che utilizza valori di fascia media per una scala continua ipotizzata con l'ultimo punteggio alquanto puramente arbitrario, concluderemmo a un effetto maggiore del consumo materno di alcol sullo sviluppo della malformazione congenita:
lbl_test(malform ~ alcohol, data=tab3.7.df,
scores=list(alcohol=c(0,0.5,1.5,4,7)))
fornisce una statistica di prova di 6,57 con un valore p associato di 0,01037.
Esistono schemi di codifica alternativi, compresi i midrank (nel qual caso, torniamo a Spearman invece di Pearson ) che viene discussa da Agresti, ma spero che tu catturi l'idea generale qui: è meglio selezionare punteggi che riflettano effettivamente una misura ragionevole della distanza tra le categorie adiacenti della variabile ordinale e una spaziatura uguale è spesso un buon compromesso (in assenza di giustificazione teorica).
Usando l'approccio GLM, procederemmo come segue. Ma prima controlla come viene codificato l'alcol in R:
class(tab3.7.df$alcohol)
È un semplice fattore non ordinato ( "factor"
), quindi un predittore nominale. Ora, qui ci sono tre modelli in cui consideriamo l'alcol come un predittore nominale, ordinale o continuo.
summary(mod1 <- glm(malform ~ alcohol, data=tab3.7.df,
family=binomial))
summary(mod2 <- glm(malform ~ ordered(alcohol), data=tab3.7.df,
family=binomial))
summary(mod3 <- glm(malform ~ as.numeric(alcohol), data=tab3.7.df,
family=binomial))
L'ultimo caso assume implicitamente una scala a intervalli uguali e il è interpretato come ha fatto @ dmk38: riflette l'effetto di un aumento di una unità di alcol sul risultato attraverso il collegamento logit, ovvero l'aumento della probabilità di osservare una malformazione (rispetto a nessuna malformazione, cioè il rapporto di probabilità) è . Il test Wald non è significativo al solito livello del 5%. In questo caso, la matrice di progettazione include solo 2 colonne: la prima è una colonna costante di 1 per l'intercetta, la seconda è il valore numerico (da 1 a 5) per il predittore, come in una semplice regressione lineare. In sintesi, questo modello verifica un effetto lineare di Alcohol sul risultato (sulla scala logit).
Tuttavia, negli altri due casi ( mod1
e mod2
), otteniamo un output diverso perché la matrice di progettazione utilizzata per modellare il predittore differisce, come può essere verificato usando:
model.matrix(mod1)
model.matrix(mod2)
Possiamo vedere che la matrice di progettazione associata per mod1
include variabili fittizie per i livelli di di alcol (0 è sempre la linea di base) dopo il termine di intercettazione nella prima colonna, mentre nel caso di abbiamo quattro colonne di effetti con codice di contrasto (dopo la colonna di 1 per l'intercettazione). Il coefficiente per la categoria "3-5" è stimato a 1,03736 sotto , ma a 0,01633 sotto . Si noti che l'AIC e altre misure basate sulla probabilità rimangono, tuttavia, identiche tra questi due modelli.mod2
mod1
mod2
Puoi provare ad assegnare nuovi punteggi ad Alcohol e vedere come influenzerà la probabilità prevista di una malformazione.
è perfettamente corretto utilizzare un predittore categorico in un modello di regressione logit (o OLS) se i livelli sono ordinali. Ma se hai una ragione per trattare ogni livello come discreto (o se in effetti la tua variabile categoriale è nominale piuttosto che ordinale), allora, in alternativa alla codifica fittizia, puoi anche usare la codifica a contrasto ortogonale. Per una discussione molto completa e accessibile, vedi Judd, CM, McClelland, GH & Ryan, CS Analisi dei dati: un approccio di confronto tra modelli, Edn. 2 °. (Routledge / Taylor e Francis, New York, NY; 2008) o semplicemente "codifica del contrasto" di Google