From 0fc5009e197c1de30a552e074a6c8ced893d4a7b Mon Sep 17 00:00:00 2001 From: Maarten Bijlsma Date: Wed, 18 Mar 2020 12:40:02 +0000 Subject: [PATCH] version 0.1.0 --- DESCRIPTION | 23 ++ MD5 | 35 +++ NAMESPACE | 8 + NEWS.md | 6 + R/cfd.example.data.R | 14 ++ R/cfd.mean.R | 191 ++++++++++++++++ R/cfd.quantile.R | 203 +++++++++++++++++ R/cfd.semipar.mean.R | 150 ++++++++++++ R/cfd.semipar.quantile.R | 175 ++++++++++++++ R/conv.mean.R | 14 ++ README.md | 365 ++++++++++++++++++++++++++++++ data/cfd.example.data.rda | Bin 0 -> 93948 bytes man/cfd.example.data.Rd | 22 ++ man/cfd.mean.Rd | 85 +++++++ man/cfd.quantile.Rd | 93 ++++++++ man/cfd.semipar.mean.Rd | 68 ++++++ man/cfd.semipar.quantile.Rd | 73 ++++++ man/conv.mean.Rd | 17 ++ man/figures/README-example-1.png | Bin 0 -> 6659 bytes man/figures/README-example-10.png | Bin 0 -> 6201 bytes man/figures/README-example-11.png | Bin 0 -> 6152 bytes man/figures/README-example-12.png | Bin 0 -> 5849 bytes man/figures/README-example-13.png | Bin 0 -> 6545 bytes man/figures/README-example-14.png | Bin 0 -> 6421 bytes man/figures/README-example-15.png | Bin 0 -> 7107 bytes man/figures/README-example-16.png | Bin 0 -> 6351 bytes man/figures/README-example-17.png | Bin 0 -> 6546 bytes man/figures/README-example-18.png | Bin 0 -> 6835 bytes man/figures/README-example-2.png | Bin 0 -> 6641 bytes man/figures/README-example-3.png | Bin 0 -> 6772 bytes man/figures/README-example-4.png | Bin 0 -> 6728 bytes man/figures/README-example-5.png | Bin 0 -> 6603 bytes man/figures/README-example-6.png | Bin 0 -> 7057 bytes man/figures/README-example-7.png | Bin 0 -> 5823 bytes man/figures/README-example-8.png | Bin 0 -> 5338 bytes man/figures/README-example-9.png | Bin 0 -> 6374 bytes 36 files changed, 1542 insertions(+) create mode 100644 DESCRIPTION create mode 100644 MD5 create mode 100644 NAMESPACE create mode 100644 NEWS.md create mode 100644 R/cfd.example.data.R create mode 100644 R/cfd.mean.R create mode 100644 R/cfd.quantile.R create mode 100644 R/cfd.semipar.mean.R create mode 100644 R/cfd.semipar.quantile.R create mode 100644 R/conv.mean.R create mode 100644 README.md create mode 100644 data/cfd.example.data.rda create mode 100644 man/cfd.example.data.Rd create mode 100644 man/cfd.mean.Rd create mode 100644 man/cfd.quantile.Rd create mode 100644 man/cfd.semipar.mean.Rd create mode 100644 man/cfd.semipar.quantile.Rd create mode 100644 man/conv.mean.Rd create mode 100644 man/figures/README-example-1.png create mode 100644 man/figures/README-example-10.png create mode 100644 man/figures/README-example-11.png create mode 100644 man/figures/README-example-12.png create mode 100644 man/figures/README-example-13.png create mode 100644 man/figures/README-example-14.png create mode 100644 man/figures/README-example-15.png create mode 100644 man/figures/README-example-16.png create mode 100644 man/figures/README-example-17.png create mode 100644 man/figures/README-example-18.png create mode 100644 man/figures/README-example-2.png create mode 100644 man/figures/README-example-3.png create mode 100644 man/figures/README-example-4.png create mode 100644 man/figures/README-example-5.png create mode 100644 man/figures/README-example-6.png create mode 100644 man/figures/README-example-7.png create mode 100644 man/figures/README-example-8.png create mode 100644 man/figures/README-example-9.png diff --git a/DESCRIPTION b/DESCRIPTION new file mode 100644 index 0000000..932f700 --- /dev/null +++ b/DESCRIPTION @@ -0,0 +1,23 @@ +Package: cfdecomp +Type: Package +Title: Counterfactual Decomposition: MC Integration of the G-Formula +Version: 0.1.0 +Authors@R: c( + person("Maarten", "Bijlsma", role=c("aut", "cre"), email= "maarten.bijlsma@gmail.com"), + person("Nikkil", "Sudharsanan", role=c("aut")), + person("Peng", "Li", role=c("ctb")) + ) +Maintainer: Maarten Bijlsma +Description: Provides a set of functions for counterfactual decomposition (cfdecomp). The functions available in this package decompose differences in an outcome attributable to a mediating variable (or sets of mediating variables) between groups based on counterfactual (causal inference) theory. By using Monte Carlo (MC) integration (simulations based on empirical estimates from multivariable models) we provide added flexibility compared to existing (analytical) approaches, at the cost of computational power or time. The added flexibility means that we can decompose difference between groups in any outcome or and with any mediator (any variable type and distribution). See Sudharsanan & Bijlsma (2019) for more information. +Depends: R (>= 3.5.0) +License: GPL-3 +Encoding: UTF-8 +LazyData: true +RoxygenNote: 7.0.2 +NeedsCompilation: no +Packaged: 2020-03-10 14:30:12 UTC; bijlsma +Author: Maarten Bijlsma [aut, cre], + Nikkil Sudharsanan [aut], + Peng Li [ctb] +Repository: CRAN +Date/Publication: 2020-03-18 13:40:02 UTC diff --git a/MD5 b/MD5 new file mode 100644 index 0000000..48c8641 --- /dev/null +++ b/MD5 @@ -0,0 +1,35 @@ +f6f9a781c753eb20e9411ec7a308e4b2 *DESCRIPTION +eef28e582a1e2fbe695d599bfc2330fd *NAMESPACE +ee882d7bd6abc7c00a353eb47774a380 *NEWS.md +d4b39d67a5235dd293ddeef7e62aae16 *R/cfd.example.data.R +0a1e0e4804ee07a41ca282d6bfe9582d *R/cfd.mean.R +a1848fb893db45320191e4b43f2162b8 *R/cfd.quantile.R +cfa33a54ceeab2e31a6274e3eaefda86 *R/cfd.semipar.mean.R +d13281ce1c66b59fac640721e6fe6189 *R/cfd.semipar.quantile.R +d658025abccaddc47e34201e43dff375 *R/conv.mean.R +5274a8ead61f4f42923aa64d71e00a6a *README.md +0c88d36cb420add065bb8d532b3f3169 *data/cfd.example.data.rda +a64fa4a2b5280a79150a6c0c64159940 *man/cfd.example.data.Rd +9166e7bc9090b0fa135926eab0d16710 *man/cfd.mean.Rd +27831b9092dcf2ba1a672d6b3906a81c *man/cfd.quantile.Rd +4cd301ed860b2001026dde00737725d2 *man/cfd.semipar.mean.Rd +2342900d1143f43b4064ea56701cff2d *man/cfd.semipar.quantile.Rd +6a6abeb9971d4484c6b91efcbcf91dda *man/conv.mean.Rd +e4e2441cf579ab55d8931e3e5c97913d *man/figures/README-example-1.png +30b62360cb1ca242763d35ba0561a78d *man/figures/README-example-10.png +c655181e67bdc2372dfb2092ce2dff8a *man/figures/README-example-11.png +3adf56e5631e4fd9e0c2d6571c43f012 *man/figures/README-example-12.png +d65ad07144fd97559432ea3e977b9dfa *man/figures/README-example-13.png +93592795f73e39e089802cb0b46520a8 *man/figures/README-example-14.png +511310b0d64348e68da0c0f2fa0eac33 *man/figures/README-example-15.png +dc64b70c02d9cf978f0167189543bd21 *man/figures/README-example-16.png +09fb8f2bc166048a89277d59b052835f *man/figures/README-example-17.png +4b40fbdbb597346c144af717c1632994 *man/figures/README-example-18.png +c2720f7429bc2151d4f24e1b8bf261cf *man/figures/README-example-2.png +3e829ca0dc06d0c2044ccd5df68ade9d *man/figures/README-example-3.png +3e9f560073b44d6847ee5e2cc3661bf7 *man/figures/README-example-4.png +6ac25130f31f497c0bdfa8bb2f990d3b *man/figures/README-example-5.png +e10ed9cacc4f171ba9529bdd85fb5adb *man/figures/README-example-6.png +76c166804ac8d428a57f3e58fdaba872 *man/figures/README-example-7.png +63975c2bc601b43491a85ea041c7fe41 *man/figures/README-example-8.png +a85c5e594bbdbbb5d0a67c27d876ae60 *man/figures/README-example-9.png diff --git a/NAMESPACE b/NAMESPACE new file mode 100644 index 0000000..aa75e13 --- /dev/null +++ b/NAMESPACE @@ -0,0 +1,8 @@ +# Generated by roxygen2: do not edit by hand + +export(cfd.mean) +export(cfd.quantile) +export(cfd.semipar.mean) +export(cfd.semipar.quantile) +export(conv.mean) +import(stats) diff --git a/NEWS.md b/NEWS.md new file mode 100644 index 0000000..291c2ab --- /dev/null +++ b/NEWS.md @@ -0,0 +1,6 @@ + +# cfdecomp v0.1.0 + +This is a first release of the cfdecomp package, which has so far only been available on github under the name cfdecomp. + +See DESCRIPTION for more information. diff --git a/R/cfd.example.data.R b/R/cfd.example.data.R new file mode 100644 index 0000000..cb932c1 --- /dev/null +++ b/R/cfd.example.data.R @@ -0,0 +1,14 @@ +#' @title Example Data for the cfdecomp package +#' +#' @description A dataframe with artificially generated data, intended to be used in a demonstration of the functions in this package. +#' +#' @format a dataframe with 6 columns, which are: +#' \describe{ +#' \item{SES}{a factor variable with 3 levels, denoting three groups to be compared. SES stands for socio-economic status.} +#' \item{age}{a continuous variable going from 40 to 65. Age could stand for age in years.} +#' \item{med.gauss}{a mediator that is a continuous variable and normally distributed.} +#' \item{med.binom}{a mediator that is binomial.} +#' \item{med.pois}{a mediator that is a count variable and poisson distributed.} +#' \item{out.gauss}{an outcome that is a continuous variable and normally distributed.} +#' } +"cfd.example.data" diff --git a/R/cfd.mean.R b/R/cfd.mean.R new file mode 100644 index 0000000..b6dfc9f --- /dev/null +++ b/R/cfd.mean.R @@ -0,0 +1,191 @@ +#' +#' @title Mean Decomposition: parametric version +#' +#' @description Decompose the mean difference in outcome Y between groups. +#' +#' @param formula.y the \code{\link{formula}} for the multivariable model (see \code{\link{glm}}) for the outcome Y. +#' @param formula.m the \code{\link{formula}} for the multivariable model (see \code{\link{glm}}) for the mediator M. +#' @param mediator the column name of the mediator M. +#' @param group column name of a factor variable containing the group identifier. +#' @param data a data frame containing the variables in the model. +#' @param family.y a description of the error distribution to be used in the model, see \code{\link{family}} for details. For the outcome variable any member of the \code{glm} family can be used. +#' @param family.m a description of the error distribution to be used in the model, see \code{\link{family}} for details. For the mediator, currently \code{gaussian}, \code{binomial} and \code{poisson} are supported. +#' @param bs.size the number of bootstrap iterations to be performed. +#' @param mc.size the number of Monte Carlo iterations to be performed (more = more MC error reduction). +#' @param alpha the alpha level used to construct confidence intervals (0.05 = 95 percent confidence interval). +#' @param sample.resid if the \code{mediator} is Gaussian, should the simulation sample from the residuals of the linear regression model of the mediator to approximate the empirical distribution of the mediator in the simulation (Monte Carlo integration) (if so, set to \code{TRUE}), or should it sample from a Gaussian distribution with the standard deviation of the mediator? If the true distribution of the continuous mediator is not very Gaussian, the former may be preferred. +#' @param print.iteration print the bootstrap iteration +#' +#' @return \code{out_nc_m} returns the mean level of the mediator under the natural course, which is a value that should be close to the empirically observed value of the mediator for each group. \code{out_nc_quantile} provides the \code{alpha/2} and \code{1-alpha/2} bootstrap quantiles for this mean (AKA bootstrap percentile confidence intervals). \code{out_nc_y} and \code{out_nc_quantile_y} provide the corresponding values, but then for the outcome variable Y. Similarly, \code{out_cf_m}, \code{out_cf_quantile_m},\code{out_cf_y}, and \code{out_cf_quantile_y} provide the corresponding values for the counterfactual scenario where the mediators of the groups are equalized. \code{mediation} returns the proportion mediated by setting the intervened on mediator to be equal in level to the reference group and \code{mediation_quantile} returns the 1-alpha confidence interval. \code{mc_conv_info_m} and \code{mc_conv_info_y} provide information that can help determine the number of Monte Carlo and Bootstrap iterations needed to achieve stability. See the \code{Examples} for more information. +#' @export +#' +#' @examples +#' set.seed(100) +#' # the decomposition functions in our package are computationally intensive +#' # to make the example run quick, I perform it on a subsample (n=250) of the data: +#' cfd.example.sample <- cfd.example.data[sample(250),] +#' mean.results.1 <- cfd.mean(formula.y='out.gauss ~ SES + med.gauss + med.binom + age', +#' formula.m='med.gauss ~ SES + age', +#' mediator='med.gauss', +#' group='SES', +#' data=cfd.example.sample, +#' family.y='gaussian', +#' family.m='gaussian', +#' bs.size=50, +#' mc.size=10, +#' alpha=0.05) +#' # also note that normally we would recommend an bs.size of 250+ +#' # and an mc.size of 50+ +#' # let's interpret the output of this function: +#' mean(mean.results.1$out_nc_y[,2] - mean.results.1$out_nc_y[,1]) +#' # and after giving the gaussian mediator of SES group 2 the distribution of the one in group 1 +#' # the difference becomes: +#' mean(mean.results.1$out_cf_y[,2] - mean.results.1$out_nc_y[,1]) +#' # so the % of the outcome Y that is due to differences between the two SES groups +#' # in the gaussian mediator is +#' mean(1-(mean.results.1$out_cf_y[,2] - mean.results.1$out_nc_y[,1]) / +#' (mean.results.1$out_nc_y[,2] - mean.results.1$out_nc_y[,1])) +#' # we can also get this number, and the one from the comparison of the other SES group +#' # with group 1, straight from the object +#' mean.results.1$mediation +#' # and we can get the 1-alpha CI for each: +#' mean.results.1$mediation_quantile +#' # see README.md for a more detailed description of the functions in this package. +#' @import stats +#' +#' +cfd.mean <- function(formula.y,formula.m,mediator,group, + data, + family.y = 'binomial', + family.m = 'binomial', + bs.size = 1000, + mc.size=50, + alpha=0.05, + sample.resid=FALSE, + print.iteration=FALSE) { + + ## envir check + call <- match.call() + if (missing(data)) + data <- environment(formula.y) + mf <- match.call(expand.dots = FALSE) + + ## get initial fit of outcome y + ini_fit.y <- glm(formula = formula.y, + data=data, family=family.y) + ini_fit.y$model_matrix <- model.matrix(as.formula(formula.y), data = data) + fam.y <- family(ini_fit.y) + + ## get initial fit of mediator m + ini_fit.m <- glm(formula = formula.m, + data=data, family=family.m) + ini_fit.m$model_matrix <- model.matrix(as.formula(formula.m), data = data) + fam.m <- family(ini_fit.m) + + ## loop over bootstrap samples + out_nc_m <- matrix(NA,nrow=bs.size,ncol=nlevels(data[,group]),dimnames = list(1:bs.size,levels(data[,group]))) + out_cf_m <- matrix(NA,nrow=bs.size,ncol=nlevels(data[,group]),dimnames = list(1:bs.size,levels(data[,group]))) + out_nc_y <- matrix(NA,nrow=bs.size,ncol=nlevels(data[,group]),dimnames = list(1:bs.size,levels(data[,group]))) + out_cf_y <- matrix(NA,nrow=bs.size,ncol=nlevels(data[,group]),dimnames = list(1:bs.size,levels(data[,group]))) + + ## temp matrix to save mc results + temp_nc_m <- matrix(NA, nrow=mc.size, ncol=nlevels(data[,group])) + temp_cf_m <- matrix(NA, nrow=mc.size, ncol=nlevels(data[,group])) + temp_nc_y <- matrix(NA, nrow=mc.size, ncol=nlevels(data[,group])) + temp_cf_y <- matrix(NA, nrow=mc.size, ncol=nlevels(data[,group])) + + for(i in 1:bs.size) { + if(print.iteration==TRUE){print(i)} + + ## resampling + resample_ind <- sample(nrow(data), replace=TRUE) + data_bs <- data[resample_ind,] + + ## refit models for y and m + bs_fit.y <- update(ini_fit.y, data = data_bs) + coef_bs.y <- coef(bs_fit.y) + + bs_fit.m <- update(ini_fit.m, data = data_bs) + coef_bs.m <- coef(bs_fit.m) + if(family.m[1]=='gaussian' & sample.resid==FALSE) {sd.ref.m <- sd(bs_fit.m$residuals[data_bs[,group]==levels(data_bs[,group])[1]])} + if(family.m[1]=='gaussian' & sample.resid==TRUE) {resid.ref.m <- bs_fit.m$residuals[data_bs[,group]==levels(data_bs[,group])[1]]} + + # save group identifier in an additional column since + # we overwrite it to create counterfactuals + data_bs$truegroup <- data_bs[,group] + + ## start Monte Carlo loop + ## ! The parametric version does not equalize mediator values over strata + for(ii in 1:mc.size){ + + # save and overwrite data_mc since we create counterfactuals later + data_mc <- data_bs + + ## natural course simulation ## + # simulate mediator + pred_mean_m <- predict(bs_fit.m,data_mc,type='response') + n <- length(pred_mean_m) + if(family.m[1]=='poisson') {data_mc[,mediator] <- rpois(n,pred_mean_m)} else if + (family.m[1]=='binomial') {data_mc[,mediator] <- rbinom(n,1,pred_mean_m)} else if + (family.m[1]=='gaussian' & sample.resid==FALSE) {data_mc[,mediator] <- rnorm(n,pred_mean_m,sd=sd.ref.m)} else if + (family.m[1]=='gaussian' & sample.resid==TRUE) {data_mc[,mediator] <- pred_mean_m + sample(resid.ref.m,n,replace=TRUE)} + temp_nc_m[ii,] <- tapply(data_mc[,mediator], list(data_mc[,group]),mean,na.rm=TRUE) + + # simulate outome + # ! Note that this function predicts means only because it compares means + # ! Hence the entire distribution of values (of the outcome) is not re-created + # ! If that is desired, see the function for the quantiles instead. + pred_mc_nc <- predict(bs_fit.y,data_mc,type='response') + temp_nc_y[ii,] <- tapply(pred_mc_nc, list(data_mc[,group]),mean,na.rm=TRUE) + + ## counterfactual simulation ## + # equalize distribution of mediator + # this is done by assigning everyone the reference group and then (re)predicting + data_mc[,group][which(data_mc[,group] %in% levels(data_mc[,group])[-1])] <- levels(data_mc[,group])[1] + pred_mean_m <- predict(bs_fit.m,data_mc,type='response') + if(family.m[1]=='poisson') {data_mc[,mediator] <- rpois(n,pred_mean_m)} else if + (family.m[1]=='binomial') {data_mc[,mediator] <- rbinom(n,1,pred_mean_m)} else if + (family.m[1]=='gaussian' & sample.resid==FALSE) {data_mc[,mediator] <- rnorm(n,pred_mean_m,sd=sd.ref.m)} else if + (family.m[1]=='gaussian' & sample.resid==TRUE) {data_mc[,mediator] <- pred_mean_m + sample(resid.ref.m,n,replace=TRUE)} + temp_cf_m[ii,] <- tapply(data_mc[,mediator], list(data_mc$truegroup),mean,na.rm=TRUE) + + # set group identifier back to true levels + data_mc[,group] <- data_mc$truegroup + # simulate outcome + pred_mc_cf <- predict(bs_fit.y,data_mc,type='response') + temp_cf_y[ii,] <- tapply(pred_mc_cf, list(data_mc$truegroup),mean,na.rm=TRUE) + + } + + # for thef first bootstrap iteration, also save mc information + # to be used for convergence information + if(i==1) { + mc_conv_info_m <- apply(temp_nc_m,2,conv.mean) + mc_conv_info_y <- apply(temp_nc_y,2,conv.mean) + } + + ## save results for this bootstrap iteration + out_nc_m[i,] <- apply(temp_nc_m,2,mean,na.rm=TRUE) + out_cf_m[i,] <- apply(temp_cf_m,2,mean,na.rm=TRUE) + out_nc_y[i,] <- apply(temp_nc_y,2,mean,na.rm=TRUE) + out_cf_y[i,] <- apply(temp_cf_y,2,mean,na.rm=TRUE) + + } + return(list(out_nc_m=out_nc_m, + out_cf_m=out_cf_m, + out_nc_quantile_m=apply(out_nc_m,2,quantile,c(alpha/2,0.5,1-alpha/2)), + out_cf_quantile_m=apply(out_cf_m,2,quantile,c(alpha/2,0.5,1-alpha/2)), + + out_nc_y=out_nc_y, + out_cf_y=out_cf_y, + out_nc_quantile_y=apply(out_nc_y,2,quantile,c(alpha/2,0.5,1-alpha/2)), + out_cf_quantile_y=apply(out_cf_y,2,quantile,c(alpha/2,0.5,1-alpha/2)), + + mediation=apply(1-(out_cf_y - out_nc_y[,1]) / (out_nc_y - out_nc_y[,1]),2,mean)[-1], + mediation_quantile=apply(1-(out_cf_y - out_nc_y[,1]) / (out_nc_y - out_nc_y[,1]),2,quantile,probs=c(alpha/2,1-alpha/2),na.rm=TRUE)[,-1], + + mc_conv_info_m=mc_conv_info_m, + mc_conv_info_y=mc_conv_info_y + ) + ) +} diff --git a/R/cfd.quantile.R b/R/cfd.quantile.R new file mode 100644 index 0000000..9122687 --- /dev/null +++ b/R/cfd.quantile.R @@ -0,0 +1,203 @@ +#' +#' @title Quantile Decomposition: parametric version +#' +#' @description Decompose the difference in a quantile of some outcome Y between groups. +#' +#' @param formula.y the \code{\link{formula}} for the multivariable model (see \code{\link{glm}}) for the outcome Y. +#' @param formula.m the \code{\link{formula}} for the multivariable model (see \code{\link{glm}}) for the mediator M. +#' @param mediator the column name of the mediator M. +#' @param group column name of the variable containing the group identifier. +#' @param data a data frame containing the variables in the model. +#' @param family.y a description of the error distribution to be used in the model, see \code{\link{family}} for details. For the outcome variable any member of the \code{glm} family can be used. +#' @param family.m a description of the error distribution to be used in the model, see \code{\link{family}} for details. For the mediator, currently \code{gaussian}, \code{binomial} and \code{poisson} are supported. +#' @param bs.size the number of bootstrap iterations to be performed. +#' @param mc.size the number of Monte Carlo iterations to be performed (more = more MC error reduction). +#' @param alpha the alpha level used to construct confidence intervals (0.05 = 95 percent confidence interval). +#' @param probs the quantiles of interest to be decomposed, should be values between 0 and 1. +#' @param sample.resid.y sample.resid if the \code{outcome} is Gaussian, should the simulation sample from the residuals of the linear regression model of the outcome to approximate the empirical distribution of the outcome in the simulation (Monte Carlo integration) (if so, set to \code{TRUE}), or should it sample from a Gaussian distribution with the standard deviation of the outcome? If the true distribution of the continuous outcome is not very Gaussian, the former may be preferred. +#' @param sample.resid.m sample.resid if the \code{mediator} is Gaussian, should the simulation sample from the residuals of the linear regression model of the mediator to approximate the empirical distribution of the mediator in the simulation (Monte Carlo integration) (if so, set to \code{TRUE}), or should it sample from a Gaussian distribution with the standard deviation of the mediator? If the true distribution of the continuous mediator is not very Gaussian, the former may be preferred. +#' @param print.iteration print the bootstrap iteration +#' @return \code{out_nc_m} returns the mean level of the mediator under the natural course, which is a value that should be close to the empirically observed value of the mediator for each group. \code{out_nc_quantile} provides the \code{alpha/2} and \code{1-alpha/2} bootstrap quantiles for this mean (AKA bootstrap percentile confidence intervals). \code{out_nc_y} and \code{out_nc_quantile_y} provide the corresponding values, but then for the outcome variable Y. Similarly, \code{out_cf_m}, \code{out_cf_quantile_m},\code{out_cf_y}, and \code{out_cf_quantile_y} provide the corresponding values for the counterfactual scenario where the mediators of the groups are equalized. \code{mediation} returns the proportion mediated by setting the intervened on mediator to be equal in level to the reference group and \code{mediation_quantile} returns the 1-alpha confidence interval.\code{mc_conv_info_m} and \code{mc_conv_info_y} provide information that can help determine the number of Monte Carlo and Bootstrap iterations needed to achieve stability. See the \code{Examples} for more information. +#' @export +#' +#' @examples +#' set.seed(100) +#' # the decomposition functions in our package are computationally intensive +#' # to make the example run quick, I perform it on a subsample (n=250) of the data: +#' cfd.example.sample <- cfd.example.data[sample(250),] +#' quantile.results.1 <- cfd.quantile(formula.y='out.gauss ~ SES + med.gauss + med.binom + age', +#' formula.m='med.gauss ~ SES + age', +#' mediator='med.gauss', +#' group='SES', +#' data=cfd.example.sample, +#' family.y='gaussian', +#' family.m='gaussian', +#' bs.size=50, +#' mc.size=10, +#' alpha=0.05, +#' probs=0.50) +#' # also note that normally we would recommend an bs.size of 250+ +#' # and an mc.size of 50+ +#' # let's interpret the output of this function: +#' # the differences between SES groups 1 and 2 were first: +#' mean(quantile.results.1$out_nc_y[,2] - quantile.results.1$out_nc_y[,1]) +#' # and after giving the gaussian mediator of SES group 2 the distribution of the one in group 1 +#' # the difference becomes: +#' mean(quantile.results.1$out_cf_y[,2] - quantile.results.1$out_nc_y[,1]) +#' # so the % of the outcome Y that is due to differences between the two SES groups +#' # in the gaussian mediator is +#' mean(1-(quantile.results.1$out_cf_y[,2] - quantile.results.1$out_nc_y[,1]) / +#' (quantile.results.1$out_nc_y[,2] - quantile.results.1$out_nc_y[,1])) +#' # we can also get this number, and the one from the comparison of the other SES group +#' # with group 1, straight from the object +#' quantile.results.1$mediation +#' # and we can get the 1-alpha CI for each: +#' quantile.results.1$mediation_quantile +#' # see README.md for a more detailed description of the functions in this package. +#' @import stats +#' +#' +cfd.quantile <- function(formula.y,formula.m,mediator,group, + data, + family.y = 'binomial', + family.m = 'binomial', + bs.size = 1000, + mc.size=50, + alpha=0.05, + probs=0.50, + sample.resid.y=FALSE, + sample.resid.m=FALSE, + print.iteration=FALSE) { + + ## envir check + call <- match.call() + if (missing(data)) + data <- environment(formula.y) + mf <- match.call(expand.dots = FALSE) + + ## get initial fit of outcome y + ini_fit.y <- glm(formula = formula.y, + data=data, family=family.y) + ini_fit.y$model_matrix <- model.matrix(as.formula(formula.y), data = data) + fam.y <- family(ini_fit.y) + + ## get initial fit of mediator m + ini_fit.m <- glm(formula = formula.m, + data=data, family=family.m) + ini_fit.m$model_matrix <- model.matrix(as.formula(formula.m), data = data) + fam.m <- family(ini_fit.m) + + ## loop over bootstrap samples + out_nc_m <- matrix(NA,nrow=bs.size,ncol=nlevels(data[,group]),dimnames = list(1:bs.size,levels(data[,group]))) + out_cf_m <- matrix(NA,nrow=bs.size,ncol=nlevels(data[,group]),dimnames = list(1:bs.size,levels(data[,group]))) + out_nc_y <- matrix(NA,nrow=bs.size,ncol=nlevels(data[,group]),dimnames = list(1:bs.size,levels(data[,group]))) + out_cf_y <- matrix(NA,nrow=bs.size,ncol=nlevels(data[,group]),dimnames = list(1:bs.size,levels(data[,group]))) + + ## temp matrix to save mc results + temp_nc_m <- matrix(NA, nrow=mc.size, ncol=nlevels(data[,group])) + temp_cf_m <- matrix(NA, nrow=mc.size, ncol=nlevels(data[,group])) + temp_nc_y <- matrix(NA, nrow=mc.size, ncol=nlevels(data[,group])) + temp_cf_y <- matrix(NA, nrow=mc.size, ncol=nlevels(data[,group])) + + for(i in 1:bs.size) { + if(print.iteration==TRUE){print(i)} + + ## resampling + resample_ind <- sample(nrow(data), replace=TRUE) + data_bs <- data[resample_ind,] + + ## refit models for y and m + bs_fit.y <- update(ini_fit.y, data = data_bs) + coef_bs.y <- coef(bs_fit.y) + if(family.y[1]=='gaussian' & sample.resid.y==FALSE) {sd.ref.y <- sd(bs_fit.y$residuals[data_bs[,group]==levels(data_bs[,group])[1]])} + if(family.y[1]=='gaussian' & sample.resid.y==TRUE) {resid.ref.y <- bs_fit.y$residuals[data_bs[,group]==levels(data_bs[,group])[1]]} + + bs_fit.m <- update(ini_fit.m, data = data_bs) + coef_bs.m <- coef(bs_fit.m) + if(family.m[1]=='gaussian' & sample.resid.m==FALSE) {sd.ref.m <- sd(bs_fit.m$residuals[data_bs[,group]==levels(data_bs[,group])[1]])} + if(family.m[1]=='gaussian' & sample.resid.m==TRUE) {resid.ref.m <- bs_fit.m$residuals[data_bs[,group]==levels(data_bs[,group])[1]]} + + # save group identifier in an additional column since + # we overwrite it to create counterfactuals + data_bs$truegroup <- data_bs[,group] + + ## start Monte Carlo loop + ## ! The parametric version does not equalize mediator values over strata + for(ii in 1:mc.size){ + + # save and overwrite data_mc since we create counterfactuals later + data_mc <- data_bs + + ## natural course simulation ## + # simulate mediator + pred_mean_m <- predict(bs_fit.m,data_mc,type='response') + n <- length(pred_mean_m) + if(family.m[1]=='poisson') {data_mc[,mediator] <- rpois(n,pred_mean_m)} else if + (family.m[1]=='binomial') {data_mc[,mediator] <- rbinom(n,1,pred_mean_m)} else if + (family.m[1]=='gaussian' & sample.resid.m==FALSE) {data_mc[,mediator] <- rnorm(n,pred_mean_m,sd=sd.ref.m)} else if + (family.m[1]=='gaussian' & sample.resid.m==TRUE) {data_mc[,mediator] <- pred_mean_m + sample(resid.ref.m,n,replace=TRUE)} + temp_nc_m[ii,] <- tapply(data_mc[,mediator], list(data_mc[,group]),mean,na.rm=TRUE) + + # simulate outome + pred_mean_y <- predict(bs_fit.y,data_mc,type='response') + if(family.y[1]=='poisson') {pred_y <- rpois(n,pred_mean_y)} else if + (family.y[1]=='binomial') {pred_y <- rbinom(n,1,pred_mean_y)} else if + (family.y[1]=='gaussian' & sample.resid.y==FALSE) {pred_y <- rnorm(n,pred_mean_y,sd=sd.ref.y)} else if + (family.y[1]=='gaussian' & sample.resid.y==TRUE) {pred_y <- pred_mean_y + sample(resid.ref.y,n,replace=TRUE)} + temp_nc_y[ii,] <- tapply(pred_y, list(data_mc[,group]),quantile,probs=probs,na.rm=TRUE) + + ## counterfactual simulation ## + # equalize distribution of mediator + # this is done by assigning everyone the reference group and then (re)predicting + data_mc[,group][which(data_mc[,group] %in% levels(data_mc[,group])[-1])] <- levels(data_mc[,group])[1] + pred_mean_m <- predict(bs_fit.m,data_mc,type='response') + if(family.m[1]=='poisson') {data_mc[,mediator] <- rpois(n,pred_mean_m)} else if + (family.m[1]=='binomial') {data_mc[,mediator] <- rbinom(n,1,pred_mean_m)} else if + (family.m[1]=='gaussian' & sample.resid.m==FALSE) {data_mc[,mediator] <- rnorm(n,pred_mean_m,sd=sd.ref.m)} else if + (family.m[1]=='gaussian' & sample.resid.m==TRUE) {data_mc[,mediator] <- pred_mean_m + sample(resid.ref.m,n,replace=TRUE)} + temp_cf_m[ii,] <- tapply(data_mc[,mediator], list(data_mc$truegroup),mean,na.rm=TRUE) + + # set group identifier back to true levels + data_mc[,group] <- data_mc$truegroup + # simulate outcome + pred_mean_y <- predict(bs_fit.y,data_mc,type='response') + if(family.y[1]=='poisson') {pred_y <- rpois(n,pred_mean_y)} else if + (family.y[1]=='binomial') {pred_y <- rbinom(n,1,pred_mean_y)} else if + (family.y[1]=='gaussian' & sample.resid.y==FALSE) {pred_y <- rnorm(n,pred_mean_y,sd=sd.ref.y)} else if + (family.y[1]=='gaussian' & sample.resid.y==TRUE) {pred_y <- pred_mean_y + sample(resid.ref.y,n,replace=TRUE)} + temp_cf_y[ii,] <- tapply(pred_y, list(data_mc$truegroup),quantile,probs=probs,na.rm=TRUE) + + } + + # for thef first bootstrap iteration, also save mc information + # to be used for convergence information + if(i==1) { + mc_conv_info_m <- apply(temp_nc_m,2,conv.mean) + mc_conv_info_y <- apply(temp_nc_y,2,conv.mean) + } + + ## save results for this bootstrap iteration + out_nc_m[i,] <- apply(temp_nc_m,2,mean,na.rm=TRUE) + out_cf_m[i,] <- apply(temp_cf_m,2,mean,na.rm=TRUE) + out_nc_y[i,] <- apply(temp_nc_y,2,mean,na.rm=TRUE) + out_cf_y[i,] <- apply(temp_cf_y,2,mean,na.rm=TRUE) + + } + return(list(out_nc_m=out_nc_m, + out_cf_m=out_cf_m, + out_nc_quantile_m=apply(out_nc_m,2,quantile,c(alpha/2,0.5,1-alpha/2)), + out_cf_quantile_m=apply(out_cf_m,2,quantile,c(alpha/2,0.5,1-alpha/2)), + + out_nc_y=out_nc_y, + out_cf_y=out_cf_y, + out_nc_quantile_y=apply(out_nc_y,2,quantile,c(alpha/2,0.5,1-alpha/2)), + out_cf_quantile_y=apply(out_cf_y,2,quantile,c(alpha/2,0.5,1-alpha/2)), + + mediation=apply(1-(out_cf_y - out_nc_y[,1]) / (out_nc_y - out_nc_y[,1]),2,mean)[-1], + mediation_quantile=apply(1-(out_cf_y - out_nc_y[,1]) / (out_nc_y - out_nc_y[,1]),2,quantile,probs=c(alpha/2,1-alpha/2),na.rm=TRUE)[,-1], + + mc_conv_info_m=mc_conv_info_m, + mc_conv_info_y=mc_conv_info_y + ) + ) +} diff --git a/R/cfd.semipar.mean.R b/R/cfd.semipar.mean.R new file mode 100644 index 0000000..e938379 --- /dev/null +++ b/R/cfd.semipar.mean.R @@ -0,0 +1,150 @@ +#' +#' @title Mean Decomposition: semiparametric version +#' +#' @description Decompose the mean difference in outcome Y between groups. In this semiparametric version, we do not assume a parametric model for the mediator: instead, we sample from the distribution of the mediator in the reference group; this can be done within strata of one or more third variables. +#' +#' @param formula the \code{\link{formula}} for the multivariable model (see \code{\link{glm}}) for the outcome Y. +#' @param mediator the column name of the mediator M. +#' @param group column name of the variable containing the group identifier. +#' @param strata the name of a variable containing the strata of a third variable (or set of variables) within which we equalize mediator values. Ideally this is a factor variable. +#' @param nbin if a numeric (i.e. non-factor or character) strata variable is defined, how many bins should be made from it within which we equalize the mediator distribution? +#' @param data a data frame containing the variables in the model. +#' @param family a description of the error distribution to be used in the model, see \code{\link{family}} for details. For the outcome variable any member of the \code{glm} family can be used. +#' @param bs.size the number of bootstrap iterations to be performed. +#' @param mc.size the number of Monte Carlo iterations to be performed (more = more MC error reduction). +#' @param alpha the alpha level used to construct confidence intervals (0.05 = 95 percent confidence interval). +#' @param print.iteration print the bootstrap iteration +#' +#' @return \code{out_nc} returns the mean level of the outcome under the natural course, which is a value that should be close to the empirically observed value of the outcome for each group. \code{out_nc_quantile} provides the \code{alpha/2} and \code{1-alpha/2} bootstrap quantiles for this mean (AKA bootstrap percentile confidence intervals).Similarly, \code{out_cf}, \code{out_cf_quantile},provide the corresponding values for the counterfactual scenario where the mediators of the groups are equalized. \code{mediation} returns the proportion mediated by setting the intervened on mediator to be equal in level to the reference group and \code{mediation_quantile} returns the 1-alpha confidence interval. +#' @export +#' @examples +#' set.seed(100) +#' # the decomposition functions in our package are computationally intensive +#' # to make the example run quick, I perform it on a subsample (n=250) of the data: +#' cfd.example.sample <- cfd.example.data[sample(250),] +#' mean.semipar.results.1 <- cfd.semipar.mean(formula='out.gauss ~ SES + med.gauss + med.binom + age', +#' mediator='med.gauss', +#' group='SES', +#' strata='age', +#' nbin=5, +#' data=cfd.example.sample, +#' family='gaussian', +#' bs.size=50, +#' mc.size=10, +#' alpha=0.05) +#' # also note that normally we would recommend an bs.size of 250+ +#' # and an mc.size of 50+ +#' # see README.md for a more detailed description of the functions in this package. +#' @import stats +cfd.semipar.mean <- function(formula,mediator,group,strata=NA,nbin=5, + data, + family = 'binomial', + bs.size = 1000, + mc.size=50, + alpha=0.05, + print.iteration=FALSE) { + + ## envir check + call <- match.call() + if (is.character(family)) + family <- get(family, mode = "function", envir = parent.frame()) + if (is.function(family)) + family <- family() + if (is.null(family$family)) { + print(family) + stop("'family' not recognized") + } + if (missing(data)) + data <- environment(formula) + mf <- match.call(expand.dots = FALSE) + + ## get initial fit + ini_fit <- glm(formula = formula, + data=data, family=family) + ini_fit$model_matrix <- model.matrix(as.formula(formula), data = data) + + fam <- family(ini_fit) + + ## loop over bootstrap samples + out_nc <- matrix(NA,nrow=bs.size,ncol=nlevels(data[,group]),dimnames = list(1:bs.size,levels(data[,group]))) + out_cf <- matrix(NA,nrow=bs.size,ncol=nlevels(data[,group]),dimnames = list(1:bs.size,levels(data[,group]))) + + ## temp matrix to save mc results + temp <- matrix(NA, nrow=mc.size, ncol=nlevels(data[,group])) + + for(i in 1:bs.size) { + if(print.iteration==TRUE){print(i)} + + ## resampling + resample_ind <- sample(nrow(data), replace=TRUE) + data_bs <- data[resample_ind,] + + ## refit model + bs_fit <- update(ini_fit, data = data_bs) + coef_bs <- coef(bs_fit) + + ## + pred_bs <- predict(bs_fit,data_bs,type='response') + + # ! Note that this function predicts means only because it compares means + # ! Hence the entire distribution of values is not re-created + # ! If that is desired, see the function for the quantiles instead. + out_nc[i,] <- tapply(pred_bs, list(data_bs[,group]),mean,na.rm=TRUE) + + #### + ## + if(is.na(strata)){ + strata_grp <- rep(1,nrow(data_bs)) + data_bs_grp <- data_bs[,c(mediator,group)] + } + ## + if(!is.na(strata)){ + data_bs_grp <- data_bs[,c(mediator,group,strata)] + for(v in strata){ + if(is.numeric(data_bs_grp[,v])){ + # if the strata variable is a factor, nothing needs to be done to it + # but if the strata variable is numeric, we need to make categories in which to equalize the mediator + if(length(unique(data_bs_grp[,v])) > 20) + data_bs_grp[,v] <- cut(data_bs_grp[,v], breaks=c(quantile(data_bs_grp[,v], probs = seq(0, 1, by = 1/nbin))), include.lowest=TRUE) + + if(length(unique(data_bs_grp[,v])) <= 20) + data_bs_grp[,v] <- factor(data_bs_grp[,v]) + } + } + strata_grp <- do.call(paste,as.list(data_bs_grp[c(strata)])) + } + + ## make the mediator * group distribution equal across strata + ref_level <- levels(data_bs[,group])[1] + ind <- list() + for(lv in unique(strata_grp)){ + ind_ref <- data_bs_grp[,group] == ref_level & strata_grp == lv + ind_other <- data_bs_grp[,group] != ref_level & strata_grp == lv + ind[[lv]] <- list(ind_ref=ind_ref,ind_other=ind_other) + } + + data_bs_mc <- data_bs + for(ii in 1:mc.size){ + ## make the mediator * group distribution equal across strata + for(lv in unique(strata_grp)){ + data_bs_mc[ind[[lv]]$ind_other,mediator] <- sample(data_bs[ind[[lv]]$ind_ref,mediator],sum(ind[[lv]]$ind_other),replace = T) + } + + pred_bs_mc_counterfactual <- predict(bs_fit,data_bs_mc,type='response') + temp[ii,] <- tapply(pred_bs_mc_counterfactual, list(data_bs_mc[,group]),mean,na.rm=TRUE) + + } + ## + out_cf[i,] <- apply(temp,2,mean,na.rm=TRUE) + + } + return(list(out_nc=out_nc, + out_cf=out_cf, + out_nc_quantile=apply(out_nc,2,quantile,c(alpha/2,0.5,1-alpha/2)), + out_cf_quantile=apply(out_cf,2,quantile,c(alpha/2,0.5,1-alpha/2)), + + mediation=apply(1-(out_cf - out_nc[,1]) / (out_nc - out_nc[,1]),2,mean)[-1], + mediation_quantile=apply(1-(out_cf - out_nc[,1]) / (out_nc - out_nc[,1]),2,quantile,probs=c(alpha/2,1-alpha/2),na.rm=TRUE)[,-1] + ) + ) +} diff --git a/R/cfd.semipar.quantile.R b/R/cfd.semipar.quantile.R new file mode 100644 index 0000000..a82c169 --- /dev/null +++ b/R/cfd.semipar.quantile.R @@ -0,0 +1,175 @@ +#' +#' @title Quantile Decomposition: semiparametric version +#' +#' @description Decompose the difference in a quantile of some outcome Y between groups. In this semiparametric version, we do not assume a parametric model for the mediator: instead, we sample from the distribution of the mediator in the reference group; this can be done within strata of one or more third variables. +#' +#' @param formula the \code{\link{formula}} for the multivariable model (see \code{\link{glm}}) for the outcome Y. +#' @param mediator the column name of the mediator M. +#' @param group column name of the variable containing the group identifier. +#' @param strata the name of a variable containing the strata of a third variable (or set of variables) within which we equalize mediator values. +#' @param nbin if a numeric (i.e. non-factor or character) strata variable is defined, how many bins should be made from it within which we equalize the mediator distribution? +#' @param data a data frame containing the variables in the model. +#' @param family a description of the error distribution to be used in the model, see \code{\link{family}} for details. For the outcome variable any member of the \code{glm} family can be used. +#' @param bs.size the number of bootstrap iterations to be performed. +#' @param mc.size the number of Monte Carlo iterations to be performed (more = more MC error reduction). +#' @param alpha the alpha level used to construct confidence intervals (0.05 = 95 percent confidence interval). +#' @param probs the quantiles of interest to be decomposed, should be values between 0 and 1. +#' @param print.iteration print the bootstrap iteration +#' +#' @return \code{out_nc} returns the mean level of the outcome under the natural course, which is a value that should be close to the empirically observed value of the outcome for each group. \code{out_nc_quantile} provides the \code{alpha/2} and \code{1-alpha/2} bootstrap quantiles for this mean (AKA bootstrap percentile confidence intervals).Similarly, \code{out_cf}, \code{out_cf_quantile},provide the corresponding values for the counterfactual scenario where the mediators of the groups are equalized. \code{mediation} returns the proportion mediated by setting the intervened on mediator to be equal in level to the reference group and \code{mediation_quantile} returns the 1-alpha confidence interval. +#' @export +#' @examples +#' set.seed(100) +#' # the decomposition functions in our package are computationally intensive +#' # to make the example run quick, I perform it on a subsample (n=250) of the data: +#' cfd.example.sample <- cfd.example.data[sample(250),] +#' quantile.semipar.results.1 <- cfd.semipar.quantile(formula='out.gauss ~ SES + +#' med.gauss + med.binom + age', +#' mediator='med.gauss', +#' group='SES', +#' strata='age', +#' nbin=5, +#' data=cfd.example.sample, +#' family='gaussian', +#' bs.size=50, +#' mc.size=10, +#' alpha=0.05, +#' probs=0.50) +#' # also note that normally we would recommend an bs.size of 250+ +#' # and an mc.size of 50+ +#' # see README.md for a more detailed description of the functions in this package. +#' @import stats +cfd.semipar.quantile <- function(formula,mediator,group,strata=NA,nbin=5, + data, + family = 'Gaussian', + bs.size = 1000, + mc.size=50, + alpha=0.05, + probs=0.50, + print.iteration=FALSE) { + + ## envir check + call <- match.call() + if (is.character(family)) + family <- get(family, mode = "function", envir = parent.frame()) + if (is.function(family)) + family <- family() + if (is.null(family$family)) { + print(family) + stop("'family' not recognized") + } + if (missing(data)) + data <- environment(formula) + mf <- match.call(expand.dots = FALSE) + + ## get initial fit + ini_fit <- glm(formula = formula, + data=data, family=family) + ini_fit$model_matrix <- model.matrix(as.formula(formula), data = data) + + fam <- family(ini_fit) + + ## loop over bootstrap samples + out_nc <- matrix(NA,nrow=bs.size,ncol=nlevels(data[,group]),dimnames = list(1:bs.size,levels(data[,group]))) + out_cf <- matrix(NA,nrow=bs.size,ncol=nlevels(data[,group]),dimnames = list(1:bs.size,levels(data[,group]))) + + ## temp matrix to save mc results + temp.nc <- matrix(NA, nrow=mc.size, ncol=nlevels(data[,group])) + temp.cf <- matrix(NA, nrow=mc.size, ncol=nlevels(data[,group])) + + for(i in 1:bs.size) { + if(print.iteration==TRUE){print(i)} + + ## resampling + resample_ind <- sample(nrow(data), replace=TRUE) + data_bs <- data[resample_ind,] + + ## refit model + bs_fit <- update(ini_fit, data = data_bs) + coef_bs <- coef(bs_fit) + + data_bs_mc <- data_bs + n <- length(predict(bs_fit,data_bs,type='response')) + sd.mc <- sd(bs_fit$residuals) + for(ii in 1:mc.size){ + + if(family[1]=='poisson') {pred_bs <- rpois(n,predict(bs_fit,data_bs,type='response'))} else if + (family[1]=='gaussian') {pred_bs <- rnorm(n,predict(bs_fit,data_bs,type='response'),sd=sd.mc)} + + # ! This is where the natural course predictions have been made + # ! And below the code will take quantiles for each group + # ! Edit the code here if you want to take some other moment instead, + # ! or if you want to age standardize, etc. + # ! see also code below for the counterfactual predictions + + temp.nc[ii,] <- tapply(pred_bs, list(data_bs[,group]),quantile,probs,probs,na.rm=TRUE) + + } + out_nc[i,] <- apply(temp.nc, 2, mean) + + #### + ## + if(is.na(strata)){ + strata_grp <- rep(1,nrow(data_bs)) + data_bs_grp <- data_bs[,c(mediator,group)] + } + ## + if(!is.na(strata)){ + data_bs_grp <- data_bs[,c(mediator,group,strata)] + for(v in strata){ + if(is.numeric(data_bs_grp[,v])){ + # if the strata variable is a factor, nothing needs to be done to it + # but if the strata variable is numeric, we need to make categories in which to equalize the mediator + if(length(unique(data_bs_grp[,v])) > 20) + data_bs_grp[,v] <- cut(data_bs_grp[,v], breaks=c(quantile(data_bs_grp[,v], probs = seq(0, 1, by = 1/nbin))), include.lowest=TRUE) + + if(length(unique(data_bs_grp[,v])) <= 20) + data_bs_grp[,v] <- factor(data_bs_grp[,v]) + } + } + strata_grp <- do.call(paste,as.list(data_bs_grp[c(strata)])) + } + + ## make the mediator * group distribution equal across strata + ref_level <- levels(data_bs[,group])[1] + ind <- list() + for(lv in unique(strata_grp)){ + ind_ref <- data_bs_grp[,group] == ref_level & strata_grp == lv + ind_other <- data_bs_grp[,group] != ref_level & strata_grp == lv + ind[[lv]] <- list(ind_ref=ind_ref,ind_other=ind_other) + } + + data_bs_mc <- data_bs + for(ii in 1:mc.size){ + ## make the mediator * group distribution equal across strata + for(lv in unique(strata_grp)){ + data_bs_mc[ind[[lv]]$ind_other,mediator] <- sample(data_bs[ind[[lv]]$ind_ref,mediator],sum(ind[[lv]]$ind_other),replace = T) + } + + if(family[1]=='poisson') {pred_bs_mc_cf <- rpois(n,predict(bs_fit,data_bs_mc,type='response'))} else if + (family[1]=='gaussian') {pred_bs_mc_cf <- rnorm(n,predict(bs_fit,data_bs_mc,type='response'),sd=sd.mc)} + + # ! This is where the counterfactual predictions have been made + # ! And below the code will take quantiles for each group + # ! Edit the code here if you want to take some other moment instead, + # ! or if you want to age standardize, etc. + temp.cf[ii,] <- tapply(pred_bs_mc_cf, list(data_bs_mc[,group]),quantile,probs=probs,na.rm=TRUE) + + } + + ## + out_cf[i,] <- apply(temp.cf,2,mean,na.rm=TRUE) + + } + + return(list(out_nc=out_nc, + out_cf=out_cf, + out_nc_quantile=apply(out_nc,2,quantile,c(alpha/2,0.5,1-alpha/2)), + out_cf_quantile=apply(out_cf,2,quantile,c(alpha/2,0.5,1-alpha/2)), + + mediation=apply(1-(out_cf - out_nc[,1]) / (out_nc - out_nc[,1]),2,mean)[-1], + mediation_quantile=apply(1-(out_cf - out_nc[,1]) / (out_nc - out_nc[,1]),2,quantile,probs=c(alpha/2,1-alpha/2),na.rm=TRUE)[,-1] + + ) + ) +} diff --git a/R/conv.mean.R b/R/conv.mean.R new file mode 100644 index 0000000..08bb16c --- /dev/null +++ b/R/conv.mean.R @@ -0,0 +1,14 @@ +#' +#' @title Running mean function +#' +#' @description A running mean, intended to check when convergence is achieved (useful for setting mcsize or bssize). +#' +#' @param x a variable whose convergence we want to check +#' +#' @return returns a running mean of the variable whose convergence we want to check +#' @export +#' +#' @import stats +#' +#' +conv.mean <- function(x) {cumsum(x)/(1:length(x))} diff --git a/README.md b/README.md new file mode 100644 index 0000000..e385a3f --- /dev/null +++ b/README.md @@ -0,0 +1,365 @@ + + + +# cfdecomp v0.1.0 + + + +[![Build +Status](https://travis-ci.com/MaartenBijlsma/cfdecomp.svg?branch=master)](https://travis-ci.com/MaartenBijlsma/cfdecomp) + + +cfdecomp stands for ‘counterfactual decomposition’. This package +provides functions to decompose differences in an outcome attributable +to a mediating variable (or sets of mediating variables) between groups +based on counterfactual (causal inference) theory. By using Monte Carlo +(MC) integration (simulations based on empirical estimates from +multivariable models) we provide added flexibility compared to existing +(analytical) approaches, at the cost of computational power or time. The +added flexibility means that we can decompose difference between groups +in any outcome or and with any mediator (any variable type and +distribution). See [Sudharsanan & Bijlsma +(2019)](https://dx.doi.org/10.4054/MPIDR-WP-2019-004) for more +information. + +## Installation + +You can install the released version of cfdecomp from +[CRAN](https://CRAN.R-project.org) with: + +``` r +install.packages("cfdecomp") +``` + +## Example + +``` r +library(cfdecomp) + +formula.y.example <- 'out.gauss ~ med.gauss + age + med.binom' +formula.m.example <- 'med.gauss ~ age' + +# run the procedure for a gaussian outcome and gaussian mediator +mean.results.1 <- cfd.mean(formula.y='out.gauss ~ SES + med.gauss + med.binom + age', + formula.m='med.gauss ~ SES + age', + mediator='med.gauss', + group='SES', + data=cfd.example.data, + family.y='gaussian', + family.m='gaussian', + bs.size=250, + mc.size=50, + alpha=0.05) + +# see if our modelling procedure approximates the mean of the mediator well +# for SES group 1 +hist(mean.results.1$out_nc_m[,1],col='grey',xlab='MC iteration means of M of SES group 1', + main='Comparison of MC approximation to empirical mean of mediator M') +# place empirical mean of M in the histogram: +abline(v=mean(cfd.example.data$med.gauss[cfd.example.data$SES==1]),lwd=4) +``` + + + +``` r +# approximation of the mean of M over the Monte Carlo iterations for SES group 1: +mean(mean.results.1$out_nc_m[,1]) +#> [1] 8.166413 +# empirical mean of mediator M for SES group 1: +mean(cfd.example.data$med.gauss[cfd.example.data$SES==1]) +#> [1] 8.163461 +# conclusion: on average, our distributions of means of M centers on the empirical distribution of M + +# for SES group 2 +hist(mean.results.1$out_nc_m[,2],col='grey',xlab='MC iteration means of M of SES group 2', + main='Comparison of MC approximation to empirical mean of mediator M') +# place empirical mean of M in the histogram: +abline(v=mean(cfd.example.data$med.gauss[cfd.example.data$SES==2]),lwd=4) +``` + + + +``` r +mean(mean.results.1$out_nc_m[,2]);mean(cfd.example.data$med.gauss[cfd.example.data$SES==2]) +#> [1] 7.181744 +#> [1] 7.186521 +# conclusion: also for group 2, approximation is good + +# for SES group 3 +hist(mean.results.1$out_nc_m[,3],col='grey',xlab='MC iteration means of M of SES group 3', + main='Comparison of MC approximation to empirical mean of mediator M') +# place empirical mean of M in the histogram: +abline(v=mean(cfd.example.data$med.gauss[cfd.example.data$SES==3]),lwd=4) +``` + + + +``` r +mean(mean.results.1$out_nc_m[,3]);mean(cfd.example.data$med.gauss[cfd.example.data$SES==3]) +#> [1] 5.377593 +#> [1] 5.376548 +# conclusion: also for group 3, approximation of M is good + +# see if our modelling procedure approximates the mean of outcome Y well +# for SES group 1 +hist(mean.results.1$out_nc_y[,1],col='grey',xlab='MC iteration means of Y of SES group 1', + main='Comparison of MC approximation to empirical mean of outcome Y') +# place empirical mean of outcome Y in the histogram: +abline(v=mean(cfd.example.data$out.gauss[cfd.example.data$SES==1]),lwd=4) +``` + + + +``` r +mean(mean.results.1$out_nc_y[,1]);mean(cfd.example.data$out.gauss[cfd.example.data$SES==1]) +#> [1] 4.147698 +#> [1] 4.145881 +# conclusion: on average, our distributions of means of Y centers on the empirical distribution of Y + +# for SES group 2 +hist(mean.results.1$out_nc_y[,2],col='grey',xlab='MC iteration means of Y of SES group 2', + main='Comparison of MC approximation to empirical mean of outcome Y') +# place empirical mean of outcome Y in the histogram: +abline(v=mean(cfd.example.data$out.gauss[cfd.example.data$SES==2]),lwd=4) +``` + + + +``` r +mean(mean.results.1$out_nc_y[,2]);mean(cfd.example.data$out.gauss[cfd.example.data$SES==2]) +#> [1] 3.28048 +#> [1] 3.284409 +# conclusion: also for group 2, approximation of Y is good + +# for SES group 3 +hist(mean.results.1$out_nc_y[,3],col='grey',xlab='MC iteration means of Y of SES group 3', + main='Comparison of MC approximation to empirical mean of outcome Y') +# place empirical mean of outcome Y in the histogram: +abline(v=mean(cfd.example.data$out.gauss[cfd.example.data$SES==3]),lwd=4) +``` + + + +``` r +mean(mean.results.1$out_nc_y[,3]);mean(cfd.example.data$out.gauss[cfd.example.data$SES==3]) +#> [1] 2.226078 +#> [1] 2.227222 +# conclusion: also for group 3, approximation of Y is good + +# looks good! + +# estimate the effect of the intervention and proportion mediated (decomposition) +# the differences between SES groups 1 and 2 were first: +mean(mean.results.1$out_nc_y[,2] - mean.results.1$out_nc_y[,1]) +#> [1] -0.8672176 +# and after giving the gaussian mediator of SES group 2 the distribution of the one in group 1 +# the difference becomes: +mean(mean.results.1$out_cf_y[,2] - mean.results.1$out_nc_y[,1]) +#> [1] -0.6582674 +# so the proportion of the outcome Y that is due to differences between the two SES groups in the gaussian mediator is +mean(1-(mean.results.1$out_cf_y[,2] - mean.results.1$out_nc_y[,1]) / (mean.results.1$out_nc_y[,2] - mean.results.1$out_nc_y[,1])) +#> [1] 0.2412226 +# we can also get this number, and the one from the comparison of the other SES group with group 1, straight from the object +mean.results.1$mediation +#> 2 3 +#> 0.2412226 0.3067384 +# you'll notice the first number is the same as the one we calculated ourselves from the output +# this is the proportion mediated when coming the first and the second SES group +# the second number is the proportion mediated when comparing the first and the third SES group +# and we can get the 1-alpha confidence intervals for each: +mean.results.1$mediation_quantile +#> 2 3 +#> 2.5% 0.2101112 0.2812851 +#> 97.5% 0.2788443 0.3319271 + +# if a mediator is binomial distributed +mean.results.2 <- cfd.mean(formula.y='out.gauss ~ med.pois + age + med.binom', + formula.m='med.binom ~ age', + mediator='med.binom', + group='SES', + data=cfd.example.data, + family.y='gaussian', + family.m='binomial', + bs.size=250, + mc.size=50, + alpha=0.05) + +# if a mediator is Poisson distributed +mean.results.3 <- cfd.mean(formula.y='out.gauss ~ med.pois + age + med.binom', + formula.m='med.pois ~ age', + mediator='med.pois', + group='SES', + data=cfd.example.data, + family.y='gaussian', + family.m='poisson', + bs.size=250, + mc.size=50, + alpha=0.05) + +# we have chosen 50 Monte Carlo iterations and 250 bootstrap iterations +# are these number enough for stability? (also consider the scale of the Y-axis) + +# bootstrap, mediator, by SES group +plot(conv.mean(mean.results.1$out_nc_m[,1]),type='l',ylab='Cumulative average of M', + main='Bootstrap stability in SES group 1',xlab='Bootstrap iteration') +``` + + + +``` r +plot(conv.mean(mean.results.1$out_nc_m[,2]),type='l',ylab='Cumulative average of M', + main='Bootstrap stability in SES group 2',xlab='Bootstrap iteration') +``` + + + +``` r +plot(conv.mean(mean.results.1$out_nc_m[,3]),type='l',ylab='Cumulative average of M', + main='Bootstrap stability in SES group 3',xlab='Bootstrap iteration') +``` + + + +``` r + +# bootstrap, outcome, by SES group +plot(conv.mean(mean.results.1$out_nc_y[,1]),type='l',ylab='Cumulative average of Y', + main='Bootstrap stability in SES group 1',xlab='Bootstrap iteration') +``` + + + +``` r +plot(conv.mean(mean.results.1$out_nc_y[,2]),type='l',ylab='Cumulative average of Y', + main='Bootstrap stability in SES group 2',xlab='Bootstrap iteration') +``` + + + +``` r +plot(conv.mean(mean.results.1$out_nc_y[,3]),type='l',ylab='Cumulative average of Y', + main='Bootstrap stability in SES group 3',xlab='Bootstrap iteration') +``` + + + +``` r +# a bootstrap size of 250 is more than enough for stability of the estimate +# of course, we want a large size to also get precise quantiles (confidence intervals) + +# for mc iterations, let's first get some insight by going a higher mc.size number and only 1 bootstrap iteration +x <- cfd.mean(formula.y='out.gauss ~ med.pois + age + med.binom', + formula.m='med.pois ~ age', + mediator='med.pois', + group='SES', + data=cfd.example.data, + family.y='gaussian', + family.m='poisson', + bs.size=1, + mc.size=250, + alpha=0.05) + +# Monte Carlo, mediator, by SES group +plot(x$mc_conv_info_m[,1],type='l',ylab='Cumulative average of M', + main='Monte Carlo stability in SES group 1',xlab='Monte Carlo iteration') +``` + + + +``` r +plot(x$mc_conv_info_m[,2],type='l',ylab='Cumulative average of M', + main='Monte Carlo stability in SES group 2',xlab='Monte Carlo iteration') +``` + + + +``` r +plot(x$mc_conv_info_m[,3],type='l',ylab='Cumulative average of M', + main='Monte Carlo stability in SES group 3',xlab='Monte Carlo iteration') +``` + + + +``` r + +# Bootstrap, mediator, by SES group +plot(x$mc_conv_info_y[,1],type='l',ylab='Cumulative average of Y', + main='Monte Carlo stability in SES group 1',xlab='Monte Carlo iteration') +``` + + + +``` r +plot(x$mc_conv_info_y[,2],type='l',ylab='Cumulative average of Y', + main='Monte Carlo stability in SES group 2',xlab='Monte Carlo iteration') +``` + + + +``` r +plot(x$mc_conv_info_y[,3],type='l',ylab='Cumulative average of Y', + main='Monte Carlo stability in SES group 3',xlab='Monte Carlo iteration') +``` + + + +``` r + +# 50 Monte Carlo iterations seems very sufficient + + +# modelling some quantile of outcome Y (probs=0.50 = median) +quantile.results.1 <- cfd.quantile(formula.y='out.gauss ~ SES + med.gauss + med.binom + age', + formula.m='med.gauss ~ SES + age', + mediator='med.gauss', + group='SES', + data=cfd.example.data, + family.y='gaussian', + family.m='gaussian', + bs.size=250, + mc.size=50, + alpha=0.05, + probs=0.50) + +# the distribution of the residuals of the mediator or outcome is very non-normal +# (in the example they are normal) we can also choose to sample from the residuals +# of their models rather than assume normality +quantile.results.2 <- cfd.quantile(formula.y='out.gauss ~ SES + med.gauss + med.binom + age', + formula.m='med.gauss ~ SES + age', + mediator='med.gauss', + group='SES', + data=cfd.example.data, + family.y='gaussian', + family.m='gaussian', + bs.size=250, + mc.size=50, + alpha=0.05, + probs=0.50, + sample.resid.y=TRUE, + sample.resid.m=TRUE) + + +# semi-parametric estimation ... +mean.semipar.results.1 <- cfd.semipar.mean(formula='out.gauss ~ SES + med.gauss + med.binom + age', + mediator='med.gauss', + group='SES', + strata='age', + nbin=5, + data=cfd.example.data, + family='gaussian', + bs.size=250, + mc.size=50, + alpha=0.05) + +quantile.semipar.results.1 <- cfd.semipar.quantile(formula='out.gauss ~ SES + med.gauss + med.binom + age', + mediator='med.gauss', + group='SES', + strata='age', + nbin=5, + data=cfd.example.data, + family='gaussian', + bs.size=250, + mc.size=50, + alpha=0.05, + probs=0.50) +``` diff --git a/data/cfd.example.data.rda b/data/cfd.example.data.rda new file mode 100644 index 0000000000000000000000000000000000000000..5c6b36e449e2073121ef132ed795bc917882fb02 GIT binary patch literal 93948 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 literal 0 HcmV?d00001 diff --git a/man/cfd.example.data.Rd b/man/cfd.example.data.Rd new file mode 100644 index 0000000..a556731 --- /dev/null +++ b/man/cfd.example.data.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cfd.example.data.R +\docType{data} +\name{cfd.example.data} +\alias{cfd.example.data} +\title{Example Data for the cfdecomp package} +\format{a dataframe with 6 columns, which are: +\describe{ +\item{SES}{a factor variable with 3 levels, denoting three groups to be compared. SES stands for socio-economic status.} +\item{age}{a continuous variable going from 40 to 65. Age could stand for age in years.} +\item{med.gauss}{a mediator that is a continuous variable and normally distributed.} +\item{med.binom}{a mediator that is binomial.} +\item{med.pois}{a mediator that is a count variable and poisson distributed.} +\item{out.gauss}{an outcome that is a continuous variable and normally distributed.} +}} +\usage{ +cfd.example.data +} +\description{ +A dataframe with artificially generated data, intended to be used in a demonstration of the functions in this package. +} +\keyword{datasets} diff --git a/man/cfd.mean.Rd b/man/cfd.mean.Rd new file mode 100644 index 0000000..d9336c8 --- /dev/null +++ b/man/cfd.mean.Rd @@ -0,0 +1,85 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cfd.mean.R +\name{cfd.mean} +\alias{cfd.mean} +\title{Mean Decomposition: parametric version} +\usage{ +cfd.mean( + formula.y, + formula.m, + mediator, + group, + data, + family.y = "binomial", + family.m = "binomial", + bs.size = 1000, + mc.size = 50, + alpha = 0.05, + sample.resid = FALSE, + print.iteration = FALSE +) +} +\arguments{ +\item{formula.y}{the \code{\link{formula}} for the multivariable model (see \code{\link{glm}}) for the outcome Y.} + +\item{formula.m}{the \code{\link{formula}} for the multivariable model (see \code{\link{glm}}) for the mediator M.} + +\item{mediator}{the column name of the mediator M.} + +\item{group}{column name of a factor variable containing the group identifier.} + +\item{data}{a data frame containing the variables in the model.} + +\item{family.y}{a description of the error distribution to be used in the model, see \code{\link{family}} for details. For the outcome variable any member of the \code{glm} family can be used.} + +\item{family.m}{a description of the error distribution to be used in the model, see \code{\link{family}} for details. For the mediator, currently \code{gaussian}, \code{binomial} and \code{poisson} are supported.} + +\item{bs.size}{the number of bootstrap iterations to be performed.} + +\item{mc.size}{the number of Monte Carlo iterations to be performed (more = more MC error reduction).} + +\item{alpha}{the alpha level used to construct confidence intervals (0.05 = 95 percent confidence interval).} + +\item{sample.resid}{if the \code{mediator} is Gaussian, should the simulation sample from the residuals of the linear regression model of the mediator to approximate the empirical distribution of the mediator in the simulation (Monte Carlo integration) (if so, set to \code{TRUE}), or should it sample from a Gaussian distribution with the standard deviation of the mediator? If the true distribution of the continuous mediator is not very Gaussian, the former may be preferred.} + +\item{print.iteration}{print the bootstrap iteration} +} +\value{ +\code{out_nc_m} returns the mean level of the mediator under the natural course, which is a value that should be close to the empirically observed value of the mediator for each group. \code{out_nc_quantile} provides the \code{alpha/2} and \code{1-alpha/2} bootstrap quantiles for this mean (AKA bootstrap percentile confidence intervals). \code{out_nc_y} and \code{out_nc_quantile_y} provide the corresponding values, but then for the outcome variable Y. Similarly, \code{out_cf_m}, \code{out_cf_quantile_m},\code{out_cf_y}, and \code{out_cf_quantile_y} provide the corresponding values for the counterfactual scenario where the mediators of the groups are equalized. \code{mediation} returns the proportion mediated by setting the intervened on mediator to be equal in level to the reference group and \code{mediation_quantile} returns the 1-alpha confidence interval. \code{mc_conv_info_m} and \code{mc_conv_info_y} provide information that can help determine the number of Monte Carlo and Bootstrap iterations needed to achieve stability. See the \code{Examples} for more information. +} +\description{ +Decompose the mean difference in outcome Y between groups. +} +\examples{ +set.seed(100) +# the decomposition functions in our package are computationally intensive +# to make the example run quick, I perform it on a subsample (n=500) of the data: +cfd.example.sample <- cfd.example.data[sample(500),] +mean.results.1 <- cfd.mean(formula.y='out.gauss ~ SES + med.gauss + med.binom + age', + formula.m='med.gauss ~ SES + age', + mediator='med.gauss', + group='SES', + data=cfd.example.sample, + family.y='gaussian', + family.m='gaussian', + bs.size=50, + mc.size=10, + alpha=0.05) +# also note that normally we would recommend an bs.size of 250+ +# and an mc.size of 50+ +# let's interpret the output of this function: +mean(mean.results.1$out_nc_y[,2] - mean.results.1$out_nc_y[,1]) +# and after giving the gaussian mediator of SES group 2 the distribution of the one in group 1 +# the difference becomes: +mean(mean.results.1$out_cf_y[,2] - mean.results.1$out_nc_y[,1]) +# so the \% of the outcome Y that is due to differences between the two SES groups +# in the gaussian mediator is +mean(1-(mean.results.1$out_cf_y[,2] - mean.results.1$out_nc_y[,1]) / +(mean.results.1$out_nc_y[,2] - mean.results.1$out_nc_y[,1])) +# we can also get this number, and the one from the comparison of the other SES group +# with group 1, straight from the object +mean.results.1$mediation +# and we can get the 1-alpha CI for each: +mean.results.1$mediation_quantile +# see README.md for a more detailed description of the functions in this package. +} diff --git a/man/cfd.quantile.Rd b/man/cfd.quantile.Rd new file mode 100644 index 0000000..5a72c0f --- /dev/null +++ b/man/cfd.quantile.Rd @@ -0,0 +1,93 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cfd.quantile.R +\name{cfd.quantile} +\alias{cfd.quantile} +\title{Quantile Decomposition: parametric version} +\usage{ +cfd.quantile( + formula.y, + formula.m, + mediator, + group, + data, + family.y = "binomial", + family.m = "binomial", + bs.size = 1000, + mc.size = 50, + alpha = 0.05, + probs = 0.5, + sample.resid.y = FALSE, + sample.resid.m = FALSE, + print.iteration = FALSE +) +} +\arguments{ +\item{formula.y}{the \code{\link{formula}} for the multivariable model (see \code{\link{glm}}) for the outcome Y.} + +\item{formula.m}{the \code{\link{formula}} for the multivariable model (see \code{\link{glm}}) for the mediator M.} + +\item{mediator}{the column name of the mediator M.} + +\item{group}{column name of the variable containing the group identifier.} + +\item{data}{a data frame containing the variables in the model.} + +\item{family.y}{a description of the error distribution to be used in the model, see \code{\link{family}} for details. For the outcome variable any member of the \code{glm} family can be used.} + +\item{family.m}{a description of the error distribution to be used in the model, see \code{\link{family}} for details. For the mediator, currently \code{gaussian}, \code{binomial} and \code{poisson} are supported.} + +\item{bs.size}{the number of bootstrap iterations to be performed.} + +\item{mc.size}{the number of Monte Carlo iterations to be performed (more = more MC error reduction).} + +\item{alpha}{the alpha level used to construct confidence intervals (0.05 = 95 percent confidence interval).} + +\item{probs}{the quantiles of interest to be decomposed, should be values between 0 and 1.} + +\item{sample.resid.y}{sample.resid if the \code{outcome} is Gaussian, should the simulation sample from the residuals of the linear regression model of the outcome to approximate the empirical distribution of the outcome in the simulation (Monte Carlo integration) (if so, set to \code{TRUE}), or should it sample from a Gaussian distribution with the standard deviation of the outcome? If the true distribution of the continuous outcome is not very Gaussian, the former may be preferred.} + +\item{sample.resid.m}{sample.resid if the \code{mediator} is Gaussian, should the simulation sample from the residuals of the linear regression model of the mediator to approximate the empirical distribution of the mediator in the simulation (Monte Carlo integration) (if so, set to \code{TRUE}), or should it sample from a Gaussian distribution with the standard deviation of the mediator? If the true distribution of the continuous mediator is not very Gaussian, the former may be preferred.} + +\item{print.iteration}{print the bootstrap iteration} +} +\value{ +\code{out_nc_m} returns the mean level of the mediator under the natural course, which is a value that should be close to the empirically observed value of the mediator for each group. \code{out_nc_quantile} provides the \code{alpha/2} and \code{1-alpha/2} bootstrap quantiles for this mean (AKA bootstrap percentile confidence intervals). \code{out_nc_y} and \code{out_nc_quantile_y} provide the corresponding values, but then for the outcome variable Y. Similarly, \code{out_cf_m}, \code{out_cf_quantile_m},\code{out_cf_y}, and \code{out_cf_quantile_y} provide the corresponding values for the counterfactual scenario where the mediators of the groups are equalized. \code{mediation} returns the proportion mediated by setting the intervened on mediator to be equal in level to the reference group and \code{mediation_quantile} returns the 1-alpha confidence interval.\code{mc_conv_info_m} and \code{mc_conv_info_y} provide information that can help determine the number of Monte Carlo and Bootstrap iterations needed to achieve stability. See the \code{Examples} for more information. +} +\description{ +Decompose the difference in a quantile of some outcome Y between groups. +} +\examples{ +set.seed(100) +# the decomposition functions in our package are computationally intensive +# to make the example run quick, I perform it on a subsample (n=500) of the data: +cfd.example.sample <- cfd.example.data[sample(500),] +quantile.results.1 <- cfd.quantile(formula.y='out.gauss ~ SES + med.gauss + med.binom + age', + formula.m='med.gauss ~ SES + age', + mediator='med.gauss', + group='SES', + data=cfd.example.sample, + family.y='gaussian', + family.m='gaussian', + bs.size=50, + mc.size=10, + alpha=0.05, + probs=0.50) +# also note that normally we would recommend an bs.size of 250+ +# and an mc.size of 50+ +# let's interpret the output of this function: +# the differences between SES groups 1 and 2 were first: +mean(quantile.results.1$out_nc_y[,2] - quantile.results.1$out_nc_y[,1]) +# and after giving the gaussian mediator of SES group 2 the distribution of the one in group 1 +# the difference becomes: +mean(quantile.results.1$out_cf_y[,2] - quantile.results.1$out_nc_y[,1]) +# so the \% of the outcome Y that is due to differences between the two SES groups +# in the gaussian mediator is +mean(1-(quantile.results.1$out_cf_y[,2] - quantile.results.1$out_nc_y[,1]) / +(quantile.results.1$out_nc_y[,2] - quantile.results.1$out_nc_y[,1])) +# we can also get this number, and the one from the comparison of the other SES group +# with group 1, straight from the object +quantile.results.1$mediation +# and we can get the 1-alpha CI for each: +quantile.results.1$mediation_quantile +# see README.md for a more detailed description of the functions in this package. +} diff --git a/man/cfd.semipar.mean.Rd b/man/cfd.semipar.mean.Rd new file mode 100644 index 0000000..42f3776 --- /dev/null +++ b/man/cfd.semipar.mean.Rd @@ -0,0 +1,68 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cfd.semipar.mean.R +\name{cfd.semipar.mean} +\alias{cfd.semipar.mean} +\title{Mean Decomposition: semiparametric version} +\usage{ +cfd.semipar.mean( + formula, + mediator, + group, + strata = NA, + nbin = 5, + data, + family = "binomial", + bs.size = 1000, + mc.size = 50, + alpha = 0.05, + print.iteration = FALSE +) +} +\arguments{ +\item{formula}{the \code{\link{formula}} for the multivariable model (see \code{\link{glm}}) for the outcome Y.} + +\item{mediator}{the column name of the mediator M.} + +\item{group}{column name of the variable containing the group identifier.} + +\item{strata}{the name of a variable containing the strata of a third variable (or set of variables) within which we equalize mediator values. Ideally this is a factor variable.} + +\item{nbin}{if a numeric (i.e. non-factor or character) strata variable is defined, how many bins should be made from it within which we equalize the mediator distribution?} + +\item{data}{a data frame containing the variables in the model.} + +\item{family}{a description of the error distribution to be used in the model, see \code{\link{family}} for details. For the outcome variable any member of the \code{glm} family can be used.} + +\item{bs.size}{the number of bootstrap iterations to be performed.} + +\item{mc.size}{the number of Monte Carlo iterations to be performed (more = more MC error reduction).} + +\item{alpha}{the alpha level used to construct confidence intervals (0.05 = 95 percent confidence interval).} + +\item{print.iteration}{print the bootstrap iteration} +} +\value{ +\code{out_nc} returns the mean level of the outcome under the natural course, which is a value that should be close to the empirically observed value of the outcome for each group. \code{out_nc_quantile} provides the \code{alpha/2} and \code{1-alpha/2} bootstrap quantiles for this mean (AKA bootstrap percentile confidence intervals).Similarly, \code{out_cf}, \code{out_cf_quantile},provide the corresponding values for the counterfactual scenario where the mediators of the groups are equalized. \code{mediation} returns the proportion mediated by setting the intervened on mediator to be equal in level to the reference group and \code{mediation_quantile} returns the 1-alpha confidence interval. +} +\description{ +Decompose the mean difference in outcome Y between groups. In this semiparametric version, we do not assume a parametric model for the mediator: instead, we sample from the distribution of the mediator in the reference group; this can be done within strata of one or more third variables. +} +\examples{ +set.seed(100) +# the decomposition functions in our package are computationally intensive +# to make the example run quick, I perform it on a subsample (n=500) of the data: +cfd.example.sample <- cfd.example.data[sample(500),] +mean.semipar.results.1 <- cfd.semipar.mean(formula='out.gauss ~ SES + med.gauss + med.binom + age', + mediator='med.gauss', + group='SES', + strata='age', + nbin=5, + data=cfd.example.sample, + family='gaussian', + bs.size=50, + mc.size=10, + alpha=0.05) +# also note that normally we would recommend an bs.size of 250+ +# and an mc.size of 50+ +# see README.md for a more detailed description of the functions in this package. +} diff --git a/man/cfd.semipar.quantile.Rd b/man/cfd.semipar.quantile.Rd new file mode 100644 index 0000000..2e755f7 --- /dev/null +++ b/man/cfd.semipar.quantile.Rd @@ -0,0 +1,73 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cfd.semipar.quantile.R +\name{cfd.semipar.quantile} +\alias{cfd.semipar.quantile} +\title{Quantile Decomposition: semiparametric version} +\usage{ +cfd.semipar.quantile( + formula, + mediator, + group, + strata = NA, + nbin = 5, + data, + family = "Gaussian", + bs.size = 1000, + mc.size = 50, + alpha = 0.05, + probs = 0.5, + print.iteration = FALSE +) +} +\arguments{ +\item{formula}{the \code{\link{formula}} for the multivariable model (see \code{\link{glm}}) for the outcome Y.} + +\item{mediator}{the column name of the mediator M.} + +\item{group}{column name of the variable containing the group identifier.} + +\item{strata}{the name of a variable containing the strata of a third variable (or set of variables) within which we equalize mediator values.} + +\item{nbin}{if a numeric (i.e. non-factor or character) strata variable is defined, how many bins should be made from it within which we equalize the mediator distribution?} + +\item{data}{a data frame containing the variables in the model.} + +\item{family}{a description of the error distribution to be used in the model, see \code{\link{family}} for details. For the outcome variable any member of the \code{glm} family can be used.} + +\item{bs.size}{the number of bootstrap iterations to be performed.} + +\item{mc.size}{the number of Monte Carlo iterations to be performed (more = more MC error reduction).} + +\item{alpha}{the alpha level used to construct confidence intervals (0.05 = 95 percent confidence interval).} + +\item{probs}{the quantiles of interest to be decomposed, should be values between 0 and 1.} + +\item{print.iteration}{print the bootstrap iteration} +} +\value{ +\code{out_nc} returns the mean level of the outcome under the natural course, which is a value that should be close to the empirically observed value of the outcome for each group. \code{out_nc_quantile} provides the \code{alpha/2} and \code{1-alpha/2} bootstrap quantiles for this mean (AKA bootstrap percentile confidence intervals).Similarly, \code{out_cf}, \code{out_cf_quantile},provide the corresponding values for the counterfactual scenario where the mediators of the groups are equalized. \code{mediation} returns the proportion mediated by setting the intervened on mediator to be equal in level to the reference group and \code{mediation_quantile} returns the 1-alpha confidence interval. +} +\description{ +Decompose the difference in a quantile of some outcome Y between groups. In this semiparametric version, we do not assume a parametric model for the mediator: instead, we sample from the distribution of the mediator in the reference group; this can be done within strata of one or more third variables. +} +\examples{ +set.seed(100) +# the decomposition functions in our package are computationally intensive +# to make the example run quick, I perform it on a subsample (n=500) of the data: +cfd.example.sample <- cfd.example.data[sample(500),] +quantile.semipar.results.1 <- cfd.semipar.quantile(formula='out.gauss ~ SES + + med.gauss + med.binom + age', + mediator='med.gauss', + group='SES', + strata='age', + nbin=5, + data=cfd.example.sample, + family='gaussian', + bs.size=50, + mc.size=10, + alpha=0.05, + probs=0.50) +# also note that normally we would recommend an bs.size of 250+ +# and an mc.size of 50+ +# see README.md for a more detailed description of the functions in this package. +} diff --git a/man/conv.mean.Rd b/man/conv.mean.Rd new file mode 100644 index 0000000..15564e8 --- /dev/null +++ b/man/conv.mean.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/conv.mean.R +\name{conv.mean} +\alias{conv.mean} +\title{Running mean function} +\usage{ +conv.mean(x) +} +\arguments{ +\item{x}{a variable whose convergence we want to check} +} +\value{ +returns a running mean of the variable whose convergence we want to check +} +\description{ +A running mean, intended to check when convergence is achieved (useful for setting mcsize or bssize). +} diff --git a/man/figures/README-example-1.png b/man/figures/README-example-1.png new file mode 100644 index 0000000000000000000000000000000000000000..37dcd94896c89c466770a2be6545e296061783fd GIT binary patch literal 6659 zcmdT}2UL^Wmd=v^5hQ?@B27S0kbWr!LJbN6QUZcpsTYudlpusARfB*^70?g@CI|we zfJ*NIVg%{Mhyjt_1f(MpGCy$dTk~etntAhP-mICd_2>NmIeVY|?QidW&dHy9NYjgK zEc`4W5Qxpt;DQARbc6%~{pBl!0q8NYkY@s#1f;R09?*h7a1aOug2O@ZWDp7kLIK|u zKo{@~2ch=6flo3Obsz)`?~4GR;~Kp<$#{`D8K zPr)@1h)>Y)0>Uylb1{o8^m*08TW#JoT^%1EFUIzp!q7p4rwIaNI(xTH5h~>p>&AO_J9On>2yaRM}>G*(Gekyt9XozXybS?>&sJ^6URzvFS z5+YM=-Lfk#x(Husyy+2Vt-YIXIP2M`KBDG4TAOvu6%pk(+B7NpMRlowH?)tjsOVb} zB#&j;Y-HJ5$$zoyT^u^~ToGNfD#*4p>pB{`U1B!a5=m98Xw)ozto7(@`!jyaciKY@ z6IE^**7VJu23lqV?Tg@N)%vmGmiT6}y^(yALk6?Stuv-Dk+-oFvI<}LPx4y9sb2HU z;mMp)@nBTY^Sf8-oPJ;tIs@cboT!n^87cgNN3lH%crHIYZ5C(>R-`iaj*YQW?h1W(fYP69|4 z0$wgC` zVl4VZITi}_IYH@0@FtB2TbbDcXR|ETwtJI1QD@%Wwx->rRd!!lbIs_MVTG#aLE;AdN^0HZ!DOZkC? z=WMB)hN)haZEu)hMQTuIJ#Ip9pRkP*=7+UX)Yag)ty-uezsAxj=%#bxlWt{roh16@ zP>1<;(AyjG5sFok?$&RA>#+|@XT>tr-mjfR0n}FGf)P189UD%=aerw}&8@wNq$-Hc z4id>FLI^^Hrzu2ubofWdw)olMfIf(altzXu`^6+DyEe!?+?595&n?x!)&NAk_5cTr z4PUAw_5Xo5_k(eZn!BZ~b~wD&uq#4*mP~ZCBe$+S_NAD1A*ipuvv&s0;9c`>P}VR= z0bd1mFaF4l{7bJ$EmcaGp0=Fy^r#v(p12dNpIcR7vIzLUf~<$>DbT`%tMdC5eA)$Zf@U7q68$t9Oq?bN;OgT0>}SusyL* z&)3*WiRe1{?!GjS_KV?lv znrA-0q1hvBi^G(z6rDDRN^Ab$@+`K-vTM zkV4j0OD04>c6z%=fgIOmKJZ|)vs4tR25IcdVaa>{*)i<=pTc*I5=yjEEV30&719Oz z+j&&J#6+auZoaG2GmJdJ3CR#(5j%pwoOik);*OS#hk!fTqB(DqssVWpWf+$}7&{&F zKPzk~-9av;i7ok*;QNO7AsK|+=7GU4TB^0o+Hl}0tvO61RCa+}d92Ng9o%VR45^nHcoQPp*-E&Lx05#kN)8#kGThkNq0Oe3`D)! zQ!Q;uy5a^1e>SvG+S0J94U~gpQr2?@`4E`Yx(@${;OZ`UC7OGHe$TMD`~dazPIdH- za8VaPjy@8gh!BA3`KojpQMC*L=y6-wXQn;+NAG+*sT#2_AaDTd|M)FI_;QaC8@RKB zU22vkIka4`V5OvjMinZ>l`aBfHq-){xHK!P1c*fITs(_TWTUe#+vPbUXg9@UDFMRYOW6K=p^h;Q18jhNZdT& zy2-Gw7(8klh zrTZv7{lk?lL=k?Y?`mHsYrJ=E7mz4BmD`Trco!e>%zFm0Cl3*BdmVH?;q)I9*jQ5B zr2Oy=JjB1PAHL>O|2<*q>y9&K;+sCOnh>0J6LzNfB*kVw9mLR3Dqg$Q4LW}at*m)? zSHu56`OQkF1$Yy@)UQ~l!ePOp`^G-(NivbZBO~<^?v>K%OujOU5$>Ty{)T- zTsVeI-Viv;4#X+<(x|`0ay+RX>dT5PObMJLe8?W;MT80+l-@=kEFZ-HUJSUqPtxSX zv*()FP54`&fZBhDhVU+%H6oBD=l3hMF%SaZXUC8b6=>rC#f-Y?0$5IO$b4yNi_{RCH3nvgjt=>gx*b2n z#{18>t$pSi?2tt|(ebVS09XG%RT{()gB%;xk2J0}C*(XI)N&*(8z9Sdo@h~0Bra9? z`j@9nvECv1ikK5U+fq*ttJc`GtupHNs3sS5mru4GM+@2)UHfrF)LqbEV8&+k+EG|y z@s-zMw>gxd;`12Un>@{PSHmc^mThu4wObDr*2Gf3nR3Z zj$Pnq339eDyQvkwqES%j$glt{djnW3yS_z$OI57 zaiwhsMpmufPa+Zd=K8_)f{9CGH@D9;?siJmM~8e8mmVow7554yLsx z&QXw@#*wB|EhZ{?TM;ZJej0olxnuw_A|1QUVt5pBG)?_D_PFGEKxN!TO_CoR{RDyh zdzuUl>_;oB4IFDpVJxnR!AT_aVc*D(4rSqIcL_gVwN77r$H?VP7QP=ko{Ib@ZHorI z%Slwlqc*UkS+v1)s_^GyG=}S>E#mP76_$aI?RGAX84uXSJ7y=Ue`KS7nx>lzyX)z< zxI8B?T%J28>~3Oo6HE(6N1B+{F2&Z z&iBkV4|)~)re0Rc_N9f9RL^W{jc019%knI0PJCO@cOOViaKlYNn*n33UK(eE66iV>Ut z)W1_~_AAcRFGX4Cy%w&_os*5h(<~*Ap-pKX-7no;0Cl^0omKr87uVDz{Rc3YVt_Yd-rXAdX(~MdP_!HF;Rh;TXw*VS#i*a z;B96mwC`zi{LU@l(vb!NPJM<~;a7XAw|e_yZrXy(-ZfsXZ`gEt#|u+>hZnr(`nIo& zp9nop28dRQt0k3{v+~({MV5Ud!CqRo$_xOC)3#qj(*B9>D?5XvX33Z!zGjT8T$TsA zdtB~Gh?*clV!Gt`fQIWi^ZW|jo0Af}KD{HQtq$oO4nA#OpDT+=wHsaUwj&tJ!y^^x zmDT~8jFdMv3JOV?l%*J6U%y{${jGyxM~OS$*pDiqj-H#i)e)8*s$)lI&fdb72|W;J zwkUsrW`(VJek-QUWa+a*Qoo&$9EY;I$#h-BEX|_977;XUlr}?dRHoSmh41=M&nGY~ zn@ww$R^X1-?XG%KLpN7%O+Sm|zuYy_AFC}S73unEbERSAz1_`EBUMjo%SfYTBX1l% zd){3q#EZ2|qAI?}_ObHghrX?kQDSj&;l#z>ljCNQ;q%LdW6SBKDh-Z^?#;a8CiF!0 zibdW2gz0nAW_yoMs8h#@=uva|So<}{&G1C6l*Yd#2N~l`(SL?os zzJ95;cY<_J)U~ohC$GKmuhisw`?4{Ld{2GaD`DBXXEXEb>W54HjS(oy*s-!jlSVu< zZqvJx`-7&pe1!K>Xz7;qRTw;wF8C8f^ITNQK8DD20bZ8!P$CpIBn*Ed76x7Y=T`;Z zDPSwu0!T3Iqw^DQ$QY$t8V#}#4|y-|3u_G4gRCBmH_U>l>H1qq>u1X%Vs2G>TUugviF zHwGvS)+S!;DbBW*4*=IEIxM)Q{*OQzUHa3BCJ)_HV|4%Y; z5u|K`nx7$!1iPBu>*$;*Y*U+!C(#B(!itipv`7yqzc{QiI!=Jt%8veS5ma&?)e#5{ zafaH62Qt3$`*7DSwEG@fc}2ot^JIP#hre3-PrD^Da8AMQfSNoP^Y$9lWq)y7aoSHw z;;;BJX15huK9urZX79vX_eeIv(RaNsU^jRiB{!L-yq7=isSr7#TJsv!0X=!tUBUIS zr{T6*dJ7~Bwg$9U9?_5C94jq5-?9G!MgtW< literal 0 HcmV?d00001 diff --git a/man/figures/README-example-10.png b/man/figures/README-example-10.png new file mode 100644 index 0000000000000000000000000000000000000000..26aa248d6633872c223635af03d1befb8cd9a383 GIT binary patch literal 6201 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 Gf&5>&Yn*xj literal 0 HcmV?d00001 diff --git a/man/figures/README-example-13.png b/man/figures/README-example-13.png new file mode 100644 index 0000000000000000000000000000000000000000..8b067eabe01c44ccca7b39e331d83f7c0c203a63 GIT binary patch literal 6545 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 literal 0 HcmV?d00001 diff --git a/man/figures/README-example-14.png b/man/figures/README-example-14.png new file mode 100644 index 0000000000000000000000000000000000000000..525383580ff4467a744634916986d0e9396dd412 GIT binary patch literal 6421 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 literal 0 HcmV?d00001 diff --git a/man/figures/README-example-16.png b/man/figures/README-example-16.png new file mode 100644 index 0000000000000000000000000000000000000000..f4aab8b877aa58f7fdb922afdcce1cbde6099b2c GIT binary patch literal 6351 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 ^Uak`uCh%_=>`d;6AE?a!TN zgFqyACk}A&I0?+iyC4hmJ5mFvAUy3{K0oKHRhsV&3OneMwZ&t1H+)4X4`@jNhQf|; zqy>`~s|2NErFnFiSiwM|P1Cu6xwdaQsFAV<0{f(K`R6mTjR-K&ps&Zs(369V;s~52rizRz-KR7a7_Ap3-7dd@NwBW@jS`tP_u8P$~3%$Ej zL3+Pnl8;@~Vde;ORB?DA#E3zqe3k-JT>|hw^#4U%_}?Yg2`6VCCF(2<7#WV7{+PI} Lp|4)5`T+NDV6W=F literal 0 HcmV?d00001 diff --git a/man/figures/README-example-17.png b/man/figures/README-example-17.png new file mode 100644 index 0000000000000000000000000000000000000000..347d450d48aa4853dae1cebe22c8fe26d7998d6e GIT binary patch literal 6546 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 literal 0 HcmV?d00001 diff --git a/man/figures/README-example-18.png b/man/figures/README-example-18.png new file mode 100644 index 0000000000000000000000000000000000000000..e52d7f91f19bca37ed105e7b936341147767759e GIT binary patch literal 6835 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

+plSq$>gdmp zeoBZ)WZgQurN;37=RY6(l2I)^7_8M=OAduMbNID?z=DI|pf;$1{?EJ>&WF4^bX3t# z5_N}{;!`3Z1_A$KS(jJBaCcpgHN4t?^MdaRKln|Ws6j0y{FWMx>AxUG1qi5G^0M$F z{!hfQ?j=N)Qkw)RM8CIWX?EqM0H|_M=Rqb-EC)g)j`#=iCdY^^!?Qn%TKL6njUNN( z<^sBKD8i5@Dk$auk83irRr<{J(0Bz_Z@gFTjtV4AVEtz_8K@UpI@bp}T&lbj*rJwa zDs9;|;!7ZhDxKVd*BdG!?DW_`-|Jg7j1j6Mw(9%Kb5&;F2B?MV6)a!01qn$M@YUq` zvz#{^%~3=~6`k(5CCY>70#w{8FHU8`@QVDcPpBu|@;N%RR?xYMwK-Fo ziBuyI6E+F1I--pVdM_4&gd__jXLWUe*s$GHo&mHKUKG45{;`{OuK?+*D&M<>V`Lp3 zQxukboxk+BhNykPUaf9!Qj>vZq1pAl)*V~i=b73+diEWcz|n_Ir?uPw!Fr)t&Q16m z?uuKach}773Dd^hHQZFc$c#X(R<17T$woZ=+`V#zAP?cgKjCT8R%r;WT%eJt*3y!G zx-)a(oC^C|-Cr)N)BRuF5uyb zWO)SXNC3Jjni_^D;_;=N$|fYjKv+|---5+%#ac;KI?jA_kKim;Zz#1|()XS1SkbJJ zmnO$DFKdcEAU537n?X*;;T6yI?VU9ko!)4!ue9Tx8kusLZ`wKeazvk%Qp!E9+jLx> zUS&Def9Um;ZQmQ)b3l?-br1XJ*eX`VWeSuF-fCy&DW9oq~o4pjv>IeHXIq*;^p3#Boa z?@3}RYDvl#dCYRix)T9387TUp9Y^~4!@4QELl+;Fmt@SfF?SpZg^OTL+7!*Am@3Zz zDR%)CD-y0KsvV2h$KOro@0)*|MHsF5% D8!5>N literal 0 HcmV?d00001 diff --git a/man/figures/README-example-2.png b/man/figures/README-example-2.png new file mode 100644 index 0000000000000000000000000000000000000000..29c4fa7472c65d39bbc31b6b3c732714a4dcd53a GIT binary patch literal 6641 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 literal 0 HcmV?d00001 diff --git a/man/figures/README-example-3.png b/man/figures/README-example-3.png new file mode 100644 index 0000000000000000000000000000000000000000..224e9ea925e022de34e5fd05ce0beb7c09836b8a GIT binary patch literal 6772 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 literal 0 HcmV?d00001 diff --git a/man/figures/README-example-4.png b/man/figures/README-example-4.png new file mode 100644 index 0000000000000000000000000000000000000000..e082bfae14fd405b22acb54a6fd5e05db6cac908 GIT binary patch literal 6728 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 literal 0 HcmV?d00001 diff --git a/man/figures/README-example-7.png b/man/figures/README-example-7.png new file mode 100644 index 0000000000000000000000000000000000000000..61278cd69352e62537d25318bf525bd73036a904 GIT binary patch literal 5823 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 Kty0Y!;J*PE;?GY2 literal 0 HcmV?d00001