A continuación se replicarán los resultados del estudio: Does Compulsory School Attendance Affect Schooling and Earning? de los profesores Joshua D. Angrist y Alan B. Krueger. El texto plantea que el cuatrimestre en el que un individuo nace está relacionado al nivel educación que obtiene. Esto se debe a que la política pública relacionada con la edad en la que los menores deben entrar a la educación formal y a las leyes sobre asistencia escolar. Los individuos que nacen al comienzo del año empiezan a asistir a la escuela a una edad mayor, y por lo tanto pueden dejar de educarse una vez que cumplen los 18 años.
El estudio estima que el impacto de la educación obligatoria sobre los ingresos usando el cuatrimestre de nacimiento como una variable instrumental de educación. Por lo tanto, en términos lógicos lo que el estudio plantea es que: El cuatrimestre tiene un efecto sobre el nivel educacional. El que a su vez tiene un efecto sobre los ingresos. Es importante notar que el cuatrimestre de nacimiento no tendría un efecto “por sí mismo” sobre los ingresos, solo lo tiene en tanto que influencia a los años de educación.
La base de datos se puede obtener desde el siguiente link: http://economics.mit.edu/faculty/angrist/data1/data/angkru1991
Lo primero es cargar el paquete “haven” que nos permitira abrir bases de datos en formato dta. Para posteriormente abrir dicha base
library(haven)
Data <- read_dta("NEW7080.dta")
Para trabajar sobre esta base vamos crear un subconjunto con los hombres nacidos entre 1920 y 1929. Ademas solo seleccionamos los datos provenientes del censo de 1970. La variable año de nacimiento es la v27. La variable año de censo es la v16
Data1<-subset(Data, v27>=1920 & v27 <=1929 & v16==70)
Luego construimos nuestra variable instrumental. Para ello primero cargamos el paquete “Dplyr”, el cual nos permite manipular bases de datos.
La variable cuatrimestre de nacimiento es la v18 y como mencionamos anteriormente, la variable año de nacimiento es la v27. Lo que queremos es crear una variable que nos señale el año y el cuatrimestre en el que nació un individuo. Por lo tanto, queremos que una variable que sea algo como: 1920.1. El número antes de punto nos va a indicar el año denacimieto, el que esta despúes nos indica el cuatrimestre. Por lo tanto una observación que diga 1926.3 nos dice que el individuo nacio el 3 cuatrimestre de 1926.
El nombre que le colocamos a esta variable es IV (Instrumental Variable). El comando “paste0” nos permite pegar para cada observación lo que determinemos. En este caso, le dimos la orden de juntara para cada observación las columnas v27 y v18. Además le dimos la orden de poner un punto entre ambas, por eso pusimos ,“.”, entre las observaciones. Si hubieramos querido poner una coma o alguna otra cosa tendriamos que haber puesto ,“,”,. Si no queriamos nada entre las columnos deberiamos haber escrito: mutate(IV = paste0(v27,v18))
Ahora convertimos la variable instrumental en factor. Hacemos lo mismo con la variable año
Data1$IV<-as.factor(Data1$IV)
Data1$v27<-as.factor(Data1$v27)
Para correr la regresión con la variable instrumental cargamos el paquete “AER”. El comando es muy similar al de una regresión común. La unica diferencia es que la regresión que queremos estimar está separada de los instrumentos por el signo |.
Luego corremos el modelo propiamente tal. v9, es el logaritmo del ingreso, v4 son los años de educación, v27 el año de nacimiento y IV es nuestra variable instrumental
MODELO1<-ivreg(v9 ~ v4+v27|v27+IV, data = Data1)
summary(MODELO1)
Call:
ivreg(formula = v9 ~ v4 + v27 | v27 + IV, data = Data1)
Residuals:
Min 1Q Median 3Q Max
-5.67765 -0.21723 0.05442 0.30973 4.36982
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.2704887 0.1687044 25.313 < 2e-16 ***
v4 0.0768557 0.0150416 5.110 3.23e-07 ***
v271921 0.0060001 0.0058282 1.029 0.3032
v271922 0.0002459 0.0058537 0.042 0.9665
v271923 0.0028842 0.0065525 0.440 0.6598
v271924 0.0039570 0.0070582 0.561 0.5751
v271925 0.0083179 0.0069387 1.199 0.2306
v271926 0.0068714 0.0078530 0.875 0.3816
v271927 0.0047215 0.0073274 0.644 0.5193
v271928 0.0021448 0.0082540 0.260 0.7950
v271929 -0.0217599 0.0095193 -2.286 0.0223 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.5931 on 247188 degrees of freedom
Multiple R-Squared: 0.1708, Adjusted R-squared: 0.1707
Wald test: 10.43 on 10 and 247188 DF, p-value: < 2.2e-16
Si queremos ver el proceso de variable instrumetal es mayor detalle , hay otra forma de hacerlo. Primero estimados la regresión normal
paso.1 <- lm(v9 ~ v4+v27, data = Data1)
summary(paso.1)
Call:
lm(formula = v9 ~ v4 + v27, data = Data1)
Residuals:
Min 1Q Median 3Q Max
-5.6991 -0.2187 0.0557 0.3073 4.3941
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.2334437 0.0055394 764.249 < 2e-16 ***
v4 0.0801595 0.0003552 225.670 < 2e-16 ***
v271921 0.0055061 0.0053760 1.024 0.306
v271922 -0.0002424 0.0054144 -0.045 0.964
v271923 0.0020724 0.0054104 0.383 0.702
v271924 0.0029452 0.0053475 0.551 0.582
v271925 0.0073566 0.0053843 1.366 0.172
v271926 0.0056203 0.0054066 1.040 0.299
v271927 0.0036200 0.0053426 0.678 0.498
v271928 0.0007730 0.0053971 0.143 0.886
v271929 -0.0234840 0.0053878 -4.359 1.31e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.593 on 247188 degrees of freedom
Multiple R-squared: 0.171, Adjusted R-squared: 0.171
F-statistic: 5101 on 10 and 247188 DF, p-value: < 2.2e-16
En el segundo paso realizamos una estimación donde la variable que queremos instrumentalizar queda como variable dependiente. Mientras que el instrumento pasa a ser la variable dependiente". Ademas creamos la variable Y2hat que son los valores predichos para v4 (años de educación) cuando la regresión es hecha sobre la variable instrumental
paso.2 <- lm (v4 ~ v27 + IV,data = Data1)
Y2hat <- fitted(paso.2)
En el tercer paso ocupamos la primera regresión pero incluimos en vez de v4 (años de educación), los valores predichos para v4 cuando la regresión es hecha sobre la variable instrumental.
paso.3 <- lm(v9 ~ Y2hat + v27,data = Data1)
summary(paso.3)
Call:
lm(formula = v9 ~ Y2hat + v27, data = Data1)
Residuals:
Min 1Q Median 3Q Max
-5.1963 -0.2400 0.0441 0.3342 3.8007
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.2704887 0.1852293 23.055 < 2e-16 ***
Y2hat 0.0768557 0.0165150 4.654 3.26e-06 ***
v271921 0.0060001 0.0063991 0.938 0.3484
v271922 0.0002459 0.0064270 0.038 0.9695
v271923 0.0028842 0.0071943 0.401 0.6885
v271924 0.0039570 0.0077496 0.511 0.6096
v271925 0.0083179 0.0076183 1.092 0.2749
v271926 0.0068714 0.0086222 0.797 0.4255
v271927 0.0047215 0.0080452 0.587 0.5573
v271928 0.0021448 0.0090625 0.237 0.8129
v271929 -0.0217599 0.0104518 -2.082 0.0373 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.6512 on 247188 degrees of freedom
Multiple R-squared: 0.00035, Adjusted R-squared: 0.0003096
F-statistic: 8.656 on 10 and 247188 DF, p-value: 2.589e-14
R ocupa automáticamente tres test para evaluar nuestros instrumentos lo único que hay que hacer es agregar “diagnostics=TRUE”, al código.
summary(MODELO1,diagnostics=TRUE)
Call:
ivreg(formula = v9 ~ v4 + v27 | v27 + IV, data = Data1)
Residuals:
Min 1Q Median 3Q Max
-5.67765 -0.21723 0.05442 0.30973 4.36982
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.2704887 0.1687044 25.313 < 2e-16 ***
v4 0.0768557 0.0150416 5.110 3.23e-07 ***
v271921 0.0060001 0.0058282 1.029 0.3032
v271922 0.0002459 0.0058537 0.042 0.9665
v271923 0.0028842 0.0065525 0.440 0.6598
v271924 0.0039570 0.0070582 0.561 0.5751
v271925 0.0083179 0.0069387 1.199 0.2306
v271926 0.0068714 0.0078530 0.875 0.3816
v271927 0.0047215 0.0073274 0.644 0.5193
v271928 0.0021448 0.0082540 0.260 0.7950
v271929 -0.0217599 0.0095193 -2.286 0.0223 *
Diagnostic tests:
df1 df2 statistic p-value
Weak instruments 30 247159 4.599 8.84e-16 ***
Wu-Hausman 1 247187 0.048 0.826
Sargan 38 NA 36.023 0.561
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.5931 on 247188 degrees of freedom
Multiple R-Squared: 0.1708, Adjusted R-squared: 0.1707
Wald test: 10.43 on 10 and 247188 DF, p-value: < 2.2e-16
El primero dice “Weak instruments”. La hipótesis nula es “todos los instrumentos son débiles”. Es nuestro caso, el valor p es muy pequeño por lo que se rechaza la hipótesis nula, por lo tanto al menos un instrumento es “fuerte”.
El segundo es el test de Hausman que nos permite identificar si es que existe endogeneidad. La Hipótesis nula es
\(H0:Cov(x,e)=0\)
Por lo cual, rechazarla nos indica la existencia de endogeneidad y la necesidad de implementar variables instrumentales. En nuestro caso, el valor está por encima de 0.05 por lo tanto, no existe evidencia suficiente para rechazar la hipótesis nula. Por lo cual no podemos decir que la variable que nos preocupa (años de educación), esté correlacionada con el error. Lo que nos indica que no es endógena.
El tercer test tiene relación con la validez de los instrumentos. En específico, queremos saber si es que el instrumento está correlacionado con el error. Dicho test solo puede ser hecho para los instrumentos extre, es decir aquellos que están en exceso de los número de variables endógenas. Este test es conocido como el test Sargan. La hipótesis nula es que la covarianza entre el instrumento y el término de error es cero.
\(H0:Cov(z,e)=0\)
Por lo tanto, el rechazar la hipótesis nula indica que alguno de los instrumentos no es válido. En el caso nuestro no se rechaza la hipótesis nula, por lo que los instrumentos extra son válidos, es decir no están correlacionados con el término de error.