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,

  1. \((Y^1,Y^0) \perp \!\!\! \perp D\mid X\) (independencia condicional)

  2. \(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:

uu <- "https://raw.github.com/scunning1975/mixtape/master/nsw_mixtape.dta"

nsw_dw <- data.frame(read_dta(uu))
uu <- "https://raw.github.com/scunning1975/mixtape/master/cps_mixtape.dta"

nsw_dw_cpscontrol <- data.frame(read_dta(uu)%>% 
                        bind_rows(nsw_dw))

nsw_dw_cpscontrol$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

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:

m1 <- lm(re78~treat,data = nsw_dw_cpscontrol)

m2 <- lm(re78~treat + age + agesq + agecube + educ +
                 educsq + marr + nodegree +
                 black + hisp + re74 + re75 + u74 + u75 + interaction1,data = nsw_dw_cpscontrol)
export_summs(m1,m2)
Table 4.1:
Model 1Model 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)   
N16437       16437       
R20.01    0.48    
*** p < 0.001; ** p < 0.01; * p < 0.05.

Ahora ajustamos el PSM para encontrar un contrafactual adecuado:

library(MatchIt)
m_out <- matchit(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)

m_data <- match.data(m_out)

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:

m3 <- lm(re78~treat ,data = m_data)

m4 <- lm(re78~treat + age + agesq + agecube + educ +
                 educsq + marr + nodegree +
                 black + hisp + re74 + re75 + u74 + u75 + interaction1,data = m_data)

export_summs(m1,m2,m3,m4)
Table 4.2:
Model 1Model 2Model 3Model 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)   
N16437       16437       1110       1110       
R20.01    0.48    0.00    0.16    
*** p < 0.001; ** p < 0.01; * p < 0.05.