Los modelos Logit que estudiamos en clases anteriores son muy populares para estimar regresiones cuando tenemos una variable dependiente dicotómica. Esa popularidad proviene de dos fuentes. Primero, es relativamente fácil estimar dichos modelos. Además es relativamente simple interpretarlos. Por ejemplo, podemos usar odds ratios (i.e. razón de momios) para interpretarlos
Un supuesto clave en los modelos Logit es que los errores tienen una distribución logística. Pero en muchos casos podemos también obtener inferencias igualmente válidas si asumimos que los errores se distribuyen normalmente. Los modelos Probit nos permiten estimar regresiones con variables dependientes dicotómicas y errores distribuidos normalmente.
Para mostrar como funciona este modelo alternativo para variables dependientes dicotómicas, vamos a hacer una regresión que estime la probabilidad de que una persona vote o no (turnout) usando datos de Singh (2014). Dicho autor sugiere que la probabilidad de votar (o no) es una función de la proximidad ideológica al partido político más cercano ponderando por la competitividad de la elección. La idea aquí es que individuos que tienen una alternativa cercana en una elección competida tienen más probabilidad de pensar que vale la pena salir a votar.
La base de datos usada por Singh (2014) continene un subconjunto de observaciones de el Comparative Study of Electoral Systems (CSES). Específicamente, nuestros datos contienen 44,897 observaciones de 30 elecciones que ocurrieron entre 1996 y 2006 en países europeos (este y oeste).
La variables que nos interesan son las siguientes:
El archivo está en formato de Stata, así que cargamos los datos de la forma siguiente:
library(foreign)
singh <- read.dta("/Users/sergiobejar/Downloads/SinghJTP.dta", convert.factors = FALSE)
Como primer paso después de cargar los datos, siempre es recomendable
usar la función de summary() ó producir algunos gráficos
para darnos una idea de los atributos de nuestros datos/variables. Eso
se los dejo de tarea.
Un modelo Probit se estima de la siguiente forma:
m_probit <- glm(voted ~ distanceweighted, family = binomial(link = "probit"), data = singh)
summary(m_probit)
##
## Call:
## glm(formula = voted ~ distanceweighted, family = binomial(link = "probit"),
## data = singh)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.9732 0.5550 0.5550 0.5776 0.6644
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.068134 0.009293 114.942 < 2e-16 ***
## distanceweighted -0.055074 0.011724 -4.698 2.63e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 37788 on 44896 degrees of freedom
## Residual deviance: 37766 on 44895 degrees of freedom
## AIC: 37770
##
## Number of Fisher Scoring iterations: 4
Como podemos ver, la información guardada en el objeto
m_probit (i.e. después de estimar nuestro modelo
Probit) es parecida a la obtenida si estimamos un modelo
Logit. Pero hay que notar que el cambio en la
distribución de los errores a una distribución normal va a cambiar la
escala de los coeficientes, por lo que los valores van a ser diferentes
entre modelos logit y probit. Las implicaciones substantivas
generalmente serán las mismas entre dichos modelos, así que nos
corresponde a nosotros decidir que tipo de modelo se adapta mejor a
nuestras necesidades.
Las probabilidades predichas se estiman de forma similar que en los
modelos logit. El código presentado a continuación nos permite crear un
data.frame con valores hipoteticos de nuestros datos y
probabilidades predichas.
wght.dist <- seq(0,4, by = .1)
inputs.3 <- cbind(1, wght.dist)
colnames(inputs.3) <- c("constant", "distanceweighted")
inputs.3 <- as.data.frame(inputs.3)
forecast.probit <- predict(m_probit, newdata = inputs.3, type = "link", se.fit = TRUE)
Ahora calculamos los intervalos de confianza:
lower.ci <- forecast.probit$fit-1.96*forecast.probit$se.fit
upper.ci <- forecast.probit$fit+1.96*forecast.probit$se.fit
Para graficar las probabilidades predichas con intervalos de confianza:
plot(y=pnorm(forecast.probit$fit), x = wght.dist, ylim = c(.7, .9), type = "l", lwd = 2, xlab = "Distancia Ideológica Ponderada", ylab = "Probabilidad de Votar")
lines(y=pnorm(lower.ci), x = wght.dist, lty=3, col = "red", lwd = 2)
lines(y=pnorm(upper.ci), x = wght.dist, lty=3, col = "red", lwd = 2)
Cuando la distancia ideológica ponderada va de 0 a 4 hay una reducción de ~5% en la probabilidad de votar.