En un modelo logit, ¿hay una forma más inteligente de determinar el efecto de una variable ordinal independiente que usar variables ficticias para cada nivel?
En un modelo logit, ¿hay una forma más inteligente de determinar el efecto de una variable ordinal independiente que usar variables ficticias para cada nivel?
Respuestas:
Para agregar a la respuesta de @ dmk38, "cualquier conjunto de puntajes da una prueba válida , siempre que se construyan sin consultar los resultados del experimento. Si el conjunto de puntajes es pobre, distorsiona gravemente una escala numérica que realmente subyace clasificación ordenada, la prueba no será sensible. Por lo tanto, los puntajes deben incorporar la mejor información disponible sobre la forma en que se construyó y usó la clasificación ". (Cochran, 1954, citado por Agresti, 2002, pp. 88-89). En otras palabras, tratar un factor ordenado como una variable numéricamente puntuada es simplemente un problema de modelado. Siempre que tenga sentido, esto solo afectará la forma en que interpreta el resultado, y no existe una regla general definitiva sobre cómo elegir la mejor representación para una variable ordinal.
Considere el siguiente ejemplo sobre el consumo materno de alcohol y la presencia o ausencia de malformación congénita (Agresti, Análisis de datos categóricos , Tabla 3.7 p.89):
0 <1 1-2 3-5 6+
Absent 17066 14464 788 126 37
Present 48 38 5 1 1
En este caso particular, podemos modelar el resultado usando regresión logística o tabla de asociación simple. Hagámoslo en 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)
Usual estadística χ 2 (12.08, p = 0.016751) o LR (6.20, p = 0.184562) (con 4 df) no tiene en cuenta los niveles ordenados en el consumo de alcohol.
Tratando ambas variables como ordinales con puntajes igualmente espaciados (esto no tiene impacto para las variables binarias, como la malformación, y elegimos la línea de base como 0 = ausente), podríamos probar una asociación lineal por lineal. Primero construyamos una versión explosionada de esta Tabla de contingencia:
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
Entonces podemos probar una asociación lineal usando
library(coin)
#lbl_test(as.table(tab3.7))
lbl_test(malform ~ alcohol, data=tab3.7.df)
que produce con p = 0.1764 . Tenga en cuenta que esta estadística es simplemente la correlación entre las dos series de puntajes (que Agresti llamó M 2 = ( n - 1 ) r 2 ), que se calcula fácilmente como
cor(sapply(tab3.7.df, as.numeric))[1,2]^2*(32574-1)
Como se puede ver, no hay mucha evidencia de una asociación clara entre las dos variables. Como lo hizo Agresti, si elegimos recodificar los niveles de alcohol como {0,0.5,1.5,4,7}, es decir, usar valores de rango medio para una escala continua hipotética con el último puntaje siendo algo puramente arbitrario, entonces concluiríamos a un efecto mayor del consumo materno de alcohol en el desarrollo de malformación congénita:
lbl_test(malform ~ alcohol, data=tab3.7.df,
scores=list(alcohol=c(0,0.5,1.5,4,7)))
produce una estadística de prueba de 6.57 con un valor p asociado de 0.01037.
) que Agresti analiza, pero espero que capten la idea general aquí: es mejor seleccionar puntajes que realmente reflejen un medidas razonables de la distancia entre categorías adyacentes de su variable ordinal, y el espaciado igual es a menudo un buen compromiso (en ausencia de justificación teórica).
Usando el enfoque GLM, procederíamos de la siguiente manera. Pero primero verifique cómo se codifica el alcohol en R:
class(tab3.7.df$alcohol)
Es un factor simple no ordenado ( "factor"
), por lo tanto, un predictor nominal. Ahora, aquí hay tres modelos donde consideramos al alcohol como un predictor nominal, ordinal 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))
. La prueba de Wald no es significativa al nivel habitual del 5%. En este caso, la matriz de diseño solo incluye 2 columnas: la primera es una columna constante de 1 para la intersección, la segunda es el valor numérico (1 a 5) para el predictor, como en una regresión lineal simple. En resumen, este modelo prueba un efecto lineal del alcohol en el resultado (en la escala logit).
Sin embargo, en los otros dos casos ( mod1
y mod2
), obtenemos resultados diferentes porque la matriz de diseño utilizada para modelar el predictor difiere, como se puede verificar usando:
model.matrix(mod1)
model.matrix(mod2)
mod1
mod2
mod1
mod2
Puede intentar asignar nuevas puntuaciones al alcohol y ver cómo afectará la probabilidad pronosticada de una malformación.
está perfectamente bien usar un predictor categórico en un modelo de regresión logit (u OLS) si los niveles son ordinales. Pero si tiene una razón para tratar cada nivel como discreto (o si de hecho su variable categórica es nominal en lugar de ordinal), entonces, como alternativa a la codificación ficticia, también puede usar la codificación de contraste ortogonal. Para una discusión muy completa y accesible, vea Judd, CM, McClelland, GH y Ryan, Análisis de datos CS: un enfoque de comparación de modelos, Edn. 2do. (Routledge / Taylor and Francis, Nueva York, NY; 2008), o simplemente "codificación de contraste" de Google