From 5c34204a1767398fee01d084188e69a511249dea Mon Sep 17 00:00:00 2001 From: Noah Greifer Date: Wed, 10 Jan 2024 03:23:07 +0000 Subject: [PATCH] version 4.5.3 --- DESCRIPTION | 8 +- MD5 | 35 +- NEWS.md | 14 +- R/bal.compute.R | 54 ++-- R/bal.plot.R | 241 ++++++++------ R/balance-summary.R | 1 - R/base.bal.tab.R | 15 +- R/class-bal.tab.cluster.R | 2 + R/functions_for_processing.R | 486 ++++++++++++++++------------ R/love.plot.R | 195 ++++++----- R/splitfactor.R | 14 +- build/cobalt.pdf | Bin 439783 -> 439799 bytes build/stage23.rdb | Bin 110530 -> 110552 bytes inst/doc/cobalt.html | 10 +- inst/doc/longitudinal-treat.html | 4 +- inst/doc/love.plot.html | 4 +- inst/doc/other-packages.html | 62 ++-- inst/doc/segmented-data.html | 124 +++---- tests/testthat/test-github-issues.R | 66 ++++ 19 files changed, 786 insertions(+), 549 deletions(-) create mode 100644 tests/testthat/test-github-issues.R diff --git a/DESCRIPTION b/DESCRIPTION index 1239576..844f186 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: cobalt Title: Covariate Balance Tables and Plots -Version: 4.5.2 +Version: 4.5.3 Authors@R: c( person("Noah", "Greifer", role=c("aut", "cre"), email = "noah.greifer@gmail.com", @@ -21,7 +21,7 @@ Suggests: MatchIt (>= 4.0.0), WeightIt (>= 0.14.0), twang (>= 1.6), twangContinuous, Matching, optmatch, ebal, CBPS (>= 0.17), designmatch, optweight, mice (>= 3.8.0), MatchThem (>= 0.9.3), cem (>= 1.1.30), sbw (>= 1.1.5), gbm (>= 2.1.7), brglm2 (>= - 0.9), knitr, rmarkdown, testthat (>= 3.0.0) + 0.9), caret, knitr, rmarkdown, testthat (>= 3.0.0) License: GPL (>= 2) Encoding: UTF-8 LazyData: true @@ -32,8 +32,8 @@ BugReports: https://github.com/ngreifer/cobalt/issues Config/testthat/edition: 3 RoxygenNote: 7.2.3 NeedsCompilation: no -Packaged: 2023-11-20 21:18:43 UTC; NoahGreifer +Packaged: 2024-01-09 19:59:37 UTC; NoahGreifer Author: Noah Greifer [aut, cre] () Maintainer: Noah Greifer Repository: CRAN -Date/Publication: 2023-11-20 22:10:02 UTC +Date/Publication: 2024-01-10 03:23:07 UTC diff --git a/MD5 b/MD5 index 1fb08d1..84570e7 100644 --- a/MD5 +++ b/MD5 @@ -1,9 +1,9 @@ -0158cab8d8bf46183d0f94da48f13378 *DESCRIPTION +0bda3b806772b07a115818a4f52729ec *DESCRIPTION 4981c0f845a039589d95417e88af6c67 *NAMESPACE -0c2ec25f3360696a47d567ec1fe13cb1 *NEWS.md +c287ea9599744cbb3788cc4301a0bfde *NEWS.md f1d4ff9beae81e518ef62d60f28b2bce *R/SHARED.R -fff3a723a38837266b1022ecfd1f63eb *R/bal.compute.R -aa69cf206314afc9754e372d5535a804 *R/bal.plot.R +e1d3b78833fd4d1ad7a8bcfd38776275 *R/bal.compute.R +79fbfa651a1fc33852f0b7565ef54e21 *R/bal.plot.R d8b12395e20752abc0d30985b11ee32e *R/bal.tab.CBPS.R fb56d5943508c43a13ac7e176e6c6720 *R/bal.tab.Match.R ea74cade6d7f2cf4979e4fa0df618988 *R/bal.tab.R @@ -20,10 +20,10 @@ e76b8d8e8953c01748ccc0eb6e490e17 *R/bal.tab.ps.R 4abd1e86472a7fbb97375e3c0518176a *R/bal.tab.time.list.R f90c1768433f196dbc269838278a34b9 *R/bal.tab.weightit.R 819a9aa2a18bc85894d61c06d3cc2f87 *R/balance-statistics.R -794b22ddb9a67048b46cd592dc15a89d *R/balance-summary.R -1cba99e388d355a7c8926ce933e6a623 *R/base.bal.tab.R +a837f9612fae4e207aaba929dc7d830f *R/balance-summary.R +a2670611cf4af6cef19b64ffc27ebade *R/base.bal.tab.R fb1dede748e290f35a8a40f9ee07fc2e *R/chk-functions.R -14d10d099701dc063e06f3265bf79c3f *R/class-bal.tab.cluster.R +b0ba8644c63990f1e13c31509501a38c *R/class-bal.tab.cluster.R d123d2f321757e946bb00f9f17b5de44 *R/class-bal.tab.imp.R e28c2b4c8a95f839f923769f480b33df *R/class-bal.tab.msm.R cbac12dc86cd0ed0b73d19e1631cd1c8 *R/class-bal.tab.multi.R @@ -31,41 +31,41 @@ f3656522c1fad5c0fbe98528a33ae639 *R/class-bal.tab.subclass.R 7da74b107ec560d22a6bb0de9e5919cd *R/cobalt-package.R b7d49c42086e0514344a00f8767e9cdf *R/display-options.R 2ab61912eff72dab752a41c3ca12fca0 *R/f.build.R -bc2bf36676c63e209dea20b70e003ca1 *R/functions_for_processing.R +b21acdd744b79f3b036879c0a5466de3 *R/functions_for_processing.R 1f95a4b48fb06f1a7141af54339bfad7 *R/get.w.R fef3f14dd7f1338d7955be6d6baa73ae *R/lalonde.R -b272aae3e57e7bf991e0fa9615f169a8 *R/love.plot.R +26ddb9530227d400ec7fdb9855cc0b80 *R/love.plot.R 3e3e9d4484baf5165ff7af130bef5ba1 *R/print.bal.tab.R fec5b46755283a32ac63213c5a523857 *R/set.cobalt.options.R -4a10cc38448539fb9ddc67686032ce98 *R/splitfactor.R +50b974f1f161aa4eaf0569364e07472d *R/splitfactor.R 8412ef1e56507bc643d04c059405435c *R/var.names.R 337cf334c024386ff5b1a1cb9b5cbc9f *R/x2base.R aa4f8e3e3cfe7bd87bd71699e7031559 *R/zzz.R 1eba6780abf3ced5bc6c2d74c828fc23 *README.md -bb961542a204a18ddc5e252bc42d1dcf *build/cobalt.pdf -db59aa541f101cb168afcf1c828251d0 *build/stage23.rdb +e8dc0c2c141189d5b42f0c338640d405 *build/cobalt.pdf +fc3b44037734c8022b727716182accac *build/stage23.rdb c2a44ea909757842757512a030434698 *build/vignette.rds 949b492287de79b9a90d520db98768c1 *data/lalonde.RData d22e5afa667cdc190e348ae984c830a2 *data/lalonde_mis.RData 7f7b5e57e80618fa4430b35f7b70b543 *inst/WORDLIST 8360dda77d80858e6d77fb302e39f3a3 *inst/doc/cobalt.R 607225ae73d7222803ff5ada2f46f45d *inst/doc/cobalt.Rmd -5bcaf7ab1a9f24390a2f3997534c30bb *inst/doc/cobalt.html +b62e06656e3cec984139422fbb2e6ae0 *inst/doc/cobalt.html a1b6ff449f81e7a293af442a09d85f19 *inst/doc/longitudinal-treat.R 655fe9c70ce39b4420fc937734a369e3 *inst/doc/longitudinal-treat.Rmd -acc5235a0099c1480137e76e1be12e7e *inst/doc/longitudinal-treat.html +82c6d91b8a9621ad2c75c6e5fb60c010 *inst/doc/longitudinal-treat.html 14e086d8a4708bc3f1258ccc4fee4ebf *inst/doc/love.plot.R c6fd2f677bf6622f922b3486ba90c4fb *inst/doc/love.plot.Rmd -af39252a287551711222a572404b7214 *inst/doc/love.plot.html +0e3244fdf8dec683ba4911136362e3c5 *inst/doc/love.plot.html e65edf51b139b5f1762348c64662c880 *inst/doc/optimizing-balance.R f694e6e938e26356753b55c873b58f53 *inst/doc/optimizing-balance.Rmd 53c6a9aaf708d293cc9a838d3b7762fa *inst/doc/optimizing-balance.html f4afc669d878dfcee242d7e57bc05f73 *inst/doc/other-packages.R 80998c9be05c38dfa08df333f010d65c *inst/doc/other-packages.Rmd -d0c3f7e6e8a3372513ac08635a981742 *inst/doc/other-packages.html +419f84ea2c20023c9d4d27fac8d16265 *inst/doc/other-packages.html e12a2823aadc656ebf46f870b1dc56ee *inst/doc/segmented-data.R 7b1e8d61fa1cd5457a9ccbedc183d8ac *inst/doc/segmented-data.Rmd -40ead14eaf6e2e9de91dd8916137682a *inst/doc/segmented-data.html +f0d83f69692a3d6c08d8a2c8f6df59af *inst/doc/segmented-data.html 5940bb6c0938c9bfcfd12b9779ca2ed2 *man/bal.compute.Rd a8b611be3c2b7d2f44b74be7cfb5f422 *man/bal.plot.Rd 91b9b6cd14b9124cfe441ca94430e4b5 *man/bal.tab.CBPS.Rd @@ -110,6 +110,7 @@ b8dcf5a839f4fea80ab6a6a41008639c *tests/testthat.R 46b4fd02f9d05961d1322c83448dc21a *tests/testthat/test-bal.compute.R f4fce1434d0e626fa5903fb5df06da34 *tests/testthat/test-bal.tab.data.frame.R 3f972a07ac39c7c69d2ee494fe252862 *tests/testthat/test-bal.tab.weightit.R +38e32e94273f0c812ccea5634bc6126c *tests/testthat/test-github-issues.R 607225ae73d7222803ff5ada2f46f45d *vignettes/cobalt.Rmd 655fe9c70ce39b4420fc937734a369e3 *vignettes/longitudinal-treat.Rmd c6fd2f677bf6622f922b3486ba90c4fb *vignettes/love.plot.Rmd diff --git a/NEWS.md b/NEWS.md index f4ffc61..ea912d9 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,18 @@ `cobalt` News and Updates ====== +# cobalt 4.5.3 + +* Fixed a bug when missing values were present in continuous covariates. Thanks to @vnusinfo. (#76) + +* Fixed a bug when using `bal.tab()` with the `cluster` argument supplied with the `caret` package loaded. Thanks to @BorgeJorge. (#77) + +* When `cluster` is specified, categorical variables that perfectly coincide with the cluster variable are now correctly removed. + +* Perfectly colinear variables are no longer removed (unless they are binary variables split from the same factor). This should speed up evaluation and reduce the probability of false positives being removed. + +* Variables with a single value are now more reliably categorized as "binary" in tables and calculations. + # cobalt 4.5.2 * Fixed a bug when using `bal.compute()` with a treatment variable with levels named "treated" and "control". @@ -9,7 +21,7 @@ * Fixed a bug when using `addl` without a dataset supplied. (#71) -* Fixed a bug when using `subset` to remove clusters lack full representation in all treatment groups when `cluster` is specified. (#70) +* Fixed a bug when using `subset` to remove clusters lacking full representation in all treatment groups when `cluster` is specified. (#70) # cobalt 4.5.1 diff --git a/R/bal.compute.R b/R/bal.compute.R index 3e265b1..6ba55a8 100644 --- a/R/bal.compute.R +++ b/R/bal.compute.R @@ -336,11 +336,11 @@ init_smd <- function(x, treat, s.weights = NULL, estimand = NULL, focal = NULL, focal <- treat.all } - if (is_null(focal) || pairwise) { - treatment.pairs <- combn(unique.treats, 2, simplify = FALSE) - } - else { - treatment.pairs <- lapply(setdiff(unique.treats, focal), c, focal) + treatment.pairs <- { + if (is_null(focal) || pairwise) + combn(unique.treats, 2, simplify = FALSE) + else + lapply(setdiff(unique.treats, focal), c, focal) } } else { @@ -348,7 +348,8 @@ init_smd <- function(x, treat, s.weights = NULL, estimand = NULL, focal = NULL, pairwise <- TRUE } - s.d.denom <- .get_s.d.denom(estimand = estimand, treat = treat, focal = focal, quietly = TRUE) + s.d.denom <- .get_s.d.denom(estimand = estimand, treat = treat, + focal = focal, quietly = TRUE) denoms <- .compute_s.d.denom(x, treat = treat, s.d.denom = s.d.denom, @@ -363,6 +364,7 @@ init_smd <- function(x, treat, s.weights = NULL, estimand = NULL, focal = NULL, focal = focal, pairwise = pairwise, treatment.pairs = treatment.pairs) + class(out) <- "init_smd" out } @@ -405,11 +407,11 @@ init_ks <- function(x, treat, s.weights = NULL, estimand = NULL, focal = NULL, p focal <- treat.all } - if (is_null(focal) || pairwise) { - treatment.pairs <- combn(unique.treats, 2, simplify = FALSE) - } - else { - treatment.pairs <- lapply(setdiff(unique.treats, focal), c, focal) + treatment.pairs <- { + if (is_null(focal) || pairwise) + combn(unique.treats, 2, simplify = FALSE) + else + lapply(setdiff(unique.treats, focal), c, focal) } } else { @@ -469,11 +471,11 @@ init_ovl <- function(x, treat, s.weights = NULL, estimand = NULL, focal = NULL, focal <- treat.all } - if (is_null(focal) || pairwise) { - treatment.pairs <- combn(unique.treats, 2, simplify = FALSE) - } - else { - treatment.pairs <- lapply(setdiff(unique.treats, focal), c, focal) + treatment.pairs <- { + if (is_null(focal) || pairwise) + combn(unique.treats, 2, simplify = FALSE) + else + lapply(setdiff(unique.treats, focal), c, focal) } } else { @@ -489,6 +491,7 @@ init_ovl <- function(x, treat, s.weights = NULL, estimand = NULL, focal = NULL, pairwise = pairwise, treatment.pairs = treatment.pairs, integrate = integrate) + class(out) <- "init_ovl" out } @@ -534,11 +537,11 @@ init_ent <- function(x, treat, s.weights = NULL, estimand = NULL, focal = NULL, focal <- treat.all } - if (is_null(focal) || pairwise) { - treatment.pairs <- combn(unique.treats, 2, simplify = FALSE) - } - else { - treatment.pairs <- lapply(setdiff(unique.treats, focal), c, focal) + treatment.pairs <- { + if (is_null(focal) || pairwise) + combn(unique.treats, 2, simplify = FALSE) + else + lapply(setdiff(unique.treats, focal), c, focal) } } else { @@ -554,6 +557,7 @@ init_ent <- function(x, treat, s.weights = NULL, estimand = NULL, focal = NULL, pairwise = pairwise, treatment.pairs = treatment.pairs, integrate = integrate) + class(out) <- "init_ent" out } @@ -621,6 +625,7 @@ init_mahalanobis <- function(x, treat, s.weights = NULL, estimand = NULL, focal s.weights = s.weights, s.d.denom = s.d.denom, sigma_inv = sigma_inv) + class(out) <- "init_mahalanobis" out } @@ -709,6 +714,7 @@ init_energy.dist <- function(x, treat, s.weights = NULL, estimand = NULL, focal treat = treat, unique.treats = unique.treats, focal = focal) + class(out) <- "init_energy.dist" out } @@ -754,6 +760,7 @@ init_kernel.dist <- function(x, treat, s.weights = NULL, estimand = NULL, focal T_star = T_star, s.weights = s.weights, treat = treat) + class(out) <- "init_kernel.dist" out } @@ -786,6 +793,7 @@ init_p <- function(x, treat, s.weights = NULL, ...) { bin.vars = bin.vars, s.weights = s.weights, s.d.denom = denoms) + class(out) <- "init_p" out } @@ -823,6 +831,7 @@ init_s <- function(x, treat, s.weights = NULL, ...) { bin.vars = bin.vars, s.weights = s.weights, s.d.denom = denoms) + class(out) <- "init_s" out } @@ -855,6 +864,7 @@ init_r2 <- function(x, treat, s.weights = NULL, poly = 1, int = FALSE, ...) { out <- list(treat = treat, x = x, s.weights = s.weights) + class(out) <- "init_r2" out } @@ -901,6 +911,7 @@ init_distance.cov <- function(x, treat, s.weights = NULL, ...) { out <- list(P = P, s.weights = s.weights, treat = treat) + class(out) <- "init_distance.cov" out } @@ -1032,6 +1043,7 @@ init_l1.med <- function(x, treat, s.weights = NULL, estimand = NULL, focal = NUL treat = treat, unique.treats = unique.treats, focal = focal) + class(out) <- "init_l1.med" out diff --git a/R/bal.plot.R b/R/bal.plot.R index 1edfb90..8a8a81d 100644 --- a/R/bal.plot.R +++ b/R/bal.plot.R @@ -111,25 +111,26 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, co.names <- attr(X$covs, "co.names") if (missing(var.name)) { var.name <- NULL; k = 1 - while(is_null(var.name)) { + while (is_null(var.name)) { x <- co.names[[k]] if ("isep" %nin% x[["type"]]) var.name <- x[["component"]][x[["type"]] == "base"][1] + else if (k < length(co.names)) k <- k + 1 else { - if (k < length(co.names)) k <- k + 1 - else { - .err("please specify an argument to `var.name`") - } + .err("please specify an argument to `var.name`") } } .msg(sprintf("no `var.name` was provided. Displaying balance for %s", var.name)) } + var.name_in_name <- vapply(co.names, function(x) { var.name %in% x[["component"]][x[["type"]] == "base"] && "isep" %nin% x[["type"]] }, logical(1L)) + var.name_in_name_and_factor <- vapply(seq_along(co.names), function(x) { var.name_in_name[x] && "fsep" %in% co.names[[x]][["type"]] }, logical(1L)) + if (any(var.name_in_name_and_factor)) { X$var <- unsplitfactor(as.data.frame(X$covs[,var.name_in_name_and_factor, drop = FALSE]), var.name, sep = attr(co.names, "seps")["factor"])[[1]] @@ -141,7 +142,9 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, .err(sprintf("%s is not the name of an available covariate", add_quotes(var.name, 2))) } - if (get.treat.type(X$treat) != "continuous") X$treat <- treat_vals(X$treat)[X$treat] + if (get.treat.type(X$treat) != "continuous") { + X$treat <- treat_vals(X$treat)[X$treat] + } } else { #Longitudinal @@ -159,19 +162,21 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, if ("isep" %nin% x[["type"]]) { var.name <- x[["component"]][x[["type"]] == "base"][1] } - else { - if (time < ntimes) { - if (k < length(co.names.list[[time]])) k <- k + 1 - else { - k <- 1 - time <- time + 1 - } + else if (time < ntimes) { + if (k < length(co.names.list[[time]])) { + k <- k + 1 } - else if (k < length(co.names.list[[time]])) k <- k + 1 else { - .err("please specify an argument to `var.name`") + k <- 1 + time <- time + 1 } } + else if (k < length(co.names.list[[time]])) { + k <- k + 1 + } + else { + .err("please specify an argument to `var.name`") + } } .msg(sprintf("no `var.name` was provided. Displaying balance for %s", var.name)) } @@ -183,9 +188,11 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, var.name %in% x[["component"]][x[["type"]] == "base"] && "isep" %nin% x[["type"]] }, logical(1L)) + var.name_in_name_and_factor <- var.name_in_name & vapply(co.names.list[[i]], function(x) { "fsep" %in% x[["type"]] }, logical(1L)) + if (any(var.name_in_name_and_factor)) { var.list[[i]] <- unsplitfactor(as.data.frame(X$covs.list[[i]][,var.name_in_name_and_factor, drop = FALSE]), var.name, sep = attr(co.names.list[[i]], "seps")["factor"])[[1]] @@ -197,6 +204,7 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, appears.in.time[i] <- FALSE } } + if (all(vapply(var.list, is_null, logical(1L)))) { .err(sprintf("%s is not the name of an available covariate.", add_quotes(var.name))) } @@ -210,36 +218,56 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, }) X$treat <- unlist(X$treat.list[appears.in.time]) - if (is_not_null(names(X$treat.list)[appears.in.time])) treat.names <- names(X$treat.list)[appears.in.time] - else treat.names <- which(appears.in.time) + treat.names <- { + if (is_null(names(X$treat.list)[appears.in.time])) which(appears.in.time) + else names(X$treat.list)[appears.in.time] + } + + if (is_not_null(X$weights)) { + X$weights <- do.call("rbind", lapply(seq_len(sum(appears.in.time)), function(x) X$weights)) + } + + if (is_not_null(X$s.weights)) { + X$s.weights <- do.call("c", lapply(seq_len(sum(appears.in.time)), function(x) X$s.weights)) + } + + if (is_not_null(X$cluster)) { + X$cluster <- rep(X$cluster, sum(appears.in.time)) + } - if (is_not_null(X$weights)) X$weights <- do.call("rbind", lapply(seq_len(sum(appears.in.time)), function(x) X$weights)) - if (is_not_null(X$s.weights)) X$s.weights <- do.call("c", lapply(seq_len(sum(appears.in.time)), function(x) X$s.weights)) - if (is_not_null(X$cluster)) X$cluster <- rep(X$cluster, sum(appears.in.time)) - if (is_not_null(X$imp)) X$imp <- rep(X$imp, sum(appears.in.time)) + if (is_not_null(X$imp)) { + X$imp <- rep(X$imp, sum(appears.in.time)) + } } - if (is_null(X$subclass)) { - if (NCOL(X$weights) == 1L) weight.names <- "adjusted" - else weight.names <- names(X$weights) + weight.names <- { + if (is_null(X$subclass) && NCOL(X$weights) != 1L) names(X$weights) + else "adjusted" + } + + if (is_null(X$s.weights)) { + X$s.weights <- rep(1, length(X$treat)) } - else weight.names <- "adjusted" - - if (is_null(X$s.weights)) X$s.weights <- rep(1, length(X$treat)) if (missing(which)) { if (is_not_null(args$un)) { .msg("note: `un` is deprecated; please use `which` for the same and added functionality") - if (args$un) which <- "unadjusted" - else which <- weight.names + which <- { + if (args$un) "unadjusted" + else weight.names + } } else { - if (is_null(X$weights) && is_null(X$subclass)) which <- "unadjusted" - else which <- weight.names + which <- { + if (is_null(X$weights) && is_null(X$subclass)) "unadjusted" + else weight.names + } } } else { - if (is_null(X$weights) && is_null(X$subclass)) which <- "unadjusted" + if (is_null(X$weights) && is_null(X$subclass)) { + which <- "unadjusted" + } else { which <- tolower(which) which <- match_arg(which, unique(c("adjusted", "unadjusted", "both", weight.names)), @@ -269,15 +297,19 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, facet <- "which" - if ("both" %in% which) which <- c("Unadjusted Sample", weight.names) + if ("both" %in% which) { + which <- c("Unadjusted Sample", weight.names) + } else { if ("adjusted" %in% which) which <- c(which[which != "adjusted"], weight.names) if ("unadjusted" %in% which) which <- c("Unadjusted Sample", which[which != "unadjusted"]) } which <- unique(which) - if (is_null(X$weights)) X$weights <- setNames(data.frame(rep.int(1, length(X$treat))), - "Unadjusted Sample") + if (is_null(X$weights)) { + X$weights <- setNames(data.frame(rep.int(1, length(X$treat))), + "Unadjusted Sample") + } else { if (ncol(X$weights) == 1) { which[which != "Unadjusted Sample"] <- "Adjusted Sample" @@ -321,12 +353,12 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, if (!is.numeric(which.imp)) { .err("the argument to `which.imp` must be the indices corresponding to the imputations for which distributions are to be displayed") } - if (all(which.imp %in% seq_len(nlevels(X$imp)))) { - in.imp <- !is.na(X$imp) & X$imp %in% levels(X$imp)[which.imp] - } - else { + + if (!all(which.imp %in% seq_len(nlevels(X$imp)))) { .err(paste0("The following inputs to `which.imp` do not correspond to given imputations:\n\t", word_list(which.imp[!which.imp %in% seq_len(nlevels(X$imp))])), tidy = FALSE) } + + in.imp <- !is.na(X$imp) & X$imp %in% levels(X$imp)[which.imp] facet <- c("imp", facet) } @@ -344,22 +376,23 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, } else if (!all(is.na(which.cluster))) { if (is.numeric(which.cluster)) { - if (all(which.cluster %in% seq_len(nlevels(X$cluster)))) { - in.cluster <- !is.na(X$cluster) & X$cluster %in% levels(X$cluster)[which.cluster] - } - else { + if (!all(which.cluster %in% seq_len(nlevels(X$cluster)))) { .err(paste0("The following inputs to `which.cluster` do not correspond to given clusters:\n\t", word_list(which.cluster[!which.cluster %in% seq_len(nlevels(X$cluster))])), tidy = FALSE) } + + in.cluster <- !is.na(X$cluster) & X$cluster %in% levels(X$cluster)[which.cluster] } else if (is.character(which.cluster)) { - if (all(which.cluster %in% levels(X$cluster))) { - in.cluster <- !is.na(X$cluster) & X$cluster %in% which.cluster - } - else { + if (!all(which.cluster %in% levels(X$cluster))) { .err(paste0("The following inputs to `which.cluster` do not correspond to given clusters:\n\t", word_list(which.cluster[which.cluster %nin% levels(X$cluster)])), tidy = FALSE) } + + in.cluster <- !is.na(X$cluster) & X$cluster %in% which.cluster + } + else { + .err("the argument to `which.cluster` must be the names or indices corresponding to the clusters for which distributions are to be displayed") } - else .err("the argument to `which.cluster` must be the names or indices corresponding to the clusters for which distributions are to be displayed") + facet <- c("cluster", facet) } } @@ -374,46 +407,44 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, } else { if (is.numeric(which.time)) { - if (all(which.time %in% seq_along(X$covs.list))) { - if (all(which.time %in% seq_along(X$covs.list)[appears.in.time])) { - #nothing; which.time is good - } - else if (any(which.time %in% seq_along(X$covs.list)[appears.in.time])) { - .wrn(sprintf("%s does not appear in time period %s", - add_quotes(var.name), word_list(which.time[!which.time %in% seq_along(X$covs.list)[appears.in.time]], "or"))) - which.time <- which.time[which.time %in% seq_along(X$covs.list)[appears.in.time]] - } - else { - .err(sprintf("%s does not appear in time period %s", - add_quotes(var.name), word_list(which.time, "or"))) - } - in.time <- !is.na(X$time) & X$time %in% which.time + if (!all(which.time %in% seq_along(X$covs.list))) { + .err(paste0("The following inputs to `which.time` do not correspond to given time periods:\n\t", word_list(which.time[!which.time %in% seq_along(X$covs.list)])), tidy = FALSE) + } + + if (all(which.time %in% seq_along(X$covs.list)[appears.in.time])) { + #nothing; which.time is good + } + else if (any(which.time %in% seq_along(X$covs.list)[appears.in.time])) { + .wrn(sprintf("%s does not appear in time period %s", + add_quotes(var.name), word_list(which.time[!which.time %in% seq_along(X$covs.list)[appears.in.time]], "or"))) + which.time <- which.time[which.time %in% seq_along(X$covs.list)[appears.in.time]] } else { - .err(paste0("The following inputs to `which.time` do not correspond to given time periods:\n\t", word_list(which.time[!which.time %in% seq_along(X$covs.list)])), tidy = FALSE) + .err(sprintf("%s does not appear in time period %s", + add_quotes(var.name), word_list(which.time, "or"))) } + in.time <- !is.na(X$time) & X$time %in% which.time } else if (is.character(which.time)) { - if (all(which.time %in% treat.names)) { - if (all(which.time %in% treat.names[appears.in.time])) { - #nothing; which.time is good - } - else if (any(which.time %in% treat.names[appears.in.time])) { - time.periods <- word_list(which.time[!which.time %in% treat.names[appears.in.time]], "and") - .wrn(sprintf("%s does not appear in the time period%%s corresponding to treatment%%s %s", - add_quotes(var.name), time.periods), n = sum(!which.time %in% treat.names[appears.in.time])) - which.time <- which.time[which.time %in% treat.names[appears.in.time]] - } - else { - time.periods <- word_list(which.time, "and") - .err(sprintf("%s does not appear in the time period%%s corresponding to treatment%%s %s", - add_quotes(var.name), time.periods), n = length(which.time)) - } - in.time <- !is.na(X$time) & treat.names[X$time] %in% which.time + if (!all(which.time %in% treat.names)) { + .err(paste0("The following inputs to `which.time` do not correspond to given time periods:\n\t", word_list(which.time[!which.time %in% treat.names])), tidy = FALSE) + } + + if (all(which.time %in% treat.names[appears.in.time])) { + #nothing; which.time is good + } + else if (any(which.time %in% treat.names[appears.in.time])) { + time.periods <- word_list(which.time[!which.time %in% treat.names[appears.in.time]], "and") + .wrn(sprintf("%s does not appear in the time period%%s corresponding to treatment%%s %s", + add_quotes(var.name), time.periods), n = sum(!which.time %in% treat.names[appears.in.time])) + which.time <- which.time[which.time %in% treat.names[appears.in.time]] } else { - .err(paste0("The following inputs to `which.time` do not correspond to given time periods:\n\t", word_list(which.time[!which.time %in% treat.names])), tidy = FALSE) + time.periods <- word_list(which.time, "and") + .err(sprintf("%s does not appear in the time period%%s corresponding to treatment%%s %s", + add_quotes(var.name), time.periods), n = length(which.time)) } + in.time <- !is.na(X$time) & treat.names[X$time] %in% which.time } else { .err("the argument to `which.time` must be the names or indices corresponding to the time periods for which distributions are to be displayed") @@ -492,7 +523,8 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, .err(sprintf("the argument to `which.sub` cannot be `.none` or `NA` when `which = %s`", add_quotes(which))) } - else if (is.character(which.sub)) { + + if (is.character(which.sub)) { which.sub <- which.sub[which.sub %in% sub.names] } else if (is.numeric(which.sub)) { @@ -502,8 +534,9 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, if (is_null(which.sub)) { .err("the argument to `which.sub` must be `.none`, `.all`, or the valid names or indices of subclasses") } - else if (any(which.sub.original %nin% which.sub)) { - w.l <- word_list(which.sub.original[which.sub.original %nin% which.sub]) + + if (!all(which.sub.original %in% which.sub)) { + w.l <- word_list(setdiff(which.sub.original, which.sub)) .wrn(sprintf("%s %s not correspond to any subclass in the object and will be ignored", w.l, if (attr(w.l, "plural")) "do" else "does")) } @@ -558,13 +591,11 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, smallest.cat <- names(cat.sizes)[which.min(cat.sizes)] if (is.character(bw)) { - if (is.function(get0(paste0("bw.", bw)))) { - bw <- get0(paste0("bw.", bw))(D$treat[D$var == smallest.cat]) - } - else { + if (!is.function(get0(paste0("bw.", bw)))) { .err(sprintf("%s is not an acceptable entry to `bw`. See `?stats::density` for allowable options", add_quotes(bw, "`"))) } + bw <- get0(paste0("bw.", bw))(D$treat[D$var == smallest.cat]) } #Color @@ -632,8 +663,9 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, else { #Categorical treatments (multinomial supported) D$treat <- factor(D$treat) - if (is_null(which.treat)) + if (is_null(which.treat)) { which.treat <- character(0) + } else if (is.numeric(which.treat)) { which.treat <- levels(D$treat)[seq_along(levels(D$treat)) %in% which.treat] if (is_null(which.treat)) { @@ -655,9 +687,10 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, .wrn("the argument to `which.treat` must be `NA`, `NULL`, or a vector of treatment names or indices. All treatment groups will be displayed") which.treat <- character(0) } + if (is_not_null(which.treat) && !anyNA(which.treat)) D <- D[D$treat %in% which.treat,] - for (i in names(D)[vapply(D, is.factor, logical(1L))]) D[[i]] <- factor(D[[i]]) + for (i in which(vapply(D, is.factor, logical(1L)))) D[[i]] <- factor(D[[i]]) D$weights <- ave(D[["weights"]] * D[["s.weights"]], D[c("treat", facet)], @@ -832,14 +865,14 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, plot.background = element_blank(), legend.position = position, legend.key = element_rect(fill = "white", color = "black", linewidth = .25)) - if (!isTRUE(grid)) { - bp <- bp + ggplot2::theme(panel.grid.major = element_blank(), - panel.grid.minor = element_blank()) - } - else { + if (isTRUE(grid)) { bp <- bp + ggplot2::theme(panel.grid.major = element_line(color = "gray87"), panel.grid.minor = element_line(color = "gray90")) } + else { + bp <- bp + ggplot2::theme(panel.grid.major = element_blank(), + panel.grid.minor = element_blank()) + } if (is_not_null(facet)) { if (is_not_null(facet.formula)) { @@ -855,11 +888,10 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, if (length(which) > 1) { .err("\"which\" must be in the facet formula when the `which` argument refers to more than one sample") } - else { - .msg(sprintf("Displaying balance for the %s", - if (which %in% c("Adjusted Sample", "Unadjusted Sample")) tolower(which) - else paste(which, "sample"))) - } + + .msg(sprintf("Displaying balance for the %s", + if (which %in% c("Adjusted Sample", "Unadjusted Sample")) tolower(which) + else paste(which, "sample"))) } } else if (length(facet) >= 2) { @@ -876,8 +908,12 @@ bal.plot <- function(x, var.name, ..., which, which.sub = NULL, cluster = NULL, facet.formula <- formula(facets) } } - else facet.formula <- reformulate(facet, ".") - bp <- bp + ggplot2::facet_grid(facet.formula, drop = FALSE, scales = ifelse("subclass" %in% facet, "free_x", "fixed")) + else { + facet.formula <- reformulate(facet, ".") + } + + bp <- bp + ggplot2::facet_grid(facet.formula, drop = FALSE, + scales = if ("subclass" %in% facet) "free_x" else "fixed") } bp @@ -892,7 +928,8 @@ StatDensity2 <- ggplot2::ggproto("StatDensity2", ggplot2::StatDensity, data <- ggplot2::flip_data(data, flipped_aes) if (trim) { range <- range(data$x, na.rm = TRUE) - } else { + } + else { range <- scales[[flipped_names(flipped_aes)$x]]$dimension() } diff --git a/R/balance-summary.R b/R/balance-summary.R index 7433856..1528752 100644 --- a/R/balance-summary.R +++ b/R/balance-summary.R @@ -327,7 +327,6 @@ col_w_ks <- function(mat, treat, weights = NULL, s.weights = NULL, bin.vars, sub } setNames(ks, colnames(mat)) - } #' @rdname balance-summary diff --git a/R/base.bal.tab.R b/R/base.bal.tab.R index 4f56da3..7d0b6b3 100644 --- a/R/base.bal.tab.R +++ b/R/base.bal.tab.R @@ -1,5 +1,15 @@ base.bal.tab <- function(X, ...) { - UseMethod("base.bal.tab") + fun <- switch(attr(X, "X.class"), + "binary" = base.bal.tab.binary, + "cont" = base.bal.tab.cont, + "subclass.binary" = base.bal.tab.subclass.binary, + "subclass.cont" = base.bal.tab.subclass.cont, + "cluster" = base.bal.tab.cluster, + "msm" = base.bal.tab.msm, + "multi" = base.bal.tab.multi, + "imp" = base.bal.tab.imp) + + fun(X, ...) } base.bal.tab.binary <- function(X, ...) { @@ -47,8 +57,10 @@ base.bal.tab.base <- function(X, no.adj <- FALSE if (type == "bin") check_if_zero_weights(X$weights, X$treat) else if (type == "cont") check_if_zero_weights(X$weights) + if (ncol(X$weights) == 1) names(X$weights) <- "Adj" } + if (is_null(X$s.weights)) { X$s.weights <- rep(1, length(X$treat)) } @@ -105,6 +117,7 @@ base.bal.tab.base <- function(X, treat_names = treat_names(X$treat), type = type, co.names = co.names) + class(out) <- c(paste.("bal.tab", type), "bal.tab") out diff --git a/R/class-bal.tab.cluster.R b/R/class-bal.tab.cluster.R index 3153024..b7cbd97 100644 --- a/R/class-bal.tab.cluster.R +++ b/R/class-bal.tab.cluster.R @@ -109,10 +109,12 @@ base.bal.tab.cluster <- function(X, out[["call"]] <- X$call + attr(out, "print.options") <- c(attr(out[["Cluster.Balance"]][[1]], "print.options"), list(which.cluster = which.cluster, cluster.summary = cluster.summary, cluster.fun = agg.fun)) + class(out) <- c("bal.tab.cluster", "bal.tab") out diff --git a/R/functions_for_processing.R b/R/functions_for_processing.R index 8b0a88e..357413e 100644 --- a/R/functions_for_processing.R +++ b/R/functions_for_processing.R @@ -95,12 +95,13 @@ process_treat <- function(treat, datalist = list(), keep_values = FALSE) { treat } unprocess_treat <- function(treat) { - if (inherits(treat, "processed.treat")) { - attrs <- attributes(treat) - treat <- treat_vals(treat)[as.character(treat)] - attributes(treat) <- attrs[setdiff(names(attrs), "class")] - class(treat) <- c("unprocessed.treat", class(treat_vals(treat))) - } + if (!inherits(treat, "processed.treat")) return(treat) + + attrs <- attributes(treat) + treat <- treat_vals(treat)[as.character(treat)] + attributes(treat) <- attrs[setdiff(names(attrs), "class")] + class(treat) <- c("unprocessed.treat", class(treat_vals(treat))) + treat } process_treat.list <- function(treat.list, datalist = list()) { @@ -265,8 +266,10 @@ strata2weights <- function(strata, treat, estimand = NULL, focal = NULL) { if (is_not_null(focal)) { focal <- process_focal(focal, treat) for (t in treat_vals(treat)) { - if (t == focal) weights[imat[,t]] <- 1 - else weights[imat[,t]] <- (t_by_sub[focal,]/t_by_sub[t,])[strata.c[imat[,t]]] + weights[imat[,t]] <- { + if (t == focal) 1 + else (t_by_sub[focal,]/t_by_sub[t,])[strata.c[imat[,t]]] + } } } else { @@ -301,8 +304,10 @@ strata2weights <- function(strata, treat, estimand = NULL, focal = NULL) { D <- NULL if (is_not_null(data)) D <- data if (is_mat_like(covs)) { - if (is_not_null(D)) D <- cbind(D, as.data.frame(covs)) - else D <- as.data.frame(covs) + D <- { + if (is_not_null(D)) cbind(D, as.data.frame(covs)) + else as.data.frame(covs) + } } treat_f <- try(get_treat_from_formula(formula, D, treat = treat), silent = TRUE) covs_f <- try(get_covs_from_formula(formula, D), silent = TRUE) @@ -374,148 +379,164 @@ strata2weights <- function(strata, treat, estimand = NULL, focal = NULL) { t.c } .process_val <- function(val, i, treat = NULL, covs = NULL, addl.data = list(), ...) { + + if (is.data.frame(val)) { + return(val) + } + if (is.numeric(val)) { - val.df <- setNames(data.frame(val), i) + return(setNames(data.frame(val), i)) } - else if (is.character(val)) { - addl.data <- addl.data[!vapply(addl.data, is_null, logical(1))] - if ((is_not_null(addl.data) && length(val) > max(vapply(addl.data, ncol, numeric(1)))) || (is_null(covs) && is_null(treat)) || length(val) == NROW(covs) || length(val) == length(treat)){ - val.df <- setNames(data.frame(val), i) + + if (!is.character(val)) { + if (i == "weights") { + .err("the argument supplied to `weights` must be a named list of weights, names of variables containing weights in an available data set, or objects with a `get.w()` method") } else { - if (is_not_null(addl.data)) { - val <- unique(val) - val.df <- make_df(val, nrow = max(vapply(addl.data, nrow, numeric(1)))) - not.found <- rlang::rep_named(val, FALSE) - for (v in val) { - found <- FALSE - k <- 1 - while (!found && k <= length(addl.data)) { - if (v %in% names(addl.data[[k]])) { - val.df[[v]] <- addl.data[[k]][[v]] - found <- TRUE - } - else k <- k + 1 - } - if (!found) not.found[v] <- TRUE - } - if (any(not.found)) { - .wrn(sprintf("the following variable(s) named in %s are not in any available data sets and will be ignored: %s", - add_quotes(i, "`"), paste(val[not.found]))) - val.df <- val.df[!not.found] - } - } - else { - val.df <- NULL - .wrn(sprintf("names were provided to %s, but no argument to `data` was provided. Ignoring %s", - add_quotes(i, "`"), add_quotes(i, "`"))) - } + .err(sprintf("the argument supplied to %s must be a vector, a data.frame, or the names of variables in an available data set", add_quotes(i, "`"))) } } - else if (is.data.frame(val)) { - val.df <- val + + addl.data <- addl.data[lengths(addl.data) > 0] + if ((is_null(covs) && is_null(treat)) || + length(val) == NROW(covs) || + length(val) == length(treat) || + (is_not_null(addl.data) && length(val) > max(vapply(addl.data, ncol, numeric(1))))) { + return(setNames(data.frame(val), i)) } - else { - if (i == "weights") .err("the argument supplied to `weights` must be a named list of weights, names of variables containing weights in an available data set, or objects with a `get.w()` method") - .err(sprintf("the argument supplied to %s must be a vector, a data.frame, or the names of variables in an available data set", add_quotes(i, "`"))) + + if (is_null(addl.data)) { + .wrn(sprintf("names were provided to %s, but no argument to `data` was provided. Ignoring %s", + add_quotes(i, "`"), add_quotes(i, "`"))) + return(NULL) + } + + val <- unique(val) + val.df <- make_df(val, nrow = max(vapply(addl.data, nrow, numeric(1)))) + not.found <- rlang::rep_named(val, FALSE) + for (v in val) { + found <- FALSE + k <- 1 + while (!found && k <= length(addl.data)) { + if (v %in% names(addl.data[[k]])) { + val.df[[v]] <- addl.data[[k]][[v]] + found <- TRUE + } + else k <- k + 1 + } + if (!found) not.found[v] <- TRUE + } + + if (any(not.found)) { + .wrn(sprintf("the following variable(s) named in %s are not in any available data sets and will be ignored: %s", + add_quotes(i, "`"), paste(val[not.found]))) + val.df <- val.df[!not.found] } val.df } .process_data_frame <- function(i, df, treat = NULL, covs = NULL, addl.data = list(), ...) { + if (is_null(df)) return(NULL) + val <- df val.df <- NULL - if (is_not_null(val)) { - if (i == "weights" && any(has_method(class(val), "get.w"))) { - val <- list(val) + + if (i == "weights" && any(has_method(class(val), "get.w"))) { + val <- list(val) + } + + if (!is.list(val) || is.data.frame(val)) { + return(.process_val(val, i, treat, covs, addl.data = addl.data)) + } + + if (i == "weights") { + #Use get.w() on inputs + for (x in seq_along(val)) { + val[[x]] <- process_obj(val[[x]]) + if (any(has_method(class(val[[x]]), "get.w"))) { + get.w_class <- class(val[[x]])[has_method(class(val[[x]]), "get.w")][1] + val[[x]] <- get.w(val[[x]], treat = treat, ...) + if (rlang::names2(val)[x] == "") names(val)[x] <- get.w_class + } } + } + + val.list <- lapply(val, function(x) .process_val(x, i, treat, covs, addl.data = addl.data)) + + if (!rlang::is_named(val.list)) { + .err(sprintf("all entries in `%s` must have names", i)) + } + + for (x in seq_along(val.list)) { + if (NCOL(val.list[[x]]) == 1) names(val.list[[x]]) <- names(val.list)[x] + } + + if (!all_the_same(vapply(val.list, nrow, numeric(1)))) { + .err(sprintf("not all items in `%s` have the same length", i)) + } + + setNames(do.call("cbind", val.list), + unlist(lapply(val.list, names))) + +} +.process_list <- function(i, List, ntimes, call.phrase, treat.list = list(), covs.list = list(), addl.data = list(), ...) { + if (is_null(List)) return(NULL) + + val.List <- List + + if (!is.list(val.List)) { + val.List <- list(val.List) + } + + if (length(val.List) == 1) { + val.List <- replicate(ntimes, val.List) + } + else if (length(val.List) != ntimes) { + .err(sprintf("the argument to %s must be a list of the same length as the number of time points in %s", add_quotes(i, "`"), call.phrase)) + } + + for (ti in seq_along(val.List)) { + val <- val.List[[ti]] + if (is_null(val)) next + + val.df <- NULL + if (is.list(val) && !is.data.frame(val)) { - if (i == "weights") { - #Use get.w() on inputs - for (x in seq_along(val)) { - val[[x]] <- process_obj(val[[x]]) - if (any(has_method(class(val[[x]]), "get.w"))) { - get.w_class <- class(val[[x]])[has_method(class(val[[x]]), "get.w")][1] - val[[x]] <- get.w(val[[x]], treat = treat, ...) - if (rlang::names2(val)[x] == "") names(val)[x] <- get.w_class - } - } - val.list <- lapply(val, function(x) .process_val(x, i, treat, covs, addl.data = addl.data)) - } - else { - val.list <- lapply(val, function(x) .process_val(x, i, treat, covs, addl.data = addl.data)) - } + val.list <- lapply(val, function(x) .process_val(x, strsplit(i, ".list", fixed = TRUE)[[1]], treat.list[[ti]], covs.list[[ti]], addl.data = addl.data)) - if (!rlang::is_named(val.list)) { - .err(sprintf("all entries in %s must have names", add_quotes(i, "`"))) + if (!all_the_same(vapply(val.list, nrow, numeric(1)))) { + .err(sprintf("not all items in `%s` have the same length", i)) } - val.list <- lapply(seq_along(val.list), function(x) { + + for (x in val.list) { if (NCOL(val.list[[x]]) == 1) names(val.list[[x]]) <- names(val.list)[x] - val.list[[x]] - }) - if (!all_the_same(vapply(val.list, nrow, numeric(1)))) { - .err(sprintf("not all items in %s have the same length", add_quotes(i, "`"))) } + val.df <- setNames(do.call("cbind", val.list), - unlist(lapply(val.list, names))) + vapply(val.list, names, character(1))) } else { - val.df <- .process_val(val, i, treat, covs, addl.data = addl.data) + val.df <- .process_val(val, strsplit(i, ".list", fixed = TRUE)[[1]], treat.list[[ti]], covs.list[[ti]], addl.data = addl.data) } - } - val.df -} -.process_list <- function(i, List, ntimes, call.phrase, treat.list = list(), covs.list = list(), addl.data = list(), ...) { - val.List <- List - if (is_not_null(val.List)) { - if (!is.list(val.List)) { - val.List <- list(val.List) - } - if (length(val.List) == 1) { - val.List <- replicate(ntimes, val.List) - } - else if (length(val.List) != ntimes) { - .err(sprintf("the argument to %s must be a list of the same length as the number of time points in %s", add_quotes(i, "`"), call.phrase)) - } - - for (ti in seq_along(val.List)) { - val <- val.List[[ti]] - val.df <- NULL - if (is_not_null(val)) { - if (is.list(val) && !is.data.frame(val)) { - val.list <- lapply(val, function(x) .process_val(x, strsplit(i, ".list", fixed = TRUE)[[1]], treat.list[[ti]], covs.list[[ti]], addl.data = addl.data)) - val.list <- lapply(seq_along(val.list), function(x) { - if (NCOL(val.list[[x]]) == 1) names(val.list[[x]]) <- names(val.list)[x] - val.list[[x]] - }) - if (!all_the_same(vapply(val.list, nrow, numeric(1)))) { - .err(sprintf("not all items in %s have the same length", add_quotes(i, "`"))) - } - - val.df <- setNames(do.call("cbind", val.list), - vapply(val.list, names, character(1))) - } - else { - val.df <- .process_val(val, strsplit(i, ".list", fixed = TRUE)[[1]], treat.list[[ti]], covs.list[[ti]], addl.data = addl.data) - } - if (is_not_null(val.df) && anyNA(val.df)) { - .err(sprintf("missing values exist in %s", add_quotes(i, "`"))) - } - val.List[[ti]] <- val.df - } - - } - val.df.lengths <- vapply(val.List[lengths(val.List) > 0], nrow, numeric(1)) - if (max(val.df.lengths) != min(val.df.lengths)) { - .err(sprintf("all columns in %s need to have the same number of rows", add_quotes(i, "`"))) + + if (is_not_null(val.df) && anyNA(val.df)) { + .err(sprintf("missing values exist in %s", add_quotes(i, "`"))) } + + val.List[[ti]] <- val.df + } + + val.df.lengths <- vapply(val.List[lengths(val.List) > 0], nrow, numeric(1)) + + if (max(val.df.lengths) != min(val.df.lengths)) { + .err(sprintf("all columns in `%s` need to have the same number of rows", i)) } val.List } .process_vector <- function(vec, name = deparse1(substitute(vec)), which = name, datalist = list(), missing.okay = FALSE) { bad.vec <- FALSE - if (is.character(vec) && length(vec)==1L && is_not_null(datalist)) { + if (is.character(vec) && length(vec) == 1L && is_not_null(datalist)) { for (i in seq_along(datalist)) { if (is.matrix(datalist[[i]]) && vec %in% colnames(datalist[[i]])) { vec <- datalist[[i]][,vec] @@ -593,7 +614,8 @@ strata2weights <- function(strata, treat, estimand = NULL, focal = NULL) { .err(sprintf("`estimand` must have length 1 or equal to the number of valid sets of weights, which is %s", NCOL(weights))) } - else s.d.denom <- vapply(try.estimand, switch, character(1L), + + s.d.denom <- vapply(try.estimand, switch, character(1L), ATT = treat_vals(treat)[treat_names(treat)["treated"]], ATC = treat_vals(treat)[treat_names(treat)["control"]], ATO = "weighted", @@ -732,6 +754,7 @@ strata2weights <- function(strata, treat, estimand = NULL, focal = NULL) { if (lengths["weighted.weights"] == 0) weighted.weights <- rep(1, NROW(mat)) if (lengths["s.weights"] == 0) s.weights <- rep(1, NROW(mat)) + if (lengths["subset"] == 0) subset <- rep(TRUE, NROW(mat)) else if (anyNA(as.logical(subset))) .err("`subset` must be a logical vector") @@ -845,7 +868,7 @@ strata2weights <- function(strata, treat, estimand = NULL, focal = NULL) { else if (get.treat.type(X[["treat"]]) == "continuous") X.class <- "cont" else probably.a.bug() - class(X) <- X.class + attr(X, "X.class") <- X.class X } @@ -1042,6 +1065,7 @@ length_imp_process <- function(vectors = NULL, data.frames = NULL, lists = NULL, else { problematic <- lengths > 0 & lengths != length(imp) } + if (any(problematic)) { .err(sprintf("%s must have the same number of observations as `imp`", word_list(names(problematic)[problematic], quotes = "`"))) @@ -1243,7 +1267,7 @@ process_addl <- function(addl = NULL, datalist = list()) { else if (is.character(addl)) { addl <- reformulate(addl) } - + addl_t.c <- { if (is.data.frame(addl)) { .use_tc_fd(data = data, covs = addl, @@ -1300,7 +1324,7 @@ process_distance <- function(distance = NULL, datalist = list(), obj.distance = needs.treat = FALSE, needs.covs = FALSE) } } - + distance <- distance_t.c[["covs"]] if (is_not_null(obj.distance) && !all(is.na(obj.distance))) { @@ -1674,7 +1698,13 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " if (null_or_error(evaled.var)) { evaled.var <- try(eval(str2expression(add_quotes(rownames(ttfactors)[i], "`")), data, env), silent = TRUE) if (null_or_error(evaled.var)) { - .err(conditionMessage(attr(evaled.var, "condition"))) + ee <- conditionMessage(attr(evaled.var, "condition")) + if (startsWith(ee, "object '") && endsWith(ee, "' not found")) { + v <- sub("object '([^']+)' not found", "\\1", ee) + .err(sprintf("the variable \"%s\" cannot be found. Be sure it is entered correctly or supply a dataset that contains this varialble to `data`", v)) + } + + .err(ee) } rownames(ttfactors)[i] <- add_quotes(rownames(ttfactors)[i], "`") } @@ -1692,8 +1722,8 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " ttvars <- vapply(attr(tt.covs, "variables"), deparse1, character(1L))[-1] } - tryCatch({tmpcovs <- stats::model.frame(tt.covs, data, na.action = "na.pass")}, - error = function(e) {.err(conditionMessage(e))}) + tryCatch({tmpcovs <- model.frame2(tt.covs, data)}, + error = function(e) .err(conditionMessage(e))) for (i in ttvars) { if (is_binary(tmpcovs[[i]])) tmpcovs[[i]] <- factor(tmpcovs[[i]], nmax = 2) @@ -1708,8 +1738,8 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " #Process NAs: make NA variables if (anyNA(tmpcovs)) { - has_NA <- anyNA_col(tmpcovs) - for (i in rev(colnames(tmpcovs)[has_NA])) { + vars_with_NA <- colnames(tmpcovs)[anyNA_col(tmpcovs)] + for (i in rev(vars_with_NA)) { #Find which of ttlabels i first appears, and put `i: ` after it for (x in seq_along(colnames(ttfactors))) { if (i %in% c(colnames(ttfactors)[x], all.vars(str2expression(colnames(ttfactors)[x])))) { @@ -1729,10 +1759,10 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " ttfactors <- attr(tt.covs, "factors") ttvars <- vapply(attr(tt.covs, "variables"), deparse1, character(1L))[-1] - na_vars <- paste0(colnames(tmpcovs)[has_NA], ":") + na_vars <- paste0(vars_with_NA, ":") - tryCatch({tmpcovs <- stats::model.frame(tt.covs, tmpcovs, na.action = "na.pass")}, - error = function(e) {.err(conditionMessage(e))}) + tryCatch({tmpcovs <- model.frame2(tt.covs, tmpcovs)}, + error = function(e) .err(conditionMessage(e))) for (i in setdiff(ttvars, na_vars)) { if (is_binary(tmpcovs[[i]])) tmpcovs[[i]] <- factor(tmpcovs[[i]], nmax = 2) @@ -1774,8 +1804,7 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " ttvars <- vapply(attr(tt.covs, "variables"), deparse1, character(1L))[-1] } - tmpcovs <- model.frame(tt.covs, data = tmpcovs, drop.unused.levels = TRUE, - na.action = "na.pass") + tmpcovs <- model.frame2(tt.covs, data = tmpcovs, drop.unused.levels = TRUE) #Check for infinite values covs.with.inf <- vapply(tmpcovs, function(x) is.numeric(x) && any(!is.na(x) & !is.finite(x)), logical(1L)) @@ -1827,15 +1856,16 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " if (base %in% na_vars) { base <- substr(base, 1, nchar(base) - 5) list(component = c(base, ":"), - type = c("base", "na")) + type = c("base", "na")) + } + else if (is_null(x[[i]])) { + list(component = base, + type = "base") } - out <- list(component = base, - type = "base") - if (is_not_null(x[[i]])) { - out[["component"]] <- c(out[["component"]], factor_sep, x[[i]]) - out[["type"]] <- c(out[["type"]], "fsep", "level") + else { + list(component = c(base, factor_sep, x[[i]]), + type = c("base", "fsep", "level")) } - out })) }) @@ -1901,7 +1931,7 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " co.names <- c(co.names, addl.co.names) } - #Drop single_value or colinear with cluster + #Drop colinear with treat if (drop) { test.treat <- is_not_null(treat) && get.treat.type(treat) != "continuous" @@ -1910,15 +1940,15 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " drop_vars <- vapply(seq_len(ncol(covs)), function(i) { # if (all_the_same(covs[,i], na.rm = FALSE)) return(TRUE) - # else if (anyNA(covs[,i])) return(FALSE) if (test.treat && equivalent.factors2(covs[,i], treat)) return(TRUE) - # else if (test.cluster && equivalent.factors2(covs[,i], cluster)) return(TRUE) #Note: doesn't work with multi-cat cluster vars due to splitting FALSE }, logical(1L)) - covs <- covs[,!drop_vars, drop = FALSE] - co.names[drop_vars] <- NULL + if (any(drop_vars)) { + covs <- covs[,!drop_vars, drop = FALSE] + co.names[drop_vars] <- NULL + } } C_list <- list(C = covs) @@ -1946,32 +1976,57 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " for (i in seq_along(co_list[["C"]])) { if (!is.na(drop_0_1[i])) next - if ("isep" %nin% co_list[["C"]][[i]][["type"]] && "fsep" %in% co_list[["C"]][[i]][["type"]]) { - which_are_buddies <- which(vapply(co_list[["C"]], function(j) "isep" %nin% j[["type"]] && - "fsep" %in% j[["type"]] && - j[["component"]][j[["type"]] == "base"][1] == co_list[["C"]][[i]][["component"]][co_list[["C"]][[i]][["type"]] == "base"][1], - logical(1L))) - buddies <- co_list[["C"]][which_are_buddies] - if (length(buddies) <= 2) { - buddy_is_0 <- vapply(buddies, function(x) x[["component"]][x[["type"]] == "level"] %in% c("0", "FALSE"), logical(1L)) - buddy_is_1 <- vapply(buddies, function(x) x[["component"]][x[["type"]] == "level"] %in% c("1", "TRUE"), logical(1L)) - if (all(buddy_is_0 | buddy_is_1)) { - drop_0_1[which_are_buddies[buddy_is_0]] <- TRUE - drop_0_1[which_are_buddies[buddy_is_1]] <- FALSE - - buddy_1 <- which_are_buddies[buddy_is_1] - co_list[["C"]][[buddy_1]][["component"]] <- co_list[["C"]][[buddy_1]][["component"]][co_list[["C"]][[buddy_1]][["type"]] == "base"][1] - co_list[["C"]][[buddy_1]][["type"]] <- "base" - } - else drop_0_1[which_are_buddies] <- c(TRUE, FALSE) + if ("isep" %in% co_list[["C"]][[i]][["type"]] || "fsep" %nin% co_list[["C"]][[i]][["type"]]) { + drop_0_1[i] <- FALSE + next + } + + which_are_buddies <- which(vapply(co_list[["C"]], function(j) "isep" %nin% j[["type"]] && + "fsep" %in% j[["type"]] && + j[["component"]][j[["type"]] == "base"][1] == co_list[["C"]][[i]][["component"]][co_list[["C"]][[i]][["type"]] == "base"][1], + logical(1L))) + + buddies <- co_list[["C"]][which_are_buddies] + + if (!is.null(cluster)) { + #Remove variables perfectly redundant with cluster + unsplit_var <- unsplitfactor(as.data.frame(C_list[["C"]][, which_are_buddies, drop = FALSE]), + buddies[[1]][["component"]][buddies[[1]][["type"]] == "base"], + sep = attr(co_list[["C"]], "seps")["factor"])[[1]] + tab <- table(cluster, unsplit_var) + tab <- tab[rowSums(tab == 0) < ncol(tab),, + drop = FALSE] + + if (all(rowSums(tab > 0) == 1)) { + drop_0_1[which_are_buddies] <- TRUE + next } - else drop_0_1[which_are_buddies] <- FALSE } - else drop_0_1[i] <- FALSE + + if (length(buddies) > 2) { + drop_0_1[which_are_buddies] <- FALSE + next + } + + buddy_is_0 <- vapply(buddies, function(x) x[["component"]][x[["type"]] == "level"] %in% c("0", "FALSE"), logical(1L)) + buddy_is_1 <- vapply(buddies, function(x) x[["component"]][x[["type"]] == "level"] %in% c("1", "TRUE"), logical(1L)) + if (!all(buddy_is_0 | buddy_is_1)) { + drop_0_1[which_are_buddies] <- c(TRUE, FALSE) + next + } + + drop_0_1[which_are_buddies[buddy_is_0]] <- TRUE + drop_0_1[which_are_buddies[buddy_is_1]] <- FALSE + + buddy_1 <- which_are_buddies[buddy_is_1] + co_list[["C"]][[buddy_1]][["component"]] <- co_list[["C"]][[buddy_1]][["component"]][co_list[["C"]][[buddy_1]][["type"]] == "base"][1] + co_list[["C"]][[buddy_1]][["type"]] <- "base" } - C_list[["C"]] <- C_list[["C"]][,!drop_0_1, drop = FALSE] - co_list[["C"]][drop_0_1] <- NULL + if (any(drop_0_1)) { + C_list[["C"]] <- C_list[["C"]][,!drop_0_1, drop = FALSE] + co_list[["C"]][drop_0_1] <- NULL + } } names(co_list[["C"]]) <- vapply(co_list[["C"]], function(x) paste0(x[["component"]], collapse = ""), character(1L)) @@ -1981,9 +2036,11 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " distance.co.names <- attr(distance, "co.names") - same.name <- names(distance.co.names) %in% do.call("c", lapply(co_list, names)) - distance <- distance[,!same.name, drop = FALSE] - distance.co.names[same.name] <- NULL + same.name <- names(distance.co.names) %in% unlist(lapply(co_list, names)) + if (any(same.name)) { + distance <- distance[,!same.name, drop = FALSE] + distance.co.names[same.name] <- NULL + } unique.distance.names <- unique(names(distance.co.names)) distance <- distance[,unique.distance.names, drop = FALSE] @@ -1991,7 +2048,6 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " C_list[["distance"]] <- distance co_list[["distance"]] <- distance.co.names - } # C_list <- clear_null(C_list) @@ -2002,13 +2058,14 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " for (x in setdiff(names(C_list), "distance")) { #Remove self-redundant variables - if (getOption("cobalt_remove_perfect_col", ncol(C_list[[x]]) <= 900)) { - redundant.var.indices <- find_perfect_col(C_list[[x]]) - if (is_not_null(redundant.var.indices)) { - C_list[[x]] <- C_list[[x]][,-redundant.var.indices, drop = FALSE] - co_list[[x]][redundant.var.indices] <- NULL - } - } + # if (getOption("cobalt_remove_perfect_col", ncol(C_list[[x]]) <= 900)) { + # + # redundant.var.indices <- find_perfect_col(C_list[[x]]) + # if (is_not_null(redundant.var.indices)) { + # C_list[[x]] <- C_list[[x]][,-redundant.var.indices, drop = FALSE] + # co_list[[x]][redundant.var.indices] <- NULL + # } + # } if (x != "C") { #Remove variables in C that have same name as other variables if (any(dups <- names(co_list[["C"]]) %in% co_list[[x]])) { @@ -2016,13 +2073,13 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " co_list[["C"]][dups] <- NULL } #Remove variables in C that are redundant with current piece - if (getOption("cobalt_remove_perfect_col", max(ncol(C_list[[x]]), ncol(C_list[["C"]])) <= 900)) { - redundant.var.indices <- find_perfect_col(C_list[["C"]], C_list[[x]]) - if (is_not_null(redundant.var.indices)) { - C_list[["C"]] <- C_list[["C"]][,-redundant.var.indices, drop = FALSE] - co_list[["C"]][redundant.var.indices] <- NULL - } - } + # if (getOption("cobalt_remove_perfect_col", max(ncol(C_list[[x]]), ncol(C_list[["C"]])) <= 900)) { + # redundant.var.indices <- find_perfect_col(C_list[["C"]], C_list[[x]]) + # if (is_not_null(redundant.var.indices)) { + # C_list[["C"]] <- C_list[["C"]][,-redundant.var.indices, drop = FALSE] + # co_list[["C"]][redundant.var.indices] <- NULL + # } + # } } } } @@ -2100,7 +2157,9 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " } } } - else poly_terms <- poly_co.names <- list() + else { + poly_terms <- poly_co.names <- list() + } if (int && nd > 1) { int_terms <- int_co.names <- make_list(1) @@ -2128,7 +2187,9 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " type = c(co.names[[x[1]]][["type"]], "isep", co.names[[x[2]]][["type"]]))) else int_co.names[[1]] <- vapply(ints_to_make, paste, character(1L), collapse = sep) } - else int_terms <- int_co.names <- list() + else { + int_terms <- int_co.names <- list() + } out <- do.call("cbind", c(poly_terms, int_terms)) out_co.names <- c(do.call("c", poly_co.names), do.call("c", int_co.names)) @@ -2145,7 +2206,9 @@ get_covs_from_formula <- function(f, data = NULL, factor_sep = "_", int_sep = " #Remove single values single_value <- apply(out, 2, all_the_same) out <- out[, !single_value, drop = FALSE] - if (cn && is_not_null(out)) attr(out, "co.names") <- out_co.names[!single_value] + if (cn && is_not_null(out)) { + attr(out, "co.names") <- out_co.names[!single_value] + } out } @@ -2210,7 +2273,7 @@ df_clean <- function(df) { .get_types <- function(C) { vapply(colnames(C), function(x) { if (any(attr(C, "distance.names") == x)) "Distance" - else if (is_binary(C[,x])) "Binary" + else if (all_the_same(C[,x]) || is_binary(C[,x])) "Binary" else "Contin." }, character(1)) } @@ -2233,6 +2296,27 @@ find_perfect_col <- function(C1, C2 = NULL, fun = stats::cor) { which(colSums(s) > 0) } +model.frame2 <- function(formula, data = NULL, na.action = "na.pass", ...) { + withCallingHandlers(force(data), + error = function(e) .err(conditionMessage(e)), + warning = function(w) .wrn(conditionMessage(w))) + + tryCatch({ + mf <- stats::model.frame(formula, data = data, na.action = na.action, ...) + }, + error = function(e) { + ee <- conditionMessage(e) + if (startsWith(ee, "object '") && endsWith(ee, "' not found")) { + v <- sub("object '([^']+)' not found", "\\1", ee) + .err(sprintf("the variable \"%s\" cannot be found. Be sure it is entered correctly or supply a dataset that contains this varialble to `data`", v)) + } + + .err(ee) + }) + + mf +} + #base.bal.tab check_if_zero_weights <- function(weights.df, treat = NULL) { #Checks if all weights are zero in each treat group for each set of weights @@ -2351,8 +2435,7 @@ balance.table <- function(C, type, weights = NULL, treat, continuous, binary, s. s.weights = rep(1, length(treat)), abs = FALSE, no.adj = FALSE, var_types = NULL, s.d.denom.list = NULL, quick = TRUE, ...) { #C=frame of variables, including distance; distance name (if any) stores in attr(C, "distance.name") - if (no.adj) weight.names <- "Adj" - else weight.names <- names(weights) + weight.names <- if (no.adj) "Adj" else names(weights) if (is_not_null(s.d.denom.list)) names(s.d.denom.list) <- weight.names if (is_not_null(s.d.denom)) names(s.d.denom) <- weight.names @@ -2747,8 +2830,10 @@ balance.summary <- function(bal.tab.list, agg.funs, include.times = FALSE) { B[["Type"]] <- unlist(lapply(Brownames, function(x) na.rem(unique(vapply(balance.list, function(y) if (x %in% rownames(y)) y[[x, "Type"]] else NA_character_, character(1))))), use.names = FALSE) - if (include.times) B[["Times"]] <- vapply(Brownames, function(x) paste(seq_along(balance.list)[vapply(balance.list, function(y) x %in% rownames(y), logical(1L))], collapse = ", "), character(1))[Brownames] - else B[["Times"]] <- NULL + B[["Times"]] <- { + if (include.times) vapply(Brownames, function(x) paste(seq_along(balance.list)[vapply(balance.list, function(y) x %in% rownames(y), logical(1L))], collapse = ", "), character(1))[Brownames] + else NULL + } for (Agg.Fun in Agg.Funs) { for (s in compute[compute %in% all_STATS(type)]) { @@ -2760,10 +2845,8 @@ balance.summary <- function(bal.tab.list, agg.funs, include.times = FALSE) { else get(tolower(Agg.Fun))(x, ...) } for (sample in c("Un", weight.names)) { - if (sample == "Un" || !no.adj) { #Only fill in "stat".Adj if no.adj = FALSE - if (sample != "Un" || !get_from_STATS("adj_only")[s]) { - B[[paste.(Agg.Fun, STATS[[s]]$bal.tab_column_prefix, sample)]] <- vapply(Brownames, function(x) agg(unlist(lapply(balance.list, function(y) if (x %in% rownames(y)) abs0(y[[x, paste.(STATS[[s]]$bal.tab_column_prefix, sample)]]))), na.rm = TRUE), numeric(1)) - } + if ((sample == "Un" || !no.adj) && (sample != "Un" || !get_from_STATS("adj_only")[s])) { + B[[paste.(Agg.Fun, STATS[[s]]$bal.tab_column_prefix, sample)]] <- vapply(Brownames, function(x) agg(unlist(lapply(balance.list, function(y) if (x %in% rownames(y)) abs0(y[[x, paste.(STATS[[s]]$bal.tab_column_prefix, sample)]]))), na.rm = TRUE), numeric(1)) } } } @@ -2786,7 +2869,10 @@ balance.summary <- function(bal.tab.list, agg.funs, include.times = FALSE) { } } } - if (no.adj || length(weight.names) <= 1) names(B)[names(B) == paste.(STATS[[s]]$Threshold, "Adj")] <- STATS[[s]]$Threshold + + if (no.adj || length(weight.names) <= 1) { + names(B)[names(B) == paste.(STATS[[s]]$Threshold, "Adj")] <- STATS[[s]]$Threshold + } } } diff --git a/R/love.plot.R b/R/love.plot.R index 0113138..0700650 100644 --- a/R/love.plot.R +++ b/R/love.plot.R @@ -142,7 +142,7 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, if (any(names(m) %pin% "thresholds")) m["thresholds"] <- list(NULL) - return(m) + m } if (deparse1(.call[["x"]][[1]]) %in% c("bal.tab", "cobalt::bal.tab", methods("bal.tab"))) { #if x i bal.tab call @@ -221,7 +221,9 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, }), list(variable.names = row.names(x[["Balance.Across.Subclass"]])))) } - else subclass.names <- sub.B <- NULL + else { + subclass.names <- sub.B <- NULL + } attr(x, "print.options")$weight.names <- "Adj" subtitle <- "Across Subclasses" @@ -246,9 +248,11 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, for (b in seq_along(B_list)) { B_list[[b]][["variable.names"]] <- factor(rownames(B_list[[b]]), levels = rownames(B_list[[b]])) for (i in facet) { - if (i == "imp") B_list[[b]][[i]] <- factor(paste("Imputation:", facet_mat[b, i]), - levels = paste("Imputation:", sort(unique(as.numeric(facet_mat[b, i]))))) - else B_list[[b]][[i]] <- facet_mat[b, i] + B_list[[b]][[i]] <- { + if (i == "imp") factor(paste("Imputation:", facet_mat[b, i]), + levels = paste("Imputation:", sort(unique(as.numeric(facet_mat[b, i]))))) + else facet_mat[b, i] + } } } @@ -309,20 +313,26 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, B_list[[b]] <- B_list[[b]][cols.to.keep] } - B_stack <- do.call(rbind, c(B_list, list(make.row.names = FALSE))) + B_stack <- do.call("rbind", c(B_list, list(make.row.names = FALSE))) if (is_not_null(agg.over)) { if (is_null(agg.fun)) { - if (any(c("treat", "time") %in% agg.over)) agg.fun <- "max" - else agg.fun <- "range" + agg.fun <- { + if (any(c("treat", "time") %in% agg.over)) "max" + else "range" + } } agg.fun <- tolower(agg.fun) Agg.Fun <- firstup(agg.fun <- match_arg(agg.fun, c("range", "max", "mean"))) if (agg.fun == "max") abs <- TRUE - if (abs) B_stack[stat.cols] <- lapply(stat.cols, function(sc) abs_(B_stack[[sc]], ratio = startsWith(sc, "V.Ratio"))) + if (abs) { + B_stack[stat.cols] <- lapply(stat.cols, function(sc) { + abs_(B_stack[[sc]], ratio = startsWith(sc, "V.Ratio")) + }) + } - facet <- setdiff(facet, agg.over) + facet <- setdiff(facet, agg.over) aggregate_B <- function(FUN, B) { B_agged <- aggregate(B[stat.cols], @@ -357,12 +367,12 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, } one.level.facet <- facet[vapply(B[facet], all_the_same, logical(1L))] - if (is_not_null(one.level.facet)) { - subtitle2 <- paste(vapply(one.level.facet, function(olf) { - paste(firstup(olf), B[1,olf], sep = ": ") + subtitle2 <- { + if (is_null(one.level.facet)) NULL + else paste(vapply(one.level.facet, function(olf) { + paste(firstup(olf), B[1, olf], sep = ": ") }, character(1L)), collapse = ", ") } - else subtitle2 <- NULL B[names(B) %in% one.level.facet] <- NULL @@ -439,17 +449,15 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, else .wrn("`var.names` is a vector, but its values are unnamed") } else if (is.list(var.names)) { - if (all(vapply(var.names, chk::vld_character_or_factor, logical(1L)))) { - if (is_not_null(names(var.names))) { - new.labels <- unlist(var.names) #already a list - } - else { - .wrn("`var.names` is a list, but its values are unnamed") - } - } - else { + if (!all(vapply(var.names, chk::vld_character_or_factor, logical(1L)))) { .wrn("`var.names` is a list, but its values are not the new names of the variables") } + else if (is_null(names(var.names))) { + .wrn("`var.names` is a list, but its values are unnamed") + } + else{ + new.labels <- unlist(var.names) #already a list + } } else { .wrn("the argument to `var.names` is not one of the accepted structures and will be ignored.\n See `?love.plot` for details") @@ -493,6 +501,7 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, } distance.names <- as.character(unique(B[["variable.names"]][B[["Type"]] == "Distance"], nmax = sum(B[["Type"]] == "Distance"))) + if (drop.distance) { B <- B[B[["variable.names"]] %nin% distance.names, , drop = FALSE] } @@ -537,12 +546,12 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, } else sample.names <- NULL - if (is_not_null(sample.names)) { - if (length(sample.names) == ntypes - 1) { - sample.names <- c("Unadjusted", sample.names) - } + if (is_null(sample.names)) { + sample.names <- original.sample.names + } + else if (length(sample.names) == ntypes - 1) { + sample.names <- c("Unadjusted", sample.names) } - else sample.names <- original.sample.names names(sample.names) <- original.sample.names #Process limits @@ -569,9 +578,10 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, #Setting up appearance #Alpha (transparency) - if (is.numeric(alpha[1]) && - !anyNA(alpha[1]) && - between(alpha[1], c(0,1))) alpha <- alpha[1] + if (is.numeric(alpha[1]) && !anyNA(alpha[1]) && + between(alpha[1], c(0,1))) { + alpha <- alpha[1] + } else { .wrn("the argument to `alpha` must be a number between 0 and 1. Using 1 instead") alpha <- 1 @@ -581,13 +591,17 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, if (is_not_null(args[["colours"]])) colors <- args[["colours"]] if (is_null(colors)) { - if (shapes.ok(shapes, ntypes) && length(shapes) > 1 && length(shapes) == ntypes) { - colors <- rep("black", ntypes) + colors <- { + if (shapes.ok(shapes, ntypes) && length(shapes) > 1 && length(shapes) == ntypes) { + rep("black", ntypes) + } + else gg_color_hue(ntypes) } - else colors <- gg_color_hue(ntypes) } else { - if (length(colors) == 1) colors <- rep(colors, ntypes) + if (length(colors) == 1) { + colors <- rep(colors, ntypes) + } else if (length(colors) > ntypes) { colors <- colors[seq_len(ntypes)] .wrn(sprintf("only using first %s value%%s in `colors`", ntypes), @@ -612,13 +626,12 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, if (is_null(shapes)) { shapes <- assign.shapes(colors) } - else { - #check shapes - if (!shapes.ok(shapes, ntypes)) { - .wrn(sprintf("the argument to `shape` must be %s valid shape%%s. See `?love.plot` for more information.\nUsing default shapes instead", ntypes), n = ntypes) - shapes <- assign.shapes(colors) - } - else if (length(shapes) == 1) shapes <- rep(shapes, ntypes) + else if (!shapes.ok(shapes, ntypes)) { + .wrn(sprintf("the argument to `shape` must be %s valid shape%%s. See `?love.plot` for more information.\nUsing default shapes instead", ntypes), n = ntypes) + shapes <- assign.shapes(colors) + } + else if (length(shapes) == 1) { + shapes <- rep(shapes, ntypes) } names(shapes) <- sample.names @@ -638,11 +651,10 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, # stroke <- .8*size - if (is_not_null(facet)) { - if (is_not_null(var.order) && !inherits(var.order, "love.plot") && tolower(var.order) != "alphabetical") { + if (is_not_null(facet) && is_not_null(var.order) && + !inherits(var.order, "love.plot") && tolower(var.order) != "alphabetical") { .wrn("`var.order` cannot be set with faceted plots (unless \"alphabetical\"). Ignoring `var.order`") var.order <- NULL - } } agg.range <- isTRUE(Agg.Fun == "Range") @@ -661,6 +673,7 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, if (!is.vector(themes, "list")) { themes <- list(themes) } + if (any(vapply(themes, function(t) !inherits(t, "theme") || !inherits(t, "gg"), logical(1L)))) { @@ -745,19 +758,20 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, if ("time" %in% facet) { covnames0 <- make_list(length(unique(SS[["time"]]))) for (i in seq_along(covnames0)) { - if (i == 1) { - covnames0[[i]] <- sort(levels(SS[["var"]][SS[["time"]] == i])) - } - else { - covnames0[[i]] <- sort(setdiff(levels(SS[["var"]][SS[["time"]] == i]), unlist(covnames0[seq_along(covnames0) < i]))) + covnames0[[i]] <- { + if (i == 1) sort(levels(SS[["var"]][SS[["time"]] == i])) + else sort(setdiff(levels(SS[["var"]][SS[["time"]] == i]), + unlist(covnames0[seq_along(covnames0) < i]))) } } covnames <- unlist(covnames0) } - else covnames <- sort(levels(SS[["var"]])) + else { + covnames <- sort(levels(SS[["var"]])) + } + SS[["var"]] <- factor(SS[["var"]], levels = c(rev(setdiff(covnames, distance.names)), sort(distance.names, decreasing = TRUE))) - } else if (var.order %in% ua) { if (var.order %in% gone) { @@ -791,7 +805,6 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, SS[["stat"]] <- SS[["mean.stat"]] } else { - SS <- do.call("rbind", lapply(col.sample.names, function(w) data.frame(var = variable.names, @@ -853,16 +866,18 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, if ("time" %in% facet) { covnames0 <- make_list(length(unique(SS[["time"]]))) for (i in seq_along(covnames0)) { - if (i == 1) { - covnames0[[i]] <- sort(levels(SS[["var"]][SS[["time"]] == i])) - } - else { - covnames0[[i]] <- sort(setdiff(levels(SS[["var"]][SS[["time"]] == i]), unlist(covnames0[seq_along(covnames0) < i]))) + covnames0[[i]] <- { + if (i == 1) sort(levels(SS[["var"]][SS[["time"]] == i])) + else sort(setdiff(levels(SS[["var"]][SS[["time"]] == i]), + unlist(covnames0[seq_along(covnames0) < i]))) } } covnames <- unlist(covnames0) } - else covnames <- sort(levels(SS[["var"]])) + else { + covnames <- sort(levels(SS[["var"]])) + } + SS.var.levels <- c(rev(setdiff(covnames, distance.names)), sort(distance.names, decreasing = TRUE)) } @@ -919,8 +934,10 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, #Make the plot baseline.xintercept <- STATS[[s]]$baseline.xintercept - if (is_not_null(thresholds[[s]])) threshold.xintercepts <- STATS[[s]]$threshold.xintercepts(thresholds[[s]], abs) - else threshold.xintercepts <- NULL + threshold.xintercepts <- { + if (is_null(thresholds[[s]])) NULL + else STATS[[s]]$threshold.xintercepts(thresholds[[s]], abs) + } xlab <- STATS[[s]]$love.plot_xlab(abs = abs, binary = attr(x, "print.options")$binary, continuous = attr(x, "print.options")$continuous, var_type = B[["Type"]], @@ -947,7 +964,6 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, if (identical(scale_Statistics, ggplot2::scale_x_log10)) limits[[s]][limits[[s]] <= 1e-2] <- 1e-2 if (agg.range) { - if (any(SS[["mean.stat"]] < limits[[s]][1], na.rm = TRUE)) { SS[["on.border"]][SS[["mean.stat"]] < limits[[s]][1]] <- TRUE SS[["mean.stat"]][SS[["mean.stat"]] < limits[[s]][1]] <- limits[[s]][1] @@ -1069,6 +1085,7 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, lp <- lp + ggplot2::geom_hline(linetype = 1, color = "black", yintercept = nunique(SS[["var"]]) - length(distance.names) + .5) } + if (apply.limits) { lp <- lp + scale_Statistics(limits = limits[[s]], expand = c(0, 0)) } @@ -1112,14 +1129,16 @@ love.plot <- function(x, stats, abs, agg.fun = NULL, plots.to.combine <- plot.list for (i in seq_along(plots.to.combine)) { - if (i > 1) { - plots.to.combine[[i]] <- plots.to.combine[[i]] + - ggplot2::theme(axis.text.y=element_blank(), - axis.ticks.y=element_blank(), - legend.position = "none") - } - else { - plots.to.combine[[i]] <- plots.to.combine[[i]] + ggplot2::theme(legend.position = "none") + plots.to.combine[[i]] <- { + if (i > 1) { + plots.to.combine[[i]] + + ggplot2::theme(axis.text.y=element_blank(), + axis.ticks.y=element_blank(), + legend.position = "none") + } + else { + plots.to.combine[[i]] + ggplot2::theme(legend.position = "none") + } } if (is_not_null(labels)) { @@ -1276,28 +1295,31 @@ ggarrange_simple <- function(plots, nrow = NULL, ncol = NULL) { left <- g[seq(min(tt), max(tt)), seq(1, min(ll) - 1)] right <- g[seq(min(tt), max(tt)), seq(max(ll) + 1, ncol(g))] fg <- grid::nullGrob() - if (length(left)) { + if (is_not_null(left)) { lg <- gtable::gtable_add_cols(left, grid::unit(1, "null"), 0) lg <- gtable::gtable_add_grob(lg, fg, 1, l = 1) } else { lg <- fg } - if (length(right)) { + + if (is_not_null(right)) { rg <- gtable::gtable_add_cols(right, grid::unit(1, "null")) rg <- gtable::gtable_add_grob(rg, fg, 1, l = ncol(rg)) } else { rg <- fg } - if (length(top)) { + + if (is_not_null(top)) { tg <- gtable::gtable_add_rows(top, grid::unit(1, "null"), 0) tg <- gtable::gtable_add_grob(tg, fg, t = 1, l = 1) } else { tg <- fg } - if (length(bottom)) { + + if (is_not_null(bottom)) { bg <- gtable::gtable_add_rows(bottom, grid::unit(1, "null"), -1) bg <- gtable::gtable_add_grob(bg, fg, t = nrow(bg), l = 1) @@ -1305,6 +1327,7 @@ ggarrange_simple <- function(plots, nrow = NULL, ncol = NULL) { else { bg <- fg } + grobs <- list(fg, tg, fg, lg, core, rg, fg, bg, fg) widths <- grid::unit.c(sum(left$widths), width, sum(right$widths)) heights <- grid::unit.c(sum(top$heights), height, sum(bottom$heights)) @@ -1381,20 +1404,20 @@ unpack_bal.tab <- function(b) { EName <- names(NList)[A] if (is.list(Element)) { - if (A == 1) { - Before <- NULL - } else { - Before <- NList[1:(A - 1)] + Before <- { + if (A == 1) NULL + else NList[1:(A - 1)] } - if (A == B) { - After <- NULL - } else { - After <- NList[(A + 1):B] + + After <- { + if (A == B) NULL + else NList[(A + 1):B] } if (is.data.frame(Element)) { Jump <- 1 - } else { + } + else { NList[[A]] <- NULL Element <- LinearizeNestedList(Element, NameSep) @@ -1402,9 +1425,11 @@ unpack_bal.tab <- function(b) { Jump <- length(Element) NList <- c(Before, Element, After) } - } else { + } + else { Jump <- 1 } + A <- A + Jump B <- length(NList) } @@ -1412,7 +1437,7 @@ unpack_bal.tab <- function(b) { NList } - namesep <- paste(c("|", do.call(c, lapply(1:20, function(i) sample(LETTERS, 1))), "|"), collapse = "") + namesep <- paste(c("|", unlist(lapply(1:20, function(i) sample(LETTERS, 1))), "|"), collapse = "") out_ <- unpack_bal.tab_internal(b) out <- LinearizeNestedList(out_, NameSep = namesep) diff --git a/R/splitfactor.R b/R/splitfactor.R index 9e348b7..e4e8949 100644 --- a/R/splitfactor.R +++ b/R/splitfactor.R @@ -52,7 +52,9 @@ #' #' @rdname splitfactor #' @export -splitfactor <- function(data, var.name, drop.level = NULL, drop.first = TRUE, drop.singleton = FALSE, drop.na = TRUE, sep = "_", replace = TRUE, split.with = NULL, check = TRUE) { +splitfactor <- function(data, var.name, drop.level = NULL, drop.first = TRUE, + drop.singleton = FALSE, drop.na = TRUE, sep = "_", + replace = TRUE, split.with = NULL, check = TRUE) { #Splits factor into multiple (0, 1) indicators, replacing original factor in dataset. #Retains all categories unless only 2 levels, in which case only the second level is retained. #If variable only has one level, will delete. @@ -435,11 +437,11 @@ unsplitfactor <- function(data, var.name, dropped.level = NULL, dropped.na = TRU .err("the variables in `data` selected based on `var.name` and `sep` do not seem to form a split variable based on the row sums") } - k.levels <- if (v.is.split) { - unlist(lapply(var.to.combine, function(x) attr(x, "level", TRUE))) - } - else { - substr(names(var.to.combine), 1 + nchar(paste0(v, sep[v])), nchar(names(var.to.combine))) + k.levels <- { + if (v.is.split) + unlist(lapply(var.to.combine, attr, "level", TRUE)) + else + substr(names(var.to.combine), 1 + nchar(paste0(v, sep[v])), nchar(names(var.to.combine))) } k <- rep(NA_character_, nrow(data)) diff --git a/build/cobalt.pdf b/build/cobalt.pdf index eb9a38cef1434d63b44cb40bb78b65019e72b584..eb183ea383ecae7fa690262270192bd8e3a0f5d9 100644 GIT binary patch delta 11182 zcmaiZV{{$N*Kbd3n)!N*tXI1M2&HR#clXu+Q3~;MglQrXJa#6g9O4Mc?%)*O9_*sUGA`4H zF}Y*guHZIYHB_DSJx(>!HqoH@NLsfwBFhT-lB8SxIPV#iGjtmbJ?^43S2U(T)h4==Nh13%T<&Ej{ zaCLh%Fo=vUhGyhCq0E{Z;~ze1e z*`)wX`^vvhihS=Yr@ltIiyk|!|F)c^{>eRNnd?I%Dbc{wpktq|0R-3nLN<}w7xCeN zV(l0sQn5MD0oQeACM+e&h)zG|{x_kG;7EN^cnmpzW_r8D_fiyvGG+GD3KZbAYJ2KD70CM`r6lV&(l4EY^l@@1 zS9^O>y=ME{i|82I8)Wb%a}lu7i$mS^lIbKnjwPM zk+Er*;WEmTED|hWGPweo$GR8^MdybeiOKJI-=UFY^jA_YccHKo{9*6_d?`Kp00zjZ zo}T>*5039-_3r{$c`nv`db|U&X_|pxJ9AU`Fvrj%)6eQNHw!Vd1GVjnNp|pF z6ey|5qFK&2Sur_iHc0$>@cif1KNhq`^+X&%n*g-T+rU5|%%>a^08FB>RThXGfAQ7p zb>%8KE-)JA*-x}`oXbGd0RKG~86G0``3bFj@mGtJko+G?hAn>VR;*vd&P%u_y@z_F z*g`einBpJM%eGA{6`SDB&6%!bQBX+MP)t4qm&REgrm83=7qVhcnDTd7!kgSeX_{Z$>uSCqp6O=O2imco%a;<8+}+4 zwazHMlAKDpC-WIxe6oO z3lpDz5^OcW$8A)w%jmNxKg%BhKDMVGfMIH2-XeTa68xuU}u>DebsvmdM(=xmt4JU#ji4mGh3vRBf0T2R%#oj?*H_ zP*xZa33&}noP3>LtczV7Ij1&M(i`&mK#boPw3J#Z6yypyeQDIx>9t83)ug{LZ%STD zx_RfL$f7J#(cKBFVepvKm;dNB-7ER+a=<$bOqHW_D%Ck!Vy3Im@X_K&x37Sa--+o3 zZ1?_*>zT%r*c6xvo^>F8z}qsZzvL^)ykwdBX>qMKuH~=b<)V9JRp0b=Z}w{JPeos9 zCJW?K%kZ1oko)k*pfm3B37{!ZGn$Ej)L+5AbKKJlXGiCr7Zgye=jIpZ_T@(_8MkvH zvSF*w37-(90lfdoU5z>`;FZsK-V0hcW>;+H8?4A?e$;^{aEl-OvtV6$x8Y^;znU_r zV3dL0o~tD8xtOI*&E-6ed0E$7%8zl-8D!ZeP}H(@Xj?4(5rd*QF>4rTi!8-C4;^+= zw_5ht(>WPZlRYVEII*OI2|uPajM+|_8}nF4T4p;J<6P^qLtq{3Mrt>iU~xz|8;r#r z_@=NruH}hosXuTZ(1X)x#h2LwA9Ot}aXjf#0nFjnBu^Nrfb7OholQO#+7=klFQyB@ zDJa7aI>_yQ3ED9`gB&3=NN1^iL^Stfd^g|7DwKh{uusNxe(_S9i@ESE&Du->Pom52 zaE*m@uYUXN5c1I!z&2DE+%A+l_G><@YkQXQl)MalI?2_HY972RN*3bcWqP8&ow5YN zbj*CDK7HRIieFSO(?|$nYEUG7#SYAqn1ut@aJW-pDs_(yKSzNesuWlqI2B8Z+l|M_ zIWA*q{@GbNB^C|obM$Xzp8yo)X$p#~GK*Y&UZ{)KVooT z#D|}UK0%|K(Q?{VQ(_7*+TxnBWQ#XjS-PY=qoUTiMr@_QyOt-Wc~}!Odn$bzewdeQz|TuM^nCF) zI`>g@rWJj*y<`uWTWfpDa+gvMXYJ%HHP%OS1d^D*RxHoo-OKEtj$asie+>|VZka}Vm%`>b)2ch&-e)n z?pOF(GA|QOAu!dgH5U7acZT-1pp2IrNj0thEBqLR0Hhzm* z&HCrMpB=~1oKHTKZ0hZ8U!$LOZgx+d3>(~ZR&Ytx%Pd27-aHTs_L@!RR-!AKSk-NG zy)dfBO;sw%qiGvumWaTiog~61mh2S~O^_&(X|=ZX27}i10gEPu0)=sVR^R-Eurr`; zSL*E_`HF!fZzlNdYBZ|`Yy5q)hR-v2tj6C{vX90xv)f^AM@T1rtjUur#en#(J*YIYYs^Y zm~`7-OEz%rLO$hL^IubTbu*ilTw~f7Fd{rYZ9o~#h-rtNAHR1xk0}N0Ki{bx)EKE& zxHO&&`YKhaMpa@hf%TSB-j;3iE-S^xz+*h8Xgwi0xsybodt{)ep}H`1SB2oFMxFUG^gJb)SAN`VKAD1|zvX$6fxtj|g!RaEth+ zzefpYI=KG2iqUXW0OI2(yd3wHn?I&(HD&IQr(0;Tv?U`lTklYJF|AnEXD5Aqmn;&w zZOzmgc;175mZFnqOZ%4W!OTJagHBWzI-oQBw$CiFWa|Aj=e-VtqlnpOW*E}oX4hJF zeC%Tet9}IkC5@0KhTsMB*sO3w`sqi=sS4^-OGp$N8{2yw*iy@4s8cLiM7Zwd%VU8V zqFJ-y`fFhdZ}rqiNV7hV=*v8$hEn#Xqx>8-rX#c?vLn1Bx+AP3sw2XupA&OZN|5-{ zuD|~O0TBIuXUs`SLHx`A8%PV1UwZdnV@`@}3608EZ%{)vD))DPreqrJzYmM-k~;uX zTZ*a2V+|-2iVx~Danl-ak`^s5(_H<=-gTJYQ@Yw(4xo3=E!9V_Dqf6I za;&|a7hEdt>^(Z$4N~S%4IzZ~6=&eU`#M?(6Xa13!<$(el_Of`D@O$lC?7vv$Bgsf z-6=k9rBa8wGj11?8kOm5YEtojd2Wf6VilD1uHrBD>Sb58rsvW@P$hapM(Y9kn<*GX zkJJ;Hn0D_^n8y+QJWn6TXTg3(>Sg#{tL2(=ZeerA34?@Wwp$Fw0kWvnlN}!*TAYd| zeEnJ9w3`$hiis4ElO5Q+3B-a&?GyMT1aH_ry4WBv=wd;7_~71RP?iNG4*D5tYjG_^pE|Pln3-2%RXn zKqzx!a!ES)QlN(!i1X&f&Wt{SAZSQ75sz*^7iuzqz$x#7(&qHD&+n%j5|Sfovfi-3 z5IX6T+_ggnZS8pUT`@lG>BvNQ=O@)F6sBJxs#Q!(Wzr*oDkb}V&EELI|8UEsWgGc? z!c@bpCZ7ER189;6J)CkV@S!ZG(Tj9tv{j=M;k||YNMBO6RnH}J9Y|vZUz#^dNbQl+=oT?M> z+p7@O$FPLiFx84v1CdPySh`4qirNfE2fQGP|bIq?`?1h7JK!vJf9to_>Z2>jH0SCT`$)M8?Z z7$|3Q@-1}Ondk|kk;q{OfKTTnEDnK$4gmfv8Vuhx;>aPf5VIJ=52#|~(x*LomHpay z$s-BfJ$`uKQGQ~v3Bu8&WMUB^DQ;ltBOt&E6`COsZsiLBqrVUMp(fTe07nGlWkM%v zV8vD<>>3_pM9rtX0J4*$3(L8dVfXKbaVK;X+f{|)euh&%2*$X3 z{Z~%x>@Z^*nPD&pfB=l30FH5Ef!hH2u@MMqB?TWm0Y?4~jRJx|@^GN!fdY&U5=~k^ z+UhkSJ`&1D85PONK#-aF6_7=n;fIl-QpV=Bt z`!84s!pC1UTg=1aj)ql{nLYba_UxSf>z(J6wl@;mgjZv1&(`{(P}#qc+!Rp{JYUtm{2Q zK+ii{U4*w{+w-X*cb9-6Y#z*wrP#6zDE=o3fo8C9XmKAYKQIa6XpL) zb`PFy=aT)qvCDQfdu((36&PhHCZUb0Se_$+ut6T@^BOt4n8gN>H{1ZxkRvh zucf|;AERE})ra8ATPQ_b4gz~N^WnnZV3dKV7z#M!7XMgaJPEm<=(Yp~JSL=_9o-NZ zk8W-G2qz#$h?NQkvQfvA^|Eya1w1#igKH^5qtM0ZS1=4S&@pTxy{yY2Z^s+OI29_N zWzFaOSy}e3W7@3$c=4Nt*>Qhsk$frEX(09E&AnLdx}z;aN~$3KZZ~ktTX~XDLG0eN z)kYkt)nUM0@5ViESKeH`kqSBTdA0f?yl%Oz#{^b=4X`nms6`;oTTj)c(-E8`!RHcj7p}%odjEje&mQ5j z`yPsCC)e8-D!CX>4&vA~Hy{CVT%n!tono!6K>cJM(t|?c7zgyG>_9*^#VU94+lENZ zyY8GXYP;@c*7K?QYB)iKgd@d8ox49?LDBx=*(Ri#Io@?7+*}hp@VF;-HX$3rFAX*I zmSA+&y}OvR^QRYg!3@HHW^FqdsB^9kii$(BX{O^BQPG?Qs;xM4svV`$h^9EN?o^-~ zBhQ(G#r-8$*W?iNcL);_f93jjOkqN(&dNv9OeFEktk4Ny6^GIo+qqQl_;;C;o1h>5yBd#lFaXJ2hPr3v+^CCq&cv>m3onv5ahuaEQMX=NHWi zOxThTn7;6vTcSAlA1|yoc_7|=3~2n zzrQ~-w;NiDRJ=CgqI|qV#UI#3?Qhe(<%MF}&6u#+%#-ShRQm5lWH7>Lrof zHB7Z_MtDxc=#)8!s+gI*o~?=YpCReEG$hy|ZVk4vz|Ve0rcl zwc$v`xMVbjCnP&-jsw?8O+l;iL7ee9GT9yFOG^o_ioR~p%I3_;Tu`-NGx&ISc(|L- zzZC(H)-Yd-6;+}<2N_k}p6z>& z!nNX+@>ZR%{BE9YUTvOkF3A4qAnG38Kp$kf^u@=h!rO54@b@+OvE-~54jL^Vx?0vP z6$J4h#uxU3ixaeX|KpAIE3lB @%Q%Vjt&m)3JSs@3Enm$FIuUIwbhnr)i3LQmuN zXfrn>&y)MhWV+<-kEfwO)lXio%T1%Vqvg8IGfVq>_nx;l>n|o&;~uv;5uR23$Ba)v zaq78~Z$Ck0Mq|ebo{le25L+P|0bj>&j}R!2USxyy>#3GV;GoU80e8c5ENq@4`;-9l zrFWNik(_AOd@@4YN1}DG?Pe(H;_f;8r%}Xpi%(vgerB&NgGgThi(lT&L{FTAp2CvJ zs`^u-V(i+`D~v6XQqG64W8C|tf5PRnR0>9$p@}tTHLTyEJY`KNPdY^06{jY)bwiv8 z*n0+g&e14?tE5vu_k}j5$DU`$ppKvoG5bvKjqN4}{wxpntqROnIQ`ZDZAWlk*tofQ zI|JLl0q{WnlpbIq6JtB)_-fn0sK37>l{ z8_K($v`a%7^*WXq+H?5k9#CAwbw#0})&AM{%#7}?Al&vB57d|jF1AR86;+G|d(7ng z=;KXYH5J$BL|II#!uMGpl9bqCj(l;vGx7KxiX>kLkAkeG&zO^z3&U^7{<78hff&vq z7|wvd1ofAo{}Rk!f^EidhLd1G=3--K<74OI263{d7-qr|{7*)+et26A!nrA#IKeQc&# z_9&%Y(iytEZ$IyF@!GimapcpwHZywDdH(F=wejqF|IN*NJb0_WC6^k2jWXrOPbq_B z0{qNjiU5suOhlRfso@ih7{dZaej)EDjrfCXZofHWE{ukG6(&>s^Z<_r4R=S{WvMFlT>W(*0exR9H{Dq zS_!szRk1+M1c#80B-2NjEF)GkuH@Qf&luF`E#X?Q_j?&v*R71~f!5%kLo9B+Ehr`d zpi(9+p3y@JP~}NxUF;nK$tlEDDrV?*+`$ti`lDVklbs`!BI8Q2UHXiggQvT0r7~VJ zKeW{!5`EdM3H_$i>=0xJM{N&Vs2@EB7FwH(^4;7mXuO-Ws{tzx@cBzZE$HZ*6oLUm zY=}ym41$3Rn|$qlDU>w5vTWR#^5Ugo7+4?$xU(w9nW!mi6g9J#bPUL*(@|tQSqIxO zjb}$CUehcBvK6CUdEgL}Cl6o$2%| zaK~y^*K^haKb!~->(t^F?1Hquabt_q3tRWg*9*D0zKS*A+D0wfx&|KD+y$oEp!KcK zF5Ne)JOWdBO3r#{L*)dJD2w>ewhH(V^Yi&oP4h63qqMEJWLY7-akG4_0zdI_$6>RO zp381)(B^xIv{5U7iI@ygpKU(LQmLjZOBHgNfB;h{ROicM59ClKm>`8=Du?uzv{asE zPKjY=Pa>5mg!nzNqt$2eZ@}+F6tjY6^Rag{&|XXmvTL3OX7IvSakNgBGJm`CUP}&F)#_UW% zc@ZLaAW!xcMS}o>%V$rW$}SxTBit!aT3_Al<4ulaJ#Ni3Tb4@$l4c)~HuABtkey#t z4I)n;$j-m&0?97$w1zl*_Hm4L2(khY_@lA7D{G&I)C3{wPbDj!VGce-B;m4e8NLfM z8pqt`O(G30NFUdKW zuIB}&<~&+pQvM+62O+k=E&PF7{m#}0-IB_0^yqryM10n5&;oyNpka+ue_-YgKv&yG z-+0|;;)gsE32H4RxZ9@nTz(m?WUg--TfR~jKuVVW3c9p7diiy%;=xqpV&;ewK}oef zs5

#I!sCOKX?XeKY$wf1eMl)FilcWj>m4YP!&y@KqlJy-`kW-zZrM`NtRJ&6?zD z-A>!b^4*I60v2Vi3P&%`2?u`Tx_h>16%dOb$r-v}+t#u*Sd@h`K(sYq{%+{JM41pm zh#!^iQFG-qSRu;|Z9rrz{*JyzauknQufcAr?jJzj&^~1d^B;?3D&7AF+)*fZ31v?& zRuAD`NR1Mo8kjv{h<|9Z&gpwi#Pelh95UmvWNCs}8-<6XQ4a&XFDQ#F_P0Y=ZvGbI zq8NzC$Y6J%hbjM-Wnj_Sr%HcmwdE$}^Z^b&vafg@*vJ&oczukiIn#M=tkw)n zfxEF1fG@_(m4V|mn3^Tuwy>vMh59ATDf$~D16}(2HQiyGdR!L)UdH%#vWHvG1r=Gw za_o@X;VHvKcsdg|S+{D*4rq+}NeU3$&>xsge>Dc7Cu?0##FKqqcm=py217psOY>OR~=H&ErA=TzVky$_37q)pc+M${WG^-y|xtl zXWUfuS`pI-MpsEY6_qa2U|X=Py*KC2@Yg9MZNzq!OQ`{gxxbBvt&XgHCoXepv1xj^ z4I^AxFVLCvQh5M~+gg$L)b(0sJqY|8z*R@hQ5r?{6wbE{l)n|qm@VzCTq}BO3z4erO=ZBK^=Ve?kbuTb2Ji@7w9Kf9Wlh}FZHkIsLUf<37*TZFhlR^fTEpCN+rE0CL z3vqDM!_3+gphCS}WeG=dAYZU>Gd^67F}f6#Z<-W7^>Lz%pl~bdNKqDY$?+7i&zPdF zuNow0=sD&JoP{J$Z;*%2z!)4rdJrOu&(i*;2BLmwZ!#2e_IFnv-&9m*pe1tKWLatR z2fSWNZIn?H1{AuOcTYNgZKzrSL&VyakKKyy-rS4t(e?p(a&Px0TzbenJ=>Z#+r-8N zkhlIRkR4z&=2FX;*G_S*_B{;EwYLJ}OOg#69AV^>3F~5Qn>elH!3JQHas9hjV za$IIfSCNV#_1<^@y=?em239Eaq;{3R2E;V>iA>6Mq8`{2MQ76QocvLwpnq0$rR;&O zU1T0{rFrx=ji1jklPIr-R2y! zR{6WsFuHVI4V2pH*+}7i~M>xE7r?Lm*V?GLA(O4rmkIwXW|TsWSs+ z9LQL@C0o#})b86L*vu?_FrS`*ul!)u>1g1I@p7R$MKB?0AkAz3dOWqS&2bO7-VMrUpwbCu3I3$1cieaa?;HJ;;I zA|vKWR`sk*<@Dez8bxiD~$>>Kf6A@Qi-0uv4fC5ovGC* z^$3eS3#gs1zCEO%OqY1%?7gbJoUk#d55NHZPgR7c>AXn;eQ0lgK$w@YIw82F8(nbi zQ(XY2-(AoW6EC1bMk7O5<)kF z*N2yX-^Rx=xus`GR9OAP0+w+8lMfy;;|iv=r_| z@lPu`j(aOt!wZ)_=31tEDjdDu3|fD&EY&Hpj7=A_wJfEY>!)eNs7@>13ruH*9OXF+ zzeOE%^Y_---L$yDXxdP5>&@z`p38I?Jx`Sm3A^lcP?e3dHiD|ri`O#*3Xq;>Pt>lZ z#)-M@XHEQP%I*a=B0QNi>ea{Lx&M3-E@drRUonbij8}A_e%?-GwrwgMM`^67CM^6n zJY3oK(Z7)S=u6rCTmobYxoh@C)mdhohCAhN*e)(Oiqo0d=WTSUD<&~~Pc}F_M9qe@ z#;=-d3RE5TpLYMLVSOapFr2FA)er)WymM5YodN)+}?_VR(y@i!^;14bQSfAqrW2Oc{>gL|1n zKSn)wAm48a3;MC$Qn{lfT)_OTSD_&n&hCH|xmq}42DB#hNBNq^U#G&(tbI-y5#D5r zk$Z-;dsuL-K@uzyNpcB$a$<@iMrbK9wQ!UW%NpQths|(vz`;a^;)oEf)5>_}UhAp^ z7;l&v8^vrPZ|8{1nqx_x43Ci ze%8T}{ww%*fc!^Vp^e*LDeb;gT1nZiuBJKQ6nvo}|MWek`B+sUO)oYrE67{wmDG}EVBn;sIWF1pvu|9l23zCqwPtQVYB!PBUNcf6E(O}^hS1) zIa-V4|F!;aC_h4-!11e4o`WI6JihQB?;H#jra9uy=lY!XDs>MeVt*xqs&OT8H1og_@Nd zr)Rb2>ER!~-?~Jiysy+rNIz5MyxWnG%2OGMU`dBe4>xxbNQcY}3lunhqmE+H!IPGr zIjFK9oT}w|a!?{6RVrZhWsFuVoSOU^UXWnZ@LB-kPpTW3+&cI+0`A~!A8iW>ad&VH z9fF7m^v|%OUv6PbybKddwBL_Y2wxOY_?}cqynGVs4`D^Ue;27KgRxk!}MxOrtNU~=+2g&{pB8%*%H)n&JG5)W% zxQ`?i`Px{R$uFn|0k02>UK?rDn6J_=>2D`oVa#3W-}v`7*9W(VkYVgRB0R*J1F_$K d2Lue$r-MPml6)g%qQWzYXo8`ZJymvfvTBCPFsOaXPO6{;kh%HDq_J zFe;(qmrggem(bW!hM}HhD^DBSM{g}Y+LWyn$CRT-KGEW>&uI&YbbF4cH4#0jVSo{F zgaMOC0c3K7-QHDGQkY-(f4j z7gQZ*d}z{P`s(U@pGfLN>#6dIlyNL`9p?EKXH(HgZdqgsm=`E=r5_e19Q^=Ut_jjY zJ0u&4D*UrA>ZnyP$ro?>MelUX@9p?HErbR2iDvfP2{I4qsw0 zXl{IRyxQ;NbH$j&%OlOkvd8*J+>hml$@~7{Wn2yGZ2Py0@pj6oK78p<_lZ_wa^o50 zGC5KL;^ap{g9zj0kn=GPsVIQdgP<*0dz~CJ2Oiz!Mi*TkxsgAec8x;PxJve^HqZ7$ z!ie*3#ezSarI1vz_P9CCX_JpB6V2fKgPYUQk_OmY16J{vy@Go7W{#&&-h`KftBQ9t5U}QGtHh{M-AUWyR05yieni0X$}qY zbd%cGI(X`6VV{}0*w^O0vu?Lg^?ZGyYDvK#+dY+SnM6ktNt~}l;$-5>gCW5rTVnxV z^RDXsiwa}x7(@^TtcUvhcVv-J$M>T};VVdWLaUh$HV%RXPjfZbwxjiU$TUC{va=aXw~W-~Z>51HUC6lvM*69K2dYT8TSeJ|r&)dEa_Zk7WceF@1oA)HY|v_0 z-n`dMs@IGgeGzc=&JOuz5(_)|9I1R-k7)|;;Ux9GO>?7M65Nj#<1H@)9=UbV+r-aCY2oPNG$rfr`RTJVUn)u;1 zgAOpI?`Xg6lCz|yIbvXOZzVN6X+ggne!tGpLYKt6O69rFk0{m3%<=MUeJ0hoa>)Uj zltE!7yTaf?aq$3W458@&S%1rh6h`3XJC0zKXxqvor6`LMC|^<+yZpEOZ)nMCa|%C% zJ@&Yl(+`L&Drg}_6f0_zR*qK-4^9EYua1{um%~}B=abLG`#Dfi-!JShg<#0Z z9tgqY#xTCCOE0Z`@42hFi0s^IraCT96Xkoie*c)}P z!s1jk4EU7Di_FJuBW00Ln(R4~eQJ>n3!PJIYLHh+xF_D*HddY7LmRi$=7Q|!Qx~~{ zUffE2&VVT_HKlUE**-K%(AWBsI&Tpv^i0G&t(Ew2j&&Rp`8Z*XEJ9N~R4T`%oZ1?87BZb#i&RJJ6=!$5i=^(z5>a5x^Cg~`@&CAkbA?uvdLq9!6+6cPkhXN6PoefK>Y5@ z@bjS(r~BR9aL;2a$RFYD-3u3IcnJ$9I!Ta=(6M$Va#dD&J#e>Lv4X0-S4^Mrg2ZyN5?z0ENI0wCI}t| z*|(*D=)pO3?j;=TxW{>qN)%>~uT8!&eeI+CQ<%U35z6S9EUMX`$MvhK!~3rsbu61Q zLMLV)#+ek-PA!T2(fqj}%S>Y1ZyCRqSRFrRDTr^WWr-_rXvd8gb#T*^HDkXrR|3Ph zvNRf{t+h44rRP}-sWU~SPBQx1)5x|#7Gd`Q5fj>F@Iq{M>y{z*T5$HLKm~h++P7g} z0!JU_OMb2&8iyWI@;@3lerVlSzx_UN95vW^uNe?>EFqzrB3a56e55(*!MfV_3`X zwM9Ix$*U?*VNI|Tr+-()$IX~)g-ON)TF4R5psJC0=2!=LLRP`5B@vj@$gx#8S!TFL z(G6!KDo7sWi`n9a8tXO~a{^`|hKq!vHxk9@e)Y@H6n(=g`1aBpW3CGMD=-c>j)1~U zu%Xsb-B`2WAxY;KMf5^JT%yhvA8k5x4xUS}R-oDhBnt-9mSlo^Z?sqB^%oQ3Tl{?N z9Pb#FAHAK@iqmXJsH$T5aSl*l%&9M!Yy#mUz*7IV}=I~dJWRybq`Gc7{Ct}EW#K|cIyMl?#5-9q5 zPqDs;=J$vFnk|*l{RspVI}=zHL+A8z3~7%9in0dXiNZ5r8$zy+1rB-Hi+vXP`SXVh z1^AOg5jR|>ZfW>RE4&D~3wnBXcBgqLLbG zejUd*5RuXigH>2y(EFaaH00KoPz=bpwP@aJLp2P<0jPF47*IR_lSWW7>?XN^LsP$Y zhjj8V90yRZb+{-WpfUB-s8h*pFt~5~Fie`P1+cwzdg=+o&{9uPpD5c>S17Y8)&5qO zZz?V+EqU)#1DfwVM&qg}%upI}cuef3E0aPO(#T;Lfm=wfrS zDl08(%`<&c=u!Wp!dx=XR#;9PJFZ~!9DPQPyEy4nmjN73Xr1C~nySX1qZ>X42x(c_eX&pW)*WT+SI0oy@of-jb(=02{J7;Y=AOgioX%|s^7lQrD;e$C?-?j(Rc4H7d@?6k-3x;pVkGx9l&r7@2} zM+e)%ey7fqhXcXkYCTGSR_qzn;pC#trSx3jt-CJ{|Czi^Q#EjX>2Z#JI?GhgVn$k<`C+@$bXmWg)Id!9S%zR~6dEA@S5*hUlRn00xEEL1z=vQLaG zb%Vh|E2;|}tTgz1Fgg~$@Nv7@qaCA9C=IauyaqF!mi6@NVx))2avvMJqgg@uxo7wf zzW2TmXmYFl5svs`JD-q~QMfAWSaQCO#c4eEQs=tud800-Zq*39P!Q zEe|l3OgV}ytErM{QfQKEQfiWIQf!iMQg-iaK%Ax)1YYU)x&BW8{FVIrZV{(x1#|y5 zuuyd-Tz&0BMr2vr6;dsJ+${83t+bqP_iSrreAn^&vav12?k!89m{+ZyX3L*;8;2}E zT(CAv4%(giIWu@r4sCp0 z#JVxJeh$}BU)-Ae8nyWIQ9nGKf#19_QGowd>WtUASKA5ZZB~}XVb&t?i6%`tp%KAq zJR5BdVY)GSO;p8_LJJH^`mWM)UTpKIqUfRRXvO2YyeY`q(&tQfe5B=Sj?$p&8dTYo z&M#4j*=-VEvW0V#a~c3A%mh#E6=MU~`bmM#e|ET~G%7}sosJXat5B2?e76SIksFLn zduW^xO4Aw?A{uAI)wg{YzzTMHh8~87$0{Sq!%$WRQ$qFkk|B_!Y$}VD&8qcg@1~OS zw)R%>P!bu6BJQ>o_jCw4)yCO!C8eLh7XC`#NFn0I?++tHgnxt5{W4fU$UY0OIwRhb zu{d$^K~qhb3<`-^YfqfuyxAjiL+SjWJcWi2`h(#d8p0<8e}*1_03S=Ovy?c;`F@98 zYaQnyqezU6Zc4>>DI9d#_JV|8Ni^7_e`EaL}vOt2| z%c`+E8-mP{lz9Q$*vrk9X)>cSw>15S_g^6)s)Ls?GrgGnNydiX*9Yy--HQofL8|vW5W=wqd?k8-e3TBb;QXP>i5<1J_`!(XE1dWrLdA{1WzK?IjkH@Lv#jq>f6r0)TW6cEsr_OS3z*?uh5QY9}1X+1~f_x^OI zgTfBlPe8yw71M{v_G8t-i4@FG5VKw~b29mAs1WDnc{8&IBm2#X#`a7>UVY@!?uFWdqTjz$Xs3U(D8AQ+r2*87dUW6QSKX? zAtrteqGk=B8Ee?~5KcRWIim?l#jzQj-WTyd={dWg!+jTNplpib zo>dhn7azARsa~*6vUf*+g)&awOq7)2PJ1y^@nGxZy!44bfJ`c&C0 zYqdYR?XBRwM_7bp+A=&a`_nuOhL;!PoUkTxx6J2Zc&O)A63qD01}O+~Ugs(<{3)1u zwK^3qvYd;@C$GS7(%^6aSHB6>x9~s~TVjj^*PHdosh?G}701PIjEyiP__`NJcswXh ziw7PPXSPi8V|Z!Q*2?2a8%d!rD$i_j);d&Q5C7Fs$1{fy)ZSiF_42+r5E)w--uO&;5Wr6nnDA84c_~7a zr?JLz8=+qJ@7#7D4)_$8&}j!rpIg=xguT`wuIKDrqrTTyHkL1y{b0XZ0n zQF+?p^l%zDJ3lg3POkStHd8+v9<8ljDwC1u*m_f2?Vz-J>tQAnX0tL?YWW=@987Ev zswL6Bfw%>{vx1tkY(!}*8g`w*-Z-FDZcKH7ucj4w@|l5|d_JS_3kI;XG>`nO~R>Yp$&C%d2Lk`}G`G_D4o~`L0*; zM5(J{2@B^9Uw%@h{r(Q)%h|kYjH{YTTzoWANN7m_MGG-%=LV)~ONokG9geA7Re+5URu3N7^GmGO^Fi)YW4Uh_zk zWEZi&NO(YDz+ON~0MWgE5cF@g6iK=i`x?}OBd*G*<6$YxSdy?1*{RhP%9;qXXJUwn zQB)ZK=HYC?eOH1*|5gl7z+r;8ucOcJSW8=9VM)ExfD{PE%$U0xjm>gzXQywuzdF$#IdLf6Oy<>4o^So+K(IM-`?~iD8eHuS~=N5K( z?9K;KOlpRu1`$VwFJnIrg2;P5NJhGze7*`lNg_Y3nZAcnB$8IkbTlruLrN}?4$($SlcAIdIvs8e_OZP>63@>x zCwqy*@|{%#uZAGJt=S741e`6lO@o#s02n>pDR34V4~ z_W$A15|a%l3a=t5#>UIWDZwYk!Oq3O%FZpu$-yeY%lq{!-&YPkUQTvlGQt0^ivbdg zg1LjGn-v)+Cod4(3`GZ^Ua^j$Hqsfs_Psc-UVij1ws|PB+RvLHze)PUH@d9cwY8nAS3hIY2M_!B}FsuzpfWnw-#s z&0Bq$rexN*z5Z~Fn;!(p5n+B#Z%&v!6}&u_zu{BjYV6Q53ySnP&7KN*8jEAlJ9UFZ zVQJBuRBs+SrqHgm>!_bs0`{t!^Q7V^0l_y8B|O}EIu~xRmFms%%k(8d`pd-T3?M1^ z{v6+Zee)Sc!26S~c|ZE5o-UD4nF=M!w2+=nWt!4cZ z`0Zb{m4-hV_xMnxQ})L!1cZ==Qw+Z0{w9gQTAw=d0_blll+c>!FT0qVM5{UJE~A;x zf^vcy`e#jx>TBotc+v5;g*pW^n=Iy$JDT#pf4CY;1*4w9C{U7VOzG**1~)- zCP{k5yrXVnY=OkDW^Ju=xY;h8_whSrqNENUt#9rHe z4Xh~R0NiXJh3S;=nx5dcUWJpOie(vGN&F%Xmo;gE%0VK+WObIoSBR)$1ut`$z^@rE z=s01JT(7wCqG)Xyp1j_@2*hnTjegaJ4yZcpbK#X9M`H}DGQ*~eJ+cnf;9zmb^%Hc6 zt|>m6VRi36k7czQkfwC{teKIofYpUCAmzqG0jOak<)n$HQ3l~W7R{HQ0cC3kPuk8J)Te zpI^cUV_M7y2d{d##gl)7$!f186gY_i^nj9(<3QUf;6u&N=R-El!$gkNw%UA#-i z19S+khB}8E8V`NS~TX5co*Z$rkz)5lvVbGiT8=$O?>{coVI!Tlz=X( ztua$&$bBs&cOT6Xik>k_b07B-nt(CwSqO!Dz^&G9&w22AE&N0KZ-L@qdpNe@2mpaw zw22R#^aLSuz5juh>%fw|`S4b#h3lLE1pGEecIaE#ZP?^BARg?@yKUrCuRI9K4W4y^ zo9g3>oN0vs8VkC2-*p|GQ0NC$IH6Ye!>k2nIUzfUr*C8GD}ieKIeglXAGd@B10$;G zIiqy$=sLrP%Wj7qKU{G^euy>dfCs7^T?ePv6?WV4N~VTp!MV8LeHB6_zhr*EyPAr( zuH0z=k#yY`_8oi1Fci!2{BuF$J`cJH8IYqtt?rfCcruf6v*0qbGn3%*5bX804o3HP zcaO%c_GSn)+o$sVinJQtZkzvvG@HfZDbGs@c)JC5t#N%O*QPbVoQvAH;<=%5tA~h_ z#5g9CbR&t}IVLX>(Tr-3d8&ur$*YytD@WsYt>g<5Npa(mzX~5o1Dk7|Q1{ zZaZX=j!A?>#4WF6mYU9g??r_hRWO~_qE{guw!s8V`$TErvlnL(@oByeWAg5d#f(55 z!j2VUWjHJyu@GS@5bUB2$%kEwy8!lCg32;hlq(U&u;&pKl)x3!AII00RuZ8yL zV_rh{HF1>#8cAq%fYVG*eiT3hoG_I7yHhT5qkSUCEpiK-J`HVSXNPdm33)rJ3nSxg zv1cn=-^gG0OSZyjZGYB}Kx~EN*~U#rq^&Nz!%}RFwZ0%(i-5?DSGS_szu+% zR0#HV+2QL91YRK-W{LX7Q5H7o;}=;KP`itgY6SoVA+{OGT$f8#3K ztv1r-Y1YXN(&JR9dzx59_bh!Pu9X`kOjX=gXB-npVlHbf+=+~$q}MFN@7l?Z5~JTJ zy(qd{jL+}!s&j}Gr7+(eXvROCD>NfhZ z7HM(XOXD>`Z*NCwcQc*K_c^4>_=&BV_yL?Y2YR@i0Xr-~*J);;&60(vh!8;tq}7Q# z;m7s8&w<_^0Q00lyT)L4kAL?)oWlus3XIbVGpy>l-;xi!b%JDmKE%zW8+xMG4>`qH zEq`(1b8qqET-gZKbHcj-|JRvwctz&!=_j(H)W`9`&Iv%Q+2X2|D>ED=q;^a>N$pe# zA7N2_9GRBDf!4HOMK$HkExFJWPezT;2QYD@aHu^#!xs$NrNcWk=|d=})yvUEs4^?9 zuU^KD>8rXZjnY$Bq*SWb%Mr+8Y0^<@^r4tj$!Hc{>`qI=zp6SwNzu1J08{i;hbU6z z0%T@s-#Ai^&bQ#5K$S-Sp!KE%JXoVNkZ{pcEQll*9j27Mnd$CD80J)7X z-UWpL-h%F%9sHSfa^6ZM{W`+YflMq=vnjx!h=1q*@sz{;qVuy86;Jh1{Nod72rXMf zPLs~N)DPnCpGkVtx{F-vsbpBo71P10jp9=4rP!&gSH zKyFJFf^BE=83--L>)>jz48`; zU<4kj@h;*Cb51$mKPc>lgf#La2dOYq_@JmK8?-JITaD(~NJPOP{<`R!dW z9bJ{)|K#zoaN__lJQK|G939l{FMNd6oeM2}rv=UQ!l3H-IBPWob?40R=W&G6xzju+`LHYzu*ZTe)Xj}tF0>~-cFk0D&nJf6E*mYRC5F1lAa?{ah2%84nO%g>nrUeNx-9E8hc`yUJCY1Ylv;XO&I;+O25N~g{gtQ$h5>|~448QDs z8hFyEbsLrRyRg@A5KHhC&+u(Y-h_J@U(0HJB^i<0H)X|(ZQJ|qpphT~+2H5UjXrIU z<1$^amP`jg{GIw_3pB5XqXc@^!(p;}i`@oy!}>=fJQS2Y?h1f7*$?p|wEgLrW3OPh zk^AsMSrCjcy2<>+{sjLOqP+$sfRpubguunWi-DE(a0pOzh``}`IP(8c{*eI)MuX*K z7D9dFQsy|@MVa;VX&j+7roUi$FY zedB`W^$Hn`YBb|1qwN2QRVf;E=s&%2ummTIa_gfGT;wy>R1c^v4kjgWYhL!#*xQO2 zUF6x7btG@;0VGeHK;tp0baupIgQE(9f&NDSOE@psnZAda-qA^ehX{Ya_Y$K7V;SG{M_dJB?F^P=m*D~U9WLw2 zgAT)QN^P5Tj{^GvC8nrEZH+Pjxz^*dr8KFic@0I$11fH?17Pf2nOK3+H&^O0;`hif z+ThGK=S`UM;7lUt4Xy9ak=5s?1P|tzpT2)afp~4W0X*h#YvXjde_#6STS;PmOJM4dKNDf{aMxfsAWExQFEunXfzxQ9 zJe)rJ&*8wBkUs#<;BWs|i$rHL#T@y^X+WAmpPiKhWk(?84{!ej>tCEef#&EZ>qcSw zZxsHEJA{NB{k{L`5VAeNdj89aS45y?_lp>w4=Yqb0+=%$jl-B`B6yh<{-E!_O2$7| xp+0tPH0uAT8A#gy&vi%jfgs?iuVLx~+NO_oA2`(nM~2A3gG5a&sVs%`e*pbaWYz!x diff --git a/build/stage23.rdb b/build/stage23.rdb index 26dc2bbd943937a97cf173cc39e59184002d3245..e0987a59f8e5b712cc981456ddb761dd15e73618 100644 GIT binary patch delta 98933 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�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 diff --git a/inst/doc/cobalt.html b/inst/doc/cobalt.html index b348450..13fc7ae 100644 --- a/inst/doc/cobalt.html +++ b/inst/doc/cobalt.html @@ -12,7 +12,7 @@ - + Covariate Balance Tables and Plots: A Guide to the cobalt Package @@ -363,7 +363,7 @@

Covariate Balance Tables and Plots: A Guide to the cobalt Package

Noah Greifer

-

2023-11-20

+

2024-01-09

@@ -509,14 +509,14 @@

Citing cobalt

When using cobalt, please cite your use of it along with the conditioning package used. The full APA reference for cobalt is the following:

-

Greifer, N. (2023). cobalt: Covariate Balance Tables and Plots. R -package version 4.5.2.

+

Greifer, N. (2024). cobalt: Covariate Balance Tables and Plots. R +package version 4.5.3.

For example, if you use Matching for propensity score estimation and matching and cobalt for balance assessment and/or reporting, a possible citation might go as follows:

Matching was performed using the Matching package (Sekhon, 2011), and -covariate balance was assessed using cobalt (Greifer, 2023), both in R +covariate balance was assessed using cobalt (Greifer, 2024), both in R (R Core Team, 2023).

diff --git a/inst/doc/longitudinal-treat.html b/inst/doc/longitudinal-treat.html index ea24d6d..6589df8 100644 --- a/inst/doc/longitudinal-treat.html +++ b/inst/doc/longitudinal-treat.html @@ -12,7 +12,7 @@ - + Using cobalt with Longitudinal Treatments @@ -363,7 +363,7 @@

Using cobalt with Longitudinal Treatments

Noah Greifer

-

2023-11-20

+

2024-01-09

diff --git a/inst/doc/love.plot.html b/inst/doc/love.plot.html index 5604274..d4cca9e 100644 --- a/inst/doc/love.plot.html +++ b/inst/doc/love.plot.html @@ -12,7 +12,7 @@ - + Using love.plot() To Generate Love Plots @@ -363,7 +363,7 @@

Using love.plot() To Generate Love Plots

Noah Greifer

-

2023-11-20

+

2024-01-09

diff --git a/inst/doc/other-packages.html b/inst/doc/other-packages.html index 0ea69ee..051e997 100644 --- a/inst/doc/other-packages.html +++ b/inst/doc/other-packages.html @@ -12,7 +12,7 @@ - + Using cobalt with Other Preprocessing Packages @@ -341,7 +341,7 @@

Using cobalt with Other Preprocessing Packages

Noah Greifer

-

2023-11-20

+

2024-01-09

## Balance summary across all imputations
 ##                 Type Min.Diff.Adj Mean.Diff.Adj Max.Diff.Adj
-## distance    Distance       0.9445        0.9539       0.9636
-## age          Contin.      -0.0423        0.0048       0.0544
-## educ         Contin.      -0.1774       -0.1497      -0.1183
-## married       Binary      -0.0414       -0.0204       0.0135
+## distance    Distance       0.9471        0.9544       0.9649
+## age          Contin.      -0.0348        0.0158       0.0567
+## educ         Contin.      -0.1909       -0.1508      -0.1237
+## married       Binary      -0.0803       -0.0310       0.0000
 ## race_black    Binary       1.0259        1.0259       1.0259
-## race_hispan   Binary      -0.8000       -0.7429      -0.7086
-## race_white    Binary      -0.6931       -0.6657      -0.6201
-## re74         Contin.      -0.1028       -0.0547      -0.0173
-## re75         Contin.      -0.1016       -0.0598      -0.0324
+## race_hispan   Binary      -0.7772       -0.7474      -0.7086
+## race_white    Binary      -0.6931       -0.6621      -0.6384
+## re74         Contin.      -0.0939       -0.0659      -0.0362
+## re75         Contin.      -0.1059       -0.0723      -0.0364
 ## 
 ## Average sample sizes across imputations
 ##             0   1
@@ -1215,20 +1215,20 @@ 

Using bal.tab() with MatchThem

bal.tab(wt.out)
## Balance summary across all imputations
 ##                 Type Min.Diff.Adj Mean.Diff.Adj Max.Diff.Adj
-## prop.score  Distance       0.1411        0.1547       0.1678
-## age          Contin.      -0.1916       -0.1885      -0.1815
-## educ         Contin.       0.0743        0.0831       0.0919
-## married       Binary      -0.2519       -0.2191      -0.1873
-## race_black    Binary       0.1321        0.1457       0.1593
-## race_hispan   Binary       0.0278        0.0361       0.0472
-## race_white    Binary      -0.1871       -0.1682      -0.1492
-## re74         Contin.      -0.3027       -0.2882      -0.2765
-## re75         Contin.      -0.1635       -0.1541      -0.1445
+## prop.score  Distance       0.1490        0.1595       0.1641
+## age          Contin.      -0.1944       -0.1884      -0.1804
+## educ         Contin.       0.0781        0.0824       0.0866
+## married       Binary      -0.2421       -0.2311      -0.2062
+## race_black    Binary       0.1407        0.1517       0.1590
+## race_hispan   Binary       0.0261        0.0349       0.0411
+## race_white    Binary      -0.1827       -0.1731      -0.1558
+## re74         Contin.      -0.2926       -0.2826      -0.2685
+## re75         Contin.      -0.1643       -0.1588      -0.1495
 ## 
 ## Average effective sample sizes across imputations
 ##                 0      1
 ## Unadjusted 429.   185.  
-## Adjusted   331.84  66.65
+## Adjusted 331.14 66.67

The input is similar to that for using bal.tab() with MatchIt or WeightIt.

@@ -1316,22 +1316,22 @@

Using bal.tab() with cem

bal.tab(cem.out.imp, data = imp.out)
## Balance summary across all imputations
 ##                Type Min.Diff.Adj Mean.Diff.Adj Max.Diff.Adj
-## age         Contin.       0.0461        0.0480       0.0512
-## educ        Contin.      -0.0441       -0.0359      -0.0090
-## race_black   Binary      -0.0000       -0.0000       0.0000
-## race_hispan  Binary      -0.0000       -0.0000       0.0000
+## age         Contin.       0.0461        0.0478       0.0501
+## educ        Contin.      -0.0441       -0.0346      -0.0165
+## race_black   Binary      -0.0000        0.0000       0.0000
+## race_hispan  Binary      -0.0000        0.0000       0.0000
 ## race_white   Binary      -0.0000       -0.0000       0.0000
-## married      Binary      -0.0000        0.0000       0.0000
-## nodegree     Binary      -0.0000        0.0000       0.0000
-## re74        Contin.      -0.0394       -0.0344      -0.0326
-## re75        Contin.      -0.0742       -0.0546      -0.0429
+## married      Binary       0.0000        0.0000       0.0000
+## nodegree     Binary       0.0000        0.0000       0.0000
+## re74        Contin.      -0.0418       -0.0367      -0.0332
+## re75        Contin.      -0.0737       -0.0577      -0.0486
 ## 
 ## Average sample sizes across imputations
 ##                           0     1
 ## All                  429.   185. 
-## Matched (ESS)         35.42  66.3
-## Matched (Unweighted)  77.8   66.3
-## Unmatched            351.2  118.7
+## Matched (ESS) 35.61 65.9 +## Matched (Unweighted) 77.7 65.9 +## Unmatched 351.3 119.1

Using bal.tab() with other packages

diff --git a/inst/doc/segmented-data.html b/inst/doc/segmented-data.html index 6398009..ee16d21 100644 --- a/inst/doc/segmented-data.html +++ b/inst/doc/segmented-data.html @@ -12,7 +12,7 @@ - + Using cobalt with Clustered, Multiply Imputed, and Other Segmented Data @@ -341,7 +341,7 @@

Using cobalt with Clustered, Multiply Imputed, and Other Segmented Data

Noah Greifer

-

2023-11-20

+

2024-01-09

@@ -483,17 +483,14 @@

bal.tab()

## ## - - - Cluster: black - - - ## Balance Measures -## Type Diff.Adj -## distance Distance 0.0150 -## race_black Binary 0.0000 -## race_hispan Binary 0.0000 -## race_white Binary 0.0000 -## age Contin. -0.1001 -## educ Contin. 0.0794 -## married Binary 0.0742 -## nodegree Binary -0.0072 -## re74 Contin. -0.1501 -## re75 Contin. -0.1406 +## Type Diff.Adj +## distance Distance 0.0150 +## age Contin. -0.1001 +## educ Contin. 0.0794 +## married Binary 0.0742 +## nodegree Binary -0.0072 +## re74 Contin. -0.1501 +## re75 Contin. -0.1406 ## ## Sample sizes ## 0 1 @@ -504,17 +501,14 @@

bal.tab()

## ## - - - Cluster: hispan - - - ## Balance Measures -## Type Diff.Adj -## distance Distance 0.0947 -## race_black Binary 0.0000 -## race_hispan Binary 0.0000 -## race_white Binary 0.0000 -## age Contin. 0.1914 -## educ Contin. -0.4159 -## married Binary 0.3062 -## nodegree Binary 0.5893 -## re74 Contin. 0.1161 -## re75 Contin. 0.0683 +## Type Diff.Adj +## distance Distance 0.0947 +## age Contin. 0.1914 +## educ Contin. -0.4159 +## married Binary 0.3062 +## nodegree Binary 0.5893 +## re74 Contin. 0.1161 +## re75 Contin. 0.0683 ## ## Sample sizes ## 0 1 @@ -525,17 +519,14 @@

bal.tab()

## ## - - - Cluster: white - - - ## Balance Measures -## Type Diff.Adj -## distance Distance 0.0216 -## race_black Binary 0.0000 -## race_hispan Binary 0.0000 -## race_white Binary 0.0000 -## age Contin. -0.4201 -## educ Contin. -0.1403 -## married Binary -0.1491 -## nodegree Binary 0.2222 -## re74 Contin. -0.0417 -## re75 Contin. 0.0298 +## Type Diff.Adj +## distance Distance 0.0216 +## age Contin. -0.4201 +## educ Contin. -0.1403 +## married Binary -0.1491 +## nodegree Binary 0.2222 +## re74 Contin. -0.0417 +## re75 Contin. 0.0298 ## ## Sample sizes ## 0 1 @@ -555,17 +546,14 @@

bal.tab()

which.cluster = .none:

bal.tab(m.out, cluster = "race", which.cluster = .none)
## Balance summary across all clusters
-##                 Type Min.Diff.Adj Mean.Diff.Adj Max.Diff.Adj
-## distance    Distance       0.0150        0.0438       0.0947
-## race_black    Binary       0.0000        0.0000       0.0000
-## race_hispan   Binary       0.0000        0.0000       0.0000
-## race_white    Binary       0.0000        0.0000       0.0000
-## age          Contin.      -0.4201       -0.1096       0.1914
-## educ         Contin.      -0.4159       -0.1590       0.0794
-## married       Binary      -0.1491        0.0771       0.3062
-## nodegree      Binary      -0.0072        0.2681       0.5893
-## re74         Contin.      -0.1501       -0.0252       0.1161
-## re75         Contin.      -0.1406       -0.0142       0.0683
+##              Type Min.Diff.Adj Mean.Diff.Adj Max.Diff.Adj
+## distance Distance       0.0150        0.0438       0.0947
+## age       Contin.      -0.4201       -0.1096       0.1914
+## educ      Contin.      -0.4159       -0.1590       0.0794
+## married    Binary      -0.1491        0.0771       0.3062
+## nodegree   Binary      -0.0072        0.2681       0.5893
+## re74      Contin.      -0.1501       -0.0252       0.1161
+## re75      Contin.      -0.1406       -0.0142       0.0683
 ## 
 ## Total sample sizes across clusters
 ##                           0   1
@@ -607,17 +595,14 @@ 

bal.tab()

## ## - - - Cluster: black - - - ## Balance Measures -## Type Diff.Adj -## distance Distance 0.0150 -## race_black Binary 0.0000 -## race_hispan Binary 0.0000 -## race_white Binary 0.0000 -## age Contin. -0.1001 -## educ Contin. 0.0794 -## married Binary 0.0742 -## nodegree Binary -0.0072 -## re74 Contin. -0.1501 -## re75 Contin. -0.1406 +## Type Diff.Adj +## distance Distance 0.0150 +## age Contin. -0.1001 +## educ Contin. 0.0794 +## married Binary 0.0742 +## nodegree Binary -0.0072 +## re74 Contin. -0.1501 +## re75 Contin. -0.1406 ## ## Sample sizes ## 0 1 @@ -630,17 +615,14 @@

bal.tab()

bal.tab(m.out, cluster = "race", which.cluster = .none, cluster.fun = "mean")
## Balance summary across all clusters
-##                 Type Mean.Diff.Adj
-## distance    Distance        0.0438
-## race_black    Binary        0.0000
-## race_hispan   Binary        0.0000
-## race_white    Binary        0.0000
-## age          Contin.       -0.1096
-## educ         Contin.       -0.1590
-## married       Binary        0.0771
-## nodegree      Binary        0.2681
-## re74         Contin.       -0.0252
-## re75         Contin.       -0.0142
+##              Type Mean.Diff.Adj
+## distance Distance        0.0438
+## age       Contin.       -0.1096
+## educ      Contin.       -0.1590
+## married    Binary        0.0771
+## nodegree   Binary        0.2681
+## re74      Contin.       -0.0252
+## re75      Contin.       -0.0142
 ## 
 ## Total sample sizes across clusters
 ##                           0   1
@@ -681,7 +663,7 @@ 

love.plot()

which.cluster is set to .all (the default), all clusters will be plotted. Below is an example:

love.plot(m.out, cluster = "race")
-

+

These plots function like those from using love.plot() with non-clustered data, except that they cannot be sorted based on the values of the balance statistics (they can still be sorted @@ -695,13 +677,13 @@

love.plot()

displayed, use the argument to agg.fun, which may be “mean” or “max”. Below is an example:

love.plot(m.out, cluster = "race", which.cluster = .none, agg.fun = "mean")
-

+

A third option is to set agg.fun = "range" (the default), which produces a similar plot as above except that the minimum and maximum values of the balance statistics for each covariate are displayed as well. See below for an example:

love.plot(m.out, cluster = "race", which.cluster = .none, agg.fun = "range")
-

+

Each point represents the mean balance statistic, and the bars represent intervals bounded by the minimum and maximum of each balance statistic. This display can be especially helpful with many clusters diff --git a/tests/testthat/test-github-issues.R b/tests/testthat/test-github-issues.R new file mode 100644 index 0000000..877de74 --- /dev/null +++ b/tests/testthat/test-github-issues.R @@ -0,0 +1,66 @@ +#Tests for specific github issues + +test_that("(#71) `addl` argument not throwing correct error when variable not available", { + #Note: actual error was something else, but addl should have thrown a more informative error + skip_if_not_installed("MatchIt") + + data("lalonde") + + m <- MatchIt::matchit(treat ~ age + educ, data = lalonde, distance = "scaled_euclidean") + + expect_error(bal.tab(m, addl = "race"), + "The variable \"race\" cannot be found. Be sure it is entered correctly or supply a dataset that contains this varialble to `data`.", + fixed = TRUE) + + expect_no_condition(bal.tab(m, addl = "race", data = lalonde)) + }) + +test_that("(#74) bal.tab() works with mnps objects", { + skip_if_not_installed("twang") + + data("lalonde") + + mnps <- twang::mnps(race ~ age + educ + married + re74, + data = lalonde, + estimand = "ATT", + treatATT = "white", + verbose = FALSE, + stop.method = c("es.mean"), + n.trees = 1000) + + expect_no_condition( + bal.tab(mnps, un = TRUE, disp = c("m", "sd")) + ) +}) + +test_that("(#76) bal.tab() doesn't produce an error with missing covariates", { + + data("lalonde_mis") + + expect_no_error( + b <- bal.tab(treat ~ age + educ + race + married + nodegree + re74 + re75, + data = lalonde_mis) + ) + expect_warning( + b <- bal.tab(treat ~ age + educ + race + married + nodegree + re74 + re75, + data = lalonde_mis), + "Missing values exist in the covariates. Displayed values omit these observations.", + fixed = TRUE + ) + + expect_identical(rownames(b$Balance), + c("age", "educ", "race_black", "race_hispan", "race_white", + "married", "married:", "nodegree", + "re74", "re74:", "re75", "re75:")) +}) + +test_that("(#77) no conflict with `cluster` argument to bal.tab() when {caret} is loaded", { + skip_if_not_installed("caret") + + library(caret) + + data("lalonde") + + expect_no_condition(bal.tab(treat ~ age + educ + race, data = lalonde, cluster = "married", + s.d.denom = "pooled")) +}) \ No newline at end of file