Respuestas:
Un enfoque estándar es la prueba de Wald . Esto es lo que hace el comando Stata test
después de una regresión logit o probit. Veamos cómo funciona esto en R mirando un ejemplo:
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv") # Load dataset from the web
mydata$rank <- factor(mydata$rank)
mylogit <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial") # calculate the logistic regression
summary(mylogit)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.989979 1.139951 -3.500 0.000465 ***
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
rank2 -0.675443 0.316490 -2.134 0.032829 *
rank3 -1.340204 0.345306 -3.881 0.000104 ***
rank4 -1.551464 0.417832 -3.713 0.000205 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Digamos que quieres probar la hipótesis vs. β g r e ≠ β g p a . Esto es equivalente a probar β g r e - β g p a = 0 . La estadística de prueba de Wald es:
o
Nuestra θ aquí es β g r e - β g p un y θ 0 = 0 . Entonces, todo lo que necesitamos es el error estándar de β g r e - β g p a . Podemos calcular el error estándar con el método Delta :
Entonces también necesitamos la covarianza de y β g p a . La matriz de varianza-covarianza se puede extraer con elvcov
comando después de ejecutar la regresión logística:
var.mat <- vcov(mylogit)[c("gre", "gpa"),c("gre", "gpa")]
colnames(var.mat) <- rownames(var.mat) <- c("gre", "gpa")
gre gpa
gre 1.196831e-06 -0.0001241775
gpa -1.241775e-04 0.1101040465
Finalmente, podemos calcular el error estándar:
se <- sqrt(1.196831e-06 + 0.1101040465 -2*-0.0001241775)
se
[1] 0.3321951
Entonces su valor Wald es
wald.z <- (gre-gpa)/se
wald.z
[1] -2.413564
Para obtener un valor , simplemente use la distribución normal estándar:
2*pnorm(-2.413564)
[1] 0.01579735
En este caso tenemos evidencia de que los coeficientes son diferentes entre sí. Este enfoque puede extenderse a más de dos coeficientes.
Utilizando multcomp
Estos cálculos bastante tediosos se pueden hacer convenientemente al R
usar el multcomp
paquete. Aquí está el mismo ejemplo que el anterior pero hecho con multcomp
:
library(multcomp)
glht.mod <- glht(mylogit, linfct = c("gre - gpa = 0"))
summary(glht.mod)
Linear Hypotheses:
Estimate Std. Error z value Pr(>|z|)
gre - gpa == 0 -0.8018 0.3322 -2.414 0.0158 *
confint(glht.mod)
También se puede calcular un intervalo de confianza para la diferencia de los coeficientes:
Quantile = 1.96
95% family-wise confidence level
Linear Hypotheses:
Estimate lwr upr
gre - gpa == 0 -0.8018 -1.4529 -0.1507
Para ejemplos adicionales de multcomp
, vea aquí o aquí .
Los coeficientes de una regresión logística se encuentran por máxima verosimilitud. Pero debido a que la función de probabilidad involucra muchos productos, la probabilidad de registro se maximiza, lo que convierte los productos en sumas. El modelo que se ajusta mejor tiene una mayor probabilidad de registro. El modelo que involucra más variables tiene al menos la misma probabilidad que el modelo nulo. Denote la log-verosimilitud del modelo alternativo (modelo que contiene más variables) con y la log-verosimilitud del modelo nulo con L L 0 , el estadístico de prueba de razón de verosimilitud es:
distribución de con los grados de libertad como la diferencia en el número de variables. En nuestro caso, esto es 2.
mylogit2 <- glm(admit ~ I(gre + gpa) + rank, data = mydata, family = "binomial")
En nuestro caso, podemos usar logLik
para extraer la probabilidad logarítmica de los dos modelos después de una regresión logística:
L1 <- logLik(mylogit)
L1
'log Lik.' -229.2587 (df=6)
L2 <- logLik(mylogit2)
L2
'log Lik.' -232.2416 (df=5)
El modelo que contiene la restricción gre
y gpa
tiene una probabilidad de registro ligeramente mayor (-232.24) en comparación con el modelo completo (-229.26). Nuestro estadístico de prueba de razón de probabilidad es:
D <- 2*(L1 - L2)
D
[1] 16.44923
1-pchisq(D, df=1)
[1] 0.01458625
R tiene la prueba de razón de probabilidad incorporada; podemos usar la anova
función para calcular la prueba de razón de probabilidad:
anova(mylogit2, mylogit, test="LRT")
Analysis of Deviance Table
Model 1: admit ~ I(gre + gpa) + rank
Model 2: admit ~ gre + gpa + rank
Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1 395 464.48
2 394 458.52 1 5.9658 0.01459 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Nuevamente, tenemos una fuerte evidencia de que los coeficientes gre
y gpa
son significativamente diferentes entre sí.
La función de puntuación es la derivada de la función log-verosimilitud () dónde son los parámetros y los datos (el caso univariante se muestra aquí con fines ilustrativos):
Esta es básicamente la pendiente de la función log-verosimilitud. Además, dejaser la matriz de información de Fisher, que es la expectativa negativa de la segunda derivada de la función de log-verosimilitud con respecto a. Las estadísticas de la prueba de puntuación son:
La prueba de puntaje también se puede calcular usando anova
(las estadísticas de la prueba de puntaje se llaman "Rao"):
anova(mylogit2, mylogit, test="Rao")
Analysis of Deviance Table
Model 1: admit ~ I(gre + gpa) + rank
Model 2: admit ~ gre + gpa + rank
Resid. Df Resid. Dev Df Deviance Rao Pr(>Chi)
1 395 464.48
2 394 458.52 1 5.9658 5.9144 0.01502 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
La conclusión es la misma que antes.
Nota
An interesting relationship between the different test statistics when the model is linear is (Johnston and DiNardo (1997): Econometric Methods): Wald LR Score.
multcomp
packages makes it particularly easy. For example, try this: glht.mod <- glht(mylogit, linfct = c("rank3 - rank4= 0"))
. But a much easier way would be to make rank3
the reference level (using mydata$rank <- relevel(mydata$rank, ref="3")
) and then just use the normal regression output. Each level of the factor is compared to the reference level. The p-value for rank4
would be the desired comparison.
glht
are the same for me (about ) Con respecto a su segunda pregunta: linfct = c("rank3 - rank4= 0")
prueba solo una hipótesis lineal, mientras que mcp(rank="Tukey")
prueba las 6 comparaciones por pares de rank
. Por lo tanto, los valores p deben ajustarse para comparaciones múltiples. Esto significa que los valores p usando la prueba de Tukey son generalmente más altos que la comparación simple.
No especificó sus variables, si son binarias u otra cosa. Creo que hablas de variables binarias. También existen versiones multinomiales del modelo probit y logit.
En general, puede usar la trinidad completa de los enfoques de prueba, es decir
Prueba de razón de verosimilitud
Prueba LM
Prueba de Wald
Cada prueba usa diferentes estadísticas de prueba. El enfoque estándar sería tomar una de las tres pruebas. Los tres pueden usarse para hacer pruebas conjuntas.
La prueba LR utiliza la diferencia de la probabilidad logarítmica de un modelo restringido y no restringido. Por lo tanto, el modelo restringido es el modelo, en el que los coeficientes especificados se establecen en cero. El sin restricciones es el modelo "normal". La prueba de Wald tiene la ventaja de que solo se estima el modelo sin restricciones. Básicamente pregunta si la restricción está casi satisfecha si se evalúa en el MLE sin restricciones. En el caso de la prueba de multiplicador de Lagrange, solo se debe estimar el modelo restringido. El estimador de NM restringido se utiliza para calcular la puntuación del modelo sin restricciones. Este puntaje generalmente no será cero, por lo que esta discrepancia es la base de la prueba LR. La prueba LM también se puede utilizar en su contexto para evaluar la heterocedasticidad.
Los enfoques estándar son la prueba de Wald, la prueba de razón de probabilidad y la prueba de puntaje. Asintóticamente deberían ser lo mismo. En mi experiencia, las pruebas de razón de probabilidad tienden a funcionar ligeramente mejor en simulaciones en muestras finitas, pero los casos en los que esto importa sería en escenarios muy extremos (muestra pequeña) donde tomaría todas estas pruebas solo como una aproximación aproximada. Sin embargo, dependiendo de su modelo (número de covariables, presencia de efectos de interacción) y sus datos (multicolinealidad, la distribución marginal de su variable dependiente), el "maravilloso reino de Asymptotia" puede aproximarse bien por un número sorprendentemente pequeño de observaciones.
A continuación se muestra un ejemplo de tal simulación en Stata utilizando el Wald, la razón de probabilidad y la prueba de puntaje en una muestra de solo 150 observaciones. Incluso en una muestra tan pequeña, las tres pruebas producen valores p bastante similares y la distribución de muestreo de los valores p cuando la hipótesis nula es verdadera parece seguir una distribución uniforme como debería (o al menos las desviaciones de la distribución uniforme no son más grandes de lo que cabría esperar debido a la aleatoriedad heredada en un experimento de Monte Carlo).
clear all
set more off
// data preparation
sysuse nlsw88, clear
gen byte edcat = cond(grade < 12, 1, ///
cond(grade == 12, 2, 3)) ///
if grade < .
label define edcat 1 "less than high school" ///
2 "high school" ///
3 "more than high school"
label value edcat edcat
label variable edcat "education in categories"
// create cascading dummies, i.e.
// edcat2 compares high school with less than high school
// edcat3 compares more than high school with high school
gen byte edcat2 = (edcat >= 2) if edcat < .
gen byte edcat3 = (edcat >= 3) if edcat < .
keep union edcat2 edcat3 race south
bsample 150 if !missing(union, edcat2, edcat3, race, south)
// constraining edcat2 = edcat3 is equivalent to adding
// a linear effect (in the log odds) of edcat
constraint define 1 edcat2 = edcat3
// estimate the constrained model
logit union edcat2 edcat3 i.race i.south, constraint(1)
// predict the probabilities
predict pr
gen byte ysim = .
gen w = .
program define sim, rclass
// create a dependent variable such that the null hypothesis is true
replace ysim = runiform() < pr
// estimate the constrained model
logit ysim edcat2 edcat3 i.race i.south, constraint(1)
est store constr
// score test
tempname b0
matrix `b0' = e(b)
logit ysim edcat2 edcat3 i.race i.south, from(`b0') iter(0)
matrix chi = e(gradient)*e(V)*e(gradient)'
return scalar p_score = chi2tail(1,chi[1,1])
// estimate unconstrained model
logit ysim edcat2 edcat3 i.race i.south
est store full
// Wald test
test edcat2 = edcat3
return scalar p_Wald = r(p)
// likelihood ratio test
lrtest full constr
return scalar p_lr = r(p)
end
simulate p_score=r(p_score) p_Wald=r(p_Wald) p_lr=r(p_lr), reps(2000) : sim
simpplot p*, overall reps(20000) scheme(s2color) ylab(,angle(horizontal))
gre
andgpa
? Isn't that testinggre
andgpa
and meanwhile impose