brsmatch {rsmatch} | R Documentation |
Balanced Risk Set Matching
Description
Perform balanced risk set matching as described in Li et al. (2001) "Balanced Risk Set Matching". Given a longitudinal data frame with covariate information, along with treatment time, build a MIP problem that matches treated individuals to those that haven't been treated yet (or are never treated) based on minimizing the Mahalanobis distance between covariates. If balancing is desired, the model will try to minimize the imbalance in terms of specified balancing covariates in the final pair output. Each treated individual is matched to one other individual.
Usage
brsmatch(
n_pairs,
data,
id = "id",
time = "time",
trt_time = "trt_time",
covariates = NULL,
balance = TRUE,
balance_covariates = NULL,
exact_match = NULL,
options = list(time_lag = FALSE, verbose = FALSE, optimizer = c("glpk", "gurobi"))
)
Arguments
n_pairs |
The number of pairs desired from matching. |
data |
A data.frame or similar containing columns matching the |
id |
A character specifying the id column name (default |
time |
A character specifying the time column name (default |
trt_time |
A character specifying the treatment time column name
(default |
covariates |
A character vector specifying the covariates to use for
matching (default |
balance |
A logical value indicating whether to include balancing constraints in the matching process. |
balance_covariates |
A character vector specifying the covariates to use
for balancing (default |
exact_match |
A vector of optional covariates to perform exact matching
on. If |
options |
A list of additional parameters with the following components:
|
Details
Note that when using exact matching, the n_pairs
are split roughly in
proportion to the number of treated subjects in each exact matching group.
If you would like to control n_pairs
exactly, we suggest manually
performing exact matching, for example with split()
, and selecting
n_pairs
for each group interactively.
Value
A data frame containing the pair information. The data frame has
columns id
, pair_id
, and type
. id
matches the input parameter and
will contain all ids from the input data frame. pair_id
refers to the id
of the computed pairs; NA
values indicate unmatched individuals. type
indicates whether the individual in the pair is considered as treatment
("trt") or control ("all") in that pair.
Author(s)
Sean Kent
References
Li, Yunfei Paul, Kathleen J Propert, and Paul R Rosenbaum. 2001. "Balanced Risk Set Matching." Journal of the American Statistical Association 96 (455): 870-82. doi:10.1198/016214501753208573
Examples
if (requireNamespace("Rglpk", quietly = TRUE)) {
library(dplyr, quietly = TRUE)
pairs <- brsmatch(
n_pairs = 13,
data = oasis,
id = "subject_id",
time = "visit",
trt_time = "time_of_ad",
balance = FALSE
)
na.omit(pairs)
# evaluate the first match
first_match <- pairs$subject_id[which(pairs$pair_id == 1)]
oasis %>% dplyr::filter(subject_id %in% first_match)
}