I'm trying to understand how coarsened exact matching works when there is missingness in the outcome variable. I need to match observations on several predictors and then estimate different models using various outcome variables, some of which include missing values.
Replication in R (automatic coarsening for simplicity of replication):
library('cem')
set.seed(12345)
treat <- rbinom(100, 1, 0.5)
x1 <- rnorm(100, mean = 50, sd = 20)
x2 <- rnorm(100, mean = 10, sd = 5)
y1 <- rnorm(100, mean = 30, sd = 3)
y2 <- y1; y2[90:100] <- NA
df <- data.frame(treat, x1, x2, y1, y2)
Note that y2
is identical to y1
, except that missing values have been introduced for the last 10 observations.
matched <- cem('treat', drop=c('y1', 'y2'), data=df, keep.all = T)
matched
m1 <- att(matched, y1 ~ treat + x1 + x2, data = df)
m1
This simple linear estimation using y1
as outcome yields:
G0 G1
All 48 52
Matched 35 39
Unmatched 13 13
Linear regression model on CEM matched data:
SATT point estimate: -0.799485 (p.value=0.177235)
95% conf. interval: [-1.949084, 0.350114]
m2 <- att(matched, y2 ~ treat + x1 + x2, data = df)
m2
Using y2
yields:
G0 G1
All 48 52
Matched 35 39
Unmatched 13 13
Linear regression model on CEM matched data:
SATT point estimate: -0.925112 (p.value=0.135748)
95% conf. interval: [-2.124466, 0.274241]
The results are different, but I cannot find out (from package documentation or the objects returned in R) what happens under the hood. Does it use listwise deletion to remove the observations with missing values? If so, what if a case with a missing value on y2
is matched to a case without missingness? Does it drop the whole stratum (both cases)?