View source: R/matching_weights.R
matching_weights | R Documentation |
matching_weights
derives the weights implied by a matching for units
assigned to matched groups. If the matching is exact, reweighting the units
with this function will produce a sample where all treatment groups are
identical on the matching covariates. If the matching is approximate but of
good quality, the reweighted treatment groups will be close to identical.
matching_weights(treatments, matching, target = NULL)
treatments |
factor specifying the units' treatment assignments. |
matching |
|
target |
units to target the weights for. If |
Let S(g)
be the number of units indicated by target
in group
g
(or the total number of units in the group if target
is
NULL
). Let T
be the total number of units indicated by
target
in the sample (or the sample size if target
is NULL
).
Let A(t, g)
be the number of units assigned to treatment t
in
group g
. The weight for a unit in group g
that is assigned to
treatment t
is given by:
\frac{S(g)}{T \times A(t, g)}.
Consider, for example, a matched group with one treated unit and two control
units when we are interested in the average effect of the treated (ATT) and
we have 50 treated units in total (T=50
). For all three units in the
group, we have S(g)=1
. For the treated unit we have A(t, g)=1
,
so its weight becomes 1/50
. The two control units have A(t, g)=2
,
so their weights are both 1/100
.
These weights are such that the difference between the weighted averages of the outcomes in two treatment conditions is the same as the average within-group difference-in-means between the two conditions.
If a matched group g
with S(g) > 0
lacks some treatment condition
t
, no weights exist for the units assigned to t
(in other groups)
so to replicate group g
; the matching does not contain enough
information to impute the missing treatment in group g
. Subsequently,
all units assigned to t
will be given the weight NA
. There is
two ways to solve this problem. First, one can change the target estimand by
setting S(g) = 0
for all groups that are missing units assigned to
t
. This is done with the target
parameter. Second, one can change
the matching so that all groups contain at least one unit assigned to t
(e.g., by merging groups).
Units not assigned to matched groups are given zero weights.
Returns a numeric vector with the weights of the units in the matching.
# Construct example data
my_data <- data.frame(y = rnorm(100),
x1 = runif(100),
x2 = runif(100),
treatment = factor(sample(rep(c("T1", "T2", "C"), c(25, 25, 50)))))
# Make distances
my_distances <- distances(my_data, dist_variables = c("x1", "x2"))
# Make matching
my_matching <- quickmatch(my_distances, my_data$treatment)
# Weights for ATE
weights_ate <- matching_weights(my_data$treatment, my_matching)
# Weights for ATT for T1
weights_att <- matching_weights(my_data$treatment, my_matching, target = "T1")
# Estimate treatment effects with WLS estimator (see `lm_match`)
effects <- lm(y ~ treatment + x1 + x2, data = my_data, weights = weights_att)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.