# NOT RUN {
#This loads the classic Lalonde (1986) dataset,
#as well as two matched datasets:
#one from 1:1 propensity score matching,
#and one from cardinality matching, where
#the standardized covariate mean differences are all below 0.1.
data("lalondeMatches")
#obtain the covariates for these datasets
X.lalonde = subset(lalonde, select = -c(treat))
X.matched.ps = subset(lalonde.matched.ps, select = -c(treat,subclass))
X.matched.card = subset(lalonde.matched.card, select = -c(treat,subclass))
#the treatment indicators are
indicator.lalonde = lalonde$treat
indicator.matched.ps = lalonde.matched.ps$treat
indicator.matched.card = lalonde.matched.card$treat
#the subclass for the matched datasets are
subclass.matched.ps = lalonde.matched.ps$subclass
subclass.matched.card = lalonde.matched.card$subclass
#The following lines of code create diagnostic plots assessing
#whether the treatment follows different assignment mechanisms.
#Note that the following examples only use 100 permutations
#to approximate the randomization distribution.
#In practice, we recommend setting perms = 1000 or more;
#in these examples we use perms = 50 to save computation time.
#Assessing complete randomization for the full dataset
#Here, complete randomization clearly does not hold,
#because the observed Mahalanobis distance is far outside
#the complete randomization distribution.
asIfRandPlot(X.matched = X.lalonde, indicator.matched = indicator.lalonde, perms = 50)
#Assessing complete and block (paired) randomization for
#the propensity score matched dataset
#Again, complete and block randomization appear to not hold
#because the observed Mahalanobis distance is far outside
#the randomization distributions.
asIfRandPlot(X.matched = X.matched.ps, indicator.matched = indicator.matched.ps,
X.full = X.lalonde, indicator.full = indicator,
assignment = c("complete", "blocked"),
subclass = lalonde.matched.ps$subclass,
perms = 50)
#Assessing three assignment mechanisms for the
#cardinality matched dataset:
# 1) complete randomization
# 2) blocked (paired) randomization
# 3) constrained-MD randomization
#Note that the Mahalanobis distance is approximately a chi^2_K distribution,
#where K is the number of covariates. In the Lalonde data, K = 8.
#Thus, the threshold can be chosen as the quantile of the chi^2_8 distribution.
#This threshold constrains the Mahalanobis distance to be below the 25-percent quantile:
a = qchisq(p = 0.25, df = 8)
#Then, we can assess these three assignment mechanisms with the plot below.
#Here, these assignment mechanisms seem plausible,
#because the observed Mahalanobis distance is well
#within the randomization distributions.
asIfRandPlot(X.matched = X.matched.card, indicator.matched = indicator.matched.card,
X.full = X.lalonde, indicator.full = indicator,
assignment = c("complete", "blocked", "constrained md"),
subclass = lalonde.matched.card$subclass,
threshold = a,
perms = 50)
# }
Run the code above in your browser using DataLab