La tarea debe entregarse de manera individual, pero se recomienda ampliamente colaborar en grupos de estudio. Las secciones teóricas deben estar desarrolladas en un procesador de textos y enviadas en formato .docx o .pdf. Alternativamente, puede escribir sus respuestas en lápiz y papel, con letra legible y adjuntar un escaneo de sus respuestas. Las secciones prácticas deberán contener archivos de código replicable y archivos de salida en R (o similares, en caso de usar otro software) para considerarse completas. Las tareas deben entregarse antes de la fecha límite a través de Teams. Puede crear una carpeta comprimida que contenga todos sus archivos y subir esta carpeta en Teams. Recuerde que en Teams debe asegurarse de que los archivos se han subido correctamente.
library(tidyverse)
library(Matching)
library(stargazer)
library(rdrobust)
La tabla esta en el siguiente enlace
data <- read_csv("Datos/programa_regularizacion.csv")
modela <- glm( asesoria ~ escuela_dist + educacion_madre + activos +
consumo_calorico + pobreza_ind,
family = binomial(link="probit"),
data = data)
summary(modela)
Call:
glm(formula = asesoria ~ escuela_dist + educacion_madre + activos +
consumo_calorico + pobreza_ind, family = binomial(link = "probit"),
data = data)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.3747 -0.7523 -0.4983 0.7683 3.0694
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -7.398e-01 7.588e-02 -9.749 <2e-16 ***
escuela_dist 5.283e-01 2.546e-02 20.749 <2e-16 ***
educacion_madre 2.315e-01 2.320e-02 9.977 <2e-16 ***
activos 5.685e-05 8.273e-05 0.687 0.492
consumo_calorico -3.928e-03 7.719e-03 -0.509 0.611
pobreza_ind -3.185e-01 2.425e-02 -13.133 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 4578.2 on 3999 degrees of freedom
Residual deviance: 3789.5 on 3994 degrees of freedom
AIC: 3801.5
Number of Fisher Scoring iterations: 5
El desempeño del logit y probit es muy parecido, si se toma un probit se trabaja sobre la parametrización de la variable dependiente de na distribución normal lo cual tiene una asociación más clara.
datab <- data %>%
mutate( pro = predict(modela, type = "response"))
ggplot(datab, aes(x = pro, y = ..density.., color = factor(asesoria))) +
geom_histogram() +
#facet_wrap(~asesoria) +
xlab("Probabilidad ajustada")+
geom_density()
set.seed(123)
modelc <- Match(Y = data$calificacion,
Tr = data$asesoria,
X = modela$fitted.values,
M = 1,
replace = FALSE,
CommonSupport = TRUE)
summary(modelc)
Estimate... 0.081022
SE......... 0.046856
T-stat..... 1.7292
p.val...... 0.083781
Original number of observations.............. 3972
Original number of treated obs............... 1037
Matched number of observations............... 1037
Matched number of observations (unweighted). 1037
El TOT es 0.081 unidades más de clasificación con un nivel de significancia al 10%.
set.seed(123)
modeld <- Match(Y = data$calificacion,
Tr = data$asesoria,
X = modela$fitted.values,
caliper = 0.1,
replace = FALSE,
CommonSupport = TRUE)
summary(modeld)
Estimate... 0.15973
SE......... 0.053085
T-stat..... 3.0089
p.val...... 0.0026218
Original number of observations.............. 3972
Original number of treated obs............... 1037
Matched number of observations............... 766
Matched number of observations (unweighted). 766
Caliper (SDs)........................................ 0.1
Number of obs dropped by 'exact' or 'caliper' 271
El TOT es 0.16 unidades más de clasificación con un nivel de significancia al 1%. LA valor del caliper se eloge a partie de la distribución mostrada anteriormente.
En la gráfica se muestra un bosquejo de la relación entre la seguridad alimentaria y e índice de prevalencia de la plaga, esta relación es decreciente (a mayor indice menor seguridad). Se espera la discontinuidad en el valor del umbral.
El programa puede evaluarse por medio de la estimación del coeficiente \(\rho\) de la siguiente regresión
\[y=\alpha +\rho D_a+ P(a,D_a)+\varepsilon_a\]
\(D_a\) es la variable dummy de acceso al tratamiento, \(P\) puede ser un polinomio en la variable \(a\) y/o en la variable \(a-a_0\). El polinomio modela las no linealidades y los términos pueden estar ponderados por \(D_a\), todo lo anterior para darle flexibilidad al modelo. Se supone tomar valores cercanos al umbral, esto tiene como consecuencia que los efectos no lineales (sobre el efecto del tratamiento) sean despreciables, ademas de garantizar de trabajar con individuos estadísticamente equivalentes.
Para la primera etapa se realiza la regresión de la cantidad de plaguicida (variable endógena) sobre la variable indicadora del umbral (instrumento)
Para la segunda etapa se toman los estimados de la cantidad de plaguicida (que ya no presenta endógeneidad) y sobre ellos se regresa la seguridad alimentaria. En este caso el coeficiente asociado a la cantidad de plaguicida representa el efecto de haber sido beneficiado al programa (superar el umbral) respecto a no ser beneficiado
Los supuestos, son que la cantidad de plaguicida y la variable indicadora de umbral estén correlacionadas (Relevancia), y que la variable indicadora no este correlacionada con el error (exógeneidad), en este caso la aleatoriedad en la asignación puede suponerse por la privacidad del valor de umbral y esto a su vez provoca la exógeneidad
data <- read_csv("Datos/headstar.csv")
data1 <- data %>% mutate(indica =ifelse(povrate60>59.1984,"T","C") )
dataa <- na.omit(data1)
ggplot(subset(dataa, mort_age59_related_postHS>0),
aes(x=povrate60 ,y= mort_age59_related_postHS,
color=as.factor(indica), shape=as.factor(indica)))+
labs(x = "índice de pobreza", y = "mortalidad infantil")+
geom_point()+
xlim(50, 70)+
ylim(0, 20)+
geom_smooth(se=FALSE)+
geom_vline(xintercept=59.1984, linetype="dashed", color = "blue")
ggplot(dataa,
aes(x=povrate60 ,y= mort_age59_related_postHS,
color=as.factor(indica), shape=as.factor(indica)))+
labs(x = "índice de pobreza", y = "mortalidad infantil")+
geom_point()+
xlim(50, 70)+
ylim(0, 10)+
geom_smooth(se=FALSE)+
geom_vline(xintercept=59.1984, linetype="dashed", color = "blue")
summary(data1$mort_age59_related_postHS)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.000 0.000 0.000 2.253 2.824 136.054 25
modelb <- lm(mort_age59_related_postHS ~ indica + povrate60,
data = data1 )
stargazer(modelb, type = "text")
===============================================
Dependent variable:
---------------------------
mort_age59_related_postHS
-----------------------------------------------
indicaT -0.949**
(0.467)
povrate60 0.035***
(0.009)
Constant 1.072***
(0.333)
-----------------------------------------------
Observations 2,783
R2 0.005
Adjusted R2 0.004
Residual Std. Error 5.713 (df = 2780)
F Statistic 7.031*** (df = 2; 2780)
===============================================
Note: *p<0.1; **p<0.05; ***p<0.01
En el modelo más simple no suponemos un ancho de ventana y el polinomio en la variable independiente se supone de primer grado. En este caso el tener acceso al programa supone una reducción en la tasa de mortalidad de -0.949 a un nivel de significancia del 5%. Al observar la estadística descriptiva de la variable dependiente no se tiene una idea clara de la medición de la tasa de mortalidad.
modelc <- rdbwselect(y = data1$mort_age59_related_postHS,
x = data1$povrate60,
c = 59.1984,
all = T)
summary(modelc)
Call: rdbwselect
Number of Obs. 2783
BW type All
Kernel Triangular
VCE method NN
Number of Obs. 2489 294
Order est. (p) 1 1
Order bias (q) 2 2
Unique Obs. 2489 294
=======================================================
BW est. (h) BW bias (b)
Left of c Right of c Left of c Right of c
=======================================================
mserd 6.810 6.810 10.725 10.725
msetwo 16.745 4.607 22.850 8.915
msesum 7.475 7.475 10.968 10.968
msecomb1 6.810 6.810 10.725 10.725
msecomb2 7.475 6.810 10.968 10.725
cerrd 4.581 4.581 10.725 10.725
certwo 11.263 3.099 22.850 8.915
cersum 5.028 5.028 10.968 10.968
cercomb1 4.581 4.581 10.725 10.725
cercomb2 5.028 4.581 10.968 10.725
=======================================================
Con ayuda de enlace se logran tomar los controles adecuados para reproducir los resultados del artículo mencionado
modelc1 <- rdrobust(y = data1$mort_age59_related_postHS,
x = data1$povrate60,
c=59.1968)
summary(modelc1)
Call: rdrobust
Number of Obs. 2783
BW type mserd
Kernel Triangular
VCE method NN
Number of Obs. 2489 294
Eff. Number of Obs. 234 180
Order est. (p) 1 1
Order bias (q) 2 2
BW est. (h) 6.808 6.808
BW bias (b) 10.724 10.724
rho (h/b) 0.635 0.635
Unique Obs. 2489 294
=============================================================================
Method Coef. Std. Err. z P>|z| [ 95% C.I. ]
=============================================================================
Conventional -2.410 1.205 -2.000 0.046 [-4.773 , -0.048]
Robust - - -2.034 0.042 [-5.463 , -0.101]
=============================================================================
modelc2 <- rdrobust(y = data1$mort_age59_related_postHS,
x = data1$povrate60,
c=59.1968,
covs = data1 %>% dplyr::select(-mort_age59_related_postHS,
-povrate60, -belowline,
-indica),
h=6.810,
b=10.725)
summary(modelc2)
Call: rdrobust
Number of Obs. 2779
BW type Manual
Kernel Triangular
VCE method NN
Number of Obs. 2485 294
Eff. Number of Obs. 234 180
Order est. (p) 1 1
Order bias (q) 2 2
BW est. (h) 6.810 6.810
BW bias (b) 10.725 10.725
rho (h/b) 0.635 0.635
Unique Obs. 2485 294
=============================================================================
Method Coef. Std. Err. z P>|z| [ 95% C.I. ]
=============================================================================
Conventional -2.507 1.097 -2.284 0.022 [-4.658 , -0.356]
Robust - - -2.316 0.021 [-5.366 , -0.446]
=============================================================================
modelc3 <- rdrobust(y = data1$mort_age59_related_postHS,
x = data1$povrate60,
c= 59.1984,
covs = data1 %>% dplyr::select(!c(mort_age59_related_postHS,
povrate60, belowline,
indica)),
masspoints="off",
stdvars="on")
summary(modelc3)
Call: rdrobust
Number of Obs. 2779
BW type mserd
Kernel Triangular
VCE method NN
Number of Obs. 2485 294
Eff. Number of Obs. 240 184
Order est. (p) 1 1
Order bias (q) 2 2
BW est. (h) 6.980 6.980
BW bias (b) 11.639 11.639
rho (h/b) 0.600 0.600
=============================================================================
Method Coef. Std. Err. z P>|z| [ 95% C.I. ]
=============================================================================
Conventional -2.473 1.089 -2.271 0.023 [-4.608 , -0.339]
Robust - - -2.256 0.024 [-5.206 , -0.366]
=============================================================================
Se tiene una opción para estimar una regresión discontinua configurable.
a <- rdplot(y= data1$mort_age59_related_postHS,
x = data1$povrate60,
c = 59.1984)
Caliendo, M., & Kopeinig, S. (2008). Some practical guidance for the implementation of propensity score matching. Journal of economic surveys, 22(1), 31-72.↩
Calonico, S., Cattaneo, M. D., Farrell, M. H., & Titiunik, R. (2019). Regression discontinuity designs using covariates. Review of Economics and Statistics, 101(3), 442-451.↩