4 Propensity Score Matching
4.1 Supuestos de identificación
Para estimar un efecto causal cuando hay un factor de confusión, necesitamos (1) supuesto de independencia condicional -CIA y (2) que la probabilidad de tratamiento esté entre 0 y 1 para cada estrato. Más formalmente,
\((Y^1,Y^0) \perp \!\!\! \perp D\mid X\) (independencia condicional)
\(0<Pr(D=1 \mid X) <1\) con probabilidad 1 (soporte común)
Estos dos supuestos producen la siguiente identidad:
\[ \begin{align} E\big[Y^1-Y^0\mid X\big] & = E\big[Y^1 - Y^0 \mid X,D=1\big] \\ & = E\big[Y^1\mid X,D=1\big] - E\big[Y^0\mid X,D=0\big] \\ & = E\big[Y\mid X,D=1\big] - E\big[Y\mid X,D=0\big] \end{align} \]
donde cada valor de \(Y\) está determinado por la ecuación de conmutación. Dado el soporte común, obtenemos el siguiente estimador:
\[ \begin{align} \widehat{\delta_{ATE}}= \int \Big(E\big[Y\mid X,D=1\big] - E\big[Y\mid X,D=0\big]\Big)d\Pr(X) \end{align} \]
Por un lado, necesitamos que el tratamiento sea condicionalmente independiente de ambos resultados potenciales para identificar el ATE, pero solo necesitamos que el tratamiento sea condicionalmente independiente de \(Y_0\) para identificar el ATT y el hecho de que existen algunas unidades en el grupo de control para cada estrato de tratamiento.
4.2 Vecinos más cercanos
Comenzamos con la medida de distancia más simple, la distancia euclidiana (normalizada):
\[ ||X_i-X_j||=\sqrt{(X_i-X_j)'\widehat{V}^{-1}(X_i-X_j)} \]
donde
\[ \widehat{V}^{-1} = \begin{pmatrix} \widehat{\sigma}_1^2 & 0 & \dots & 0 \\ 0 & \widehat{\sigma}_2^2 & \dots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \dots & \widehat{\sigma}_k^2 \\ \end{pmatrix} \]
La distancia de Mahalanobis se define por:
\[ ||X_i-X_j||=\sqrt{ (X_i-X_j)'\widehat{\Sigma}_X^{-1}(X_i - X_j) } \]
donde \(\widehat{\Sigma}_X\) es la matriz de varianza-covarianza muestral de \(X\).
Cuanto mayor sea la dimensión, mayor será la probabilidad de discrepancias en el emarejamientom y más datos se necesitarán.
4.3 Métodos de propensión
El programa de capacitación laboral National Supported Work Demonstration (NSW) fue operado por Manpower Demonstration Research Corp (MRDC) a mediados de la década de 1970.
El NSW fue un programa de empleo temporal diseñado para ayudar a los trabajadores desfavorecidos que carecen de habilidades laborales básicas a ingresar al mercado laboral brindándoles experiencia laboral y asesoramiento en un entorno protegido.
También fue único en el sentido de que asignó al azar a candidatos calificados a puestos de capacitación. El grupo de tratamiento recibió todos los beneficios del programa NSW. Básicamente, se dejó que los controles se las arreglaran solos.
Ejemplo
Leemos los datos y limpiamos:
<- "https://raw.github.com/scunning1975/mixtape/master/nsw_mixtape.dta"
uu
<- data.frame(read_dta(uu))
nsw_dw <- "https://raw.github.com/scunning1975/mixtape/master/cps_mixtape.dta"
uu
<- data.frame(read_dta(uu)%>%
nsw_dw_cpscontrol bind_rows(nsw_dw))
$agesq <- nsw_dw_cpscontrol$age^2
nsw_dw_cpscontrol$agecube <- nsw_dw_cpscontrol$age^3
nsw_dw_cpscontrol$educsq <- nsw_dw_cpscontrol$educ^2
nsw_dw_cpscontrol$u74 <- (nsw_dw_cpscontrol$re74==0)*1
nsw_dw_cpscontrol$u75 <- (nsw_dw_cpscontrol$re75==0)*1
nsw_dw_cpscontrol$interaction1 <- nsw_dw_cpscontrol$educ*nsw_dw_cpscontrol$re74
nsw_dw_cpscontrol$re74sq <- nsw_dw_cpscontrol$re74^2
nsw_dw_cpscontrol$re75sq <- nsw_dw_cpscontrol$re75^2
nsw_dw_cpscontrol$interaction2 <- nsw_dw_cpscontrol$u74*nsw_dw_cpscontrol$hisp
nsw_dw_cpscontrol
table(nsw_dw_cpscontrol$u74)
##
## 0 1
## 14198 2239
table(nsw_dw_cpscontrol$re74==0)
##
## FALSE TRUE
## 14198 2239
Ajustamos el modelo sin tomar en cuenta el eparejamiento:
<- lm(re78~treat,data = nsw_dw_cpscontrol)
m1
<- lm(re78~treat + age + agesq + agecube + educ +
m2 + marr + nodegree +
educsq + hisp + re74 + re75 + u74 + u75 + interaction1,data = nsw_dw_cpscontrol)
black export_summs(m1,m2)
Model 1 | Model 2 | |
---|---|---|
(Intercept) | 14682.01 *** | 14127.56 *** |
(75.80) | (2141.49) | |
treat | -8332.87 *** | 1518.64 ** |
(714.47) | (546.37) | |
age | -860.53 *** | |
(186.37) | ||
agesq | 20.52 *** | |
(5.44) | ||
agecube | -0.17 *** | |
(0.05) | ||
educ | 31.86 | |
(100.01) | ||
educsq | 13.25 ** | |
(4.03) | ||
marr | 334.78 * | |
(149.87) | ||
nodegree | 121.15 | |
(181.56) | ||
black | -812.91 *** | |
(199.98) | ||
hisp | -215.07 | |
(217.87) | ||
re74 | 0.44 *** | |
(0.03) | ||
re75 | 0.45 *** | |
(0.01) | ||
u74 | 299.23 | |
(228.83) | ||
u75 | -1404.49 *** | |
(234.81) | ||
interaction1 | -0.01 *** | |
(0.00) | ||
N | 16437 | 16437 |
R2 | 0.01 | 0.48 |
*** p < 0.001; ** p < 0.01; * p < 0.05. |
Ahora ajustamos el PSM para encontrar un contrafactual adecuado:
library(MatchIt)
<- matchit(treat ~ age + agesq + agecube + educ +
m_out + marr + nodegree +
educsq + hisp + re74 + re75 + u74 + u75 + interaction1,
black data = nsw_dw_cpscontrol, method = "nearest",
distance = "logit", ratio =5)
<- match.data(m_out)
m_data
summary(m_out)
##
## Call:
## matchit(formula = treat ~ age + agesq + agecube + educ + educsq +
## marr + nodegree + black + hisp + re74 + re75 + u74 + u75 +
## interaction1, data = nsw_dw_cpscontrol, method = "nearest",
## distance = "logit", ratio = 5)
##
## Summary of balance for all data:
## Means Treated Means Control SD Control Mean Diff eQQ Med
## distance 0.2218 0.0089 0.0431 0.2130 0.1935
## age 25.8162 33.0945 11.0404 -7.2783 6.0000
## agesq 717.3946 1217.1292 783.3452 -499.7346 336.0000
## agecube 21554.6595 48835.9567 45011.0938 -27281.2972 14166.0000
## educ 10.3459 11.9965 2.8654 -1.6505 1.0000
## educsq 111.0595 152.1260 67.0151 -41.0665 25.0000
## marr 0.1892 0.7028 0.4570 -0.5136 1.0000
## nodegree 0.7081 0.3045 0.4602 0.4037 0.0000
## black 0.8432 0.0856 0.2798 0.7577 1.0000
## hisp 0.0595 0.0726 0.2595 -0.0131 0.0000
## re74 2095.5737 13826.2674 9636.6198 -11730.6937 12960.5498
## re75 1532.0553 13452.6856 9334.5188 -11920.6303 13706.9805
## u74 0.7081 0.1297 0.3360 0.5784 1.0000
## u75 0.6000 0.1185 0.3232 0.4815 0.0000
## interaction1 22898.7265 168746.6504 129738.3239 -145847.9239 161098.7188
## eQQ Mean eQQ Max
## distance 0.2115 0.4898
## age 7.3351 16.0000
## agesq 503.3568 1312.0000
## agecube 27498.4595 82125.0000
## educ 1.7081 4.0000
## educsq 41.5243 128.0000
## marr 0.5135 1.0000
## nodegree 0.4000 1.0000
## black 0.7568 1.0000
## hisp 0.0162 1.0000
## re74 11798.3858 23165.4448
## re75 11915.3775 22407.0447
## u74 0.5784 1.0000
## u75 0.4811 1.0000
## interaction1 146472.1399 284992.5591
##
##
## Summary of balance for matched data:
## Means Treated Means Control SD Control Mean Diff eQQ Med
## distance 0.2218 0.1279 0.1324 0.0940 0.1090
## age 25.8162 25.7027 8.3347 0.1135 1.0000
## agesq 717.3946 730.0205 519.7001 -12.6259 47.0000
## agecube 21554.6595 23021.8022 26927.5771 -1467.1427 1657.0000
## educ 10.3459 10.5989 2.2327 -0.2530 0.0000
## educsq 111.0595 117.3168 44.4636 -6.2573 0.0000
## marr 0.1892 0.2800 0.4492 -0.0908 0.0000
## nodegree 0.7081 0.6141 0.4871 0.0941 0.0000
## black 0.8432 0.7643 0.4246 0.0789 0.0000
## hisp 0.0595 0.1503 0.3575 -0.0908 0.0000
## re74 2095.5737 3419.2548 5566.3275 -1323.6811 0.0000
## re75 1532.0553 2419.0200 3802.5966 -886.9647 300.7742
## u74 0.7081 0.5059 0.5002 0.2022 0.0000
## u75 0.6000 0.4486 0.4976 0.1514 0.0000
## interaction1 22898.7265 37412.0453 61675.2524 -14513.3188 0.0000
## eQQ Mean eQQ Max
## distance 0.0938 0.1858
## age 1.2378 8.0000
## agesq 71.0108 800.0000
## agecube 3459.8000 60128.0000
## educ 0.3514 4.0000
## educsq 7.2162 60.0000
## marr 0.0919 1.0000
## nodegree 0.0973 1.0000
## black 0.0811 1.0000
## hisp 0.0919 1.0000
## re74 1408.1416 4865.8901
## re75 936.4978 4185.6865
## u74 0.2054 1.0000
## u75 0.1514 1.0000
## interaction1 16728.7382 173995.5469
##
## Percent Balance Improvement:
## Mean Diff. eQQ Med eQQ Mean eQQ Max
## distance 55.8694 43.6551 55.6507 62.0743
## age 98.4404 83.3333 83.1245 50.0000
## agesq 97.4735 86.0119 85.8925 39.0244
## agecube 94.6222 88.3030 87.4182 26.7848
## educ 84.6734 100.0000 79.4304 0.0000
## educsq 84.7630 100.0000 82.6217 53.1250
## marr 82.3193 100.0000 82.1053 0.0000
## nodegree 76.6993 0.0000 75.6757 0.0000
## black 89.5838 100.0000 89.2857 0.0000
## hisp -590.7347 0.0000 -466.6667 0.0000
## re74 88.7161 100.0000 88.0650 78.9950
## re75 92.5594 97.8057 92.1404 81.3198
## u74 65.0481 100.0000 64.4860 0.0000
## u75 68.5661 0.0000 68.5393 0.0000
## interaction1 90.0490 100.0000 88.5789 38.9473
##
## Sample sizes:
## Control Treated
## All 16252 185
## Matched 925 185
## Unmatched 15327 0
## Discarded 0 0
Ajustamos el modelo LM con el contrafactual encontrado:
<- lm(re78~treat ,data = m_data)
m3
<- lm(re78~treat + age + agesq + agecube + educ +
m4 + marr + nodegree +
educsq + hisp + re74 + re75 + u74 + u75 + interaction1,data = m_data)
black
export_summs(m1,m2,m3,m4)
Model 1 | Model 2 | Model 3 | Model 4 | |
---|---|---|---|---|
(Intercept) | 14682.01 *** | 14127.56 *** | 5929.40 *** | 5331.92 |
(75.80) | (2141.49) | (225.90) | (7197.43) | |
treat | -8332.87 *** | 1518.64 ** | 419.75 | 1276.11 * |
(714.47) | (546.37) | (553.33) | (529.42) | |
age | -860.53 *** | -220.04 | ||
(186.37) | (675.98) | |||
agesq | 20.52 *** | 7.56 | ||
(5.44) | (21.61) | |||
agecube | -0.17 *** | -0.09 | ||
(0.05) | (0.22) | |||
educ | 31.86 | 205.91 | ||
(100.01) | (431.74) | |||
educsq | 13.25 ** | 2.65 | ||
(4.03) | (23.50) | |||
marr | 334.78 * | -1210.87 * | ||
(149.87) | (486.12) | |||
nodegree | 121.15 | 166.14 | ||
(181.56) | (624.18) | |||
black | -812.91 *** | -1098.73 | ||
(199.98) | (696.49) | |||
hisp | -215.07 | 949.41 | ||
(217.87) | (850.72) | |||
re74 | 0.44 *** | -0.04 | ||
(0.03) | (0.19) | |||
re75 | 0.45 *** | 0.35 *** | ||
(0.01) | (0.08) | |||
u74 | 299.23 | 46.76 | ||
(228.83) | (571.90) | |||
u75 | -1404.49 *** | -982.18 | ||
(234.81) | (544.28) | |||
interaction1 | -0.01 *** | 0.02 | ||
(0.00) | (0.02) | |||
N | 16437 | 16437 | 1110 | 1110 |
R2 | 0.01 | 0.48 | 0.00 | 0.16 |
*** p < 0.001; ** p < 0.01; * p < 0.05. |