library("cobalt")
data("lalonde", package = "cobalt")
#A user-defined version of method = "ps"
my.ps <- function(treat, covs, estimand, focal = NULL) {
covs <- make_full_rank(covs)
d <- data.frame(treat, covs)
f <- formula(d)
ps <- glm(f, data = d, family = "binomial")$fitted
w <- get_w_from_ps(ps, treat = treat, estimand = estimand,
focal = focal)
list(w = w, ps = ps)
}
#Balancing covariates between treatment groups (binary)
(W1 <- weightit(treat ~ age + educ + married +
nodegree + re74, data = lalonde,
method = my.ps, estimand = "ATT"))
summary(W1)
bal.tab(W1)
data("msmdata")
(W2 <- weightitMSM(list(A_1 ~ X1_0 + X2_0,
A_2 ~ X1_1 + X2_1 +
A_1 + X1_0 + X2_0,
A_3 ~ X1_2 + X2_2 +
A_2 + X1_1 + X2_1 +
A_1 + X1_0 + X2_0),
data = msmdata,
method = my.ps))
summary(W2)
bal.tab(W2)
# Kernel balancing using the `kbal` package, available
# using `pak::pak_install("chadhazlett/KBAL")`.
# Only the ATT and ATC are available.
if (FALSE) {
kbal.fun <- function(treat, covs, estimand, focal, verbose, ...) {
args <- list(...)
if (!estimand %in% c("ATT", "ATC"))
stop('`estimand` must be "ATT" or "ATC".', call. = FALSE)
treat <- as.numeric(treat == focal)
args <- args[names(args) %in% names(formals(kbal::kbal))]
args$allx <- covs
args$treatment <- treat
args$printprogress <- verbose
cat_cols <- apply(covs, 2, function(x) length(unique(x)) <= 2)
if (all(cat_cols)) {
args$cat_data <- TRUE
args$mixed_data <- FALSE
args$scale_data <- FALSE
args$linkernel <- FALSE
args$drop_MC <- FALSE
}
else if (any(cat_cols)) {
args$cat_data <- FALSE
args$mixed_data <- TRUE
args$cat_columns <- colnames(covs)[cat_cols]
args$allx[,!cat_cols] <- scale(args$allx[,!cat_cols])
args$cont_scale <- 1
}
else {
args$cat_data <- FALSE
args$mixed_data <- FALSE
}
k.out <- do.call(kbal::kbal, args)
w <- k.out$w
list(w = w, fit.obj = k.out)
}
(Wk <- weightit(treat ~ age + educ + married +
nodegree + re74, data = lalonde,
method = kbal.fun, estimand = "ATT",
include.obj = TRUE))
summary(Wk)
bal.tab(Wk, stats = c("m", "ks"))
}
Run the code above in your browser using DataLab