Modelos Probit

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.

Datos

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.

Estimación del Modelo

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.

Reporte de Probabilidaded Predichas (Predicted Probabilities)

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.