From 25f5745104eb0d3a1e61a3fbe950a5c5a8dc1069 Mon Sep 17 00:00:00 2001 From: naeemkh Date: Wed, 14 Feb 2024 22:15:17 -0500 Subject: [PATCH] fix website --- NAMESPACE | 14 +- R/plot.R | 144 ++----- R/print.R | 94 +++-- _pkgdown.yml | 30 +- docs/bootstrap-toc.css | 60 +++ docs/bootstrap-toc.js | 159 ++++++++ docs/docsearch.css | 148 +++++++ docs/docsearch.js | 85 ++++ docs/pkgdown.css | 384 ++++++++++++++++++ docs/pkgdown.yml | 2 +- docs/reference/autoplot.cgps_cw.html | 114 ++++++ docs/reference/autoplot.cgps_erf.html | 114 ++++++ docs/reference/autoplot.cgps_gps.html | 114 ++++++ docs/reference/autoplot.cgps_pspop.html | 114 ++++++ docs/reference/check_covar_balance.html | 116 +++--- docs/reference/check_kolmogorov_smirnov.html | 6 +- docs/reference/compile_pseudo_pop.html | 36 +- docs/reference/compute_counter_weight.html | 175 ++++++++ docs/reference/create_matching.html | 27 +- docs/reference/create_weighting.html | 8 +- docs/reference/estimate_erf.html | 141 +++++++ docs/reference/estimate_gps.html | 64 +-- docs/reference/estimate_npmetric_erf.html | 37 -- docs/reference/estimate_pmetric_erf.html | 30 -- docs/reference/estimate_semipmetric_erf.html | 31 -- docs/reference/figures/png/process_flow.png | Bin 0 -> 147161 bytes docs/reference/generate_pseudo_pop.html | 200 +++------ docs/reference/index.html | 78 ++-- docs/reference/plot.cgps_cw.html | 120 ++++++ docs/reference/plot.cgps_erf.html | 118 ++++++ docs/reference/plot.cgps_gps.html | 114 ++++++ docs/reference/plot.cgps_pspop.html | 124 ++++++ docs/reference/print.cgps_cw.html | 114 ++++++ docs/reference/print.cgps_erf.html | 114 ++++++ docs/reference/print.cgps_gps.html | 114 ++++++ docs/reference/print.cgps_pspop.html | 114 ++++++ docs/reference/summary.cgps_cw.html | 114 ++++++ docs/reference/summary.cgps_erf.html | 114 ++++++ docs/reference/summary.cgps_gps.html | 114 ++++++ docs/reference/summary.cgps_pspop.html | 114 ++++++ docs/reference/trim_it.html | 137 +++++++ docs/search.json | 2 +- docs/sitemap.xml | 57 +++ man/absolute_corr_fun.Rd | 0 man/absolute_weighted_corr_fun.Rd | 0 man/autoplot.gpsm_erf.Rd | 20 - man/check_args.Rd | 0 man/check_args_compile_pseudo_pop.Rd | 0 man/check_args_estimate_gps.Rd | 0 man/check_args_use_cov_transformers.Rd | 0 man/check_covar_balance.Rd | 0 man/compile_pseudo_pop.Rd | 0 man/compute_closest_wgps.Rd | 0 man/compute_density.Rd | 0 man/compute_min_max.Rd | 0 man/compute_outer.Rd | 0 man/compute_resid.Rd | 0 man/compute_risk.Rd | 0 man/create_matching.Rd | 0 man/estimate_gps.Rd | 0 man/estimate_hat_vals.Rd | 0 man/figures/png/process_flow.png | Bin 0 -> 147161 bytes man/gen_wrap_sl_lib.Rd | 0 man/generate_kernel.Rd | 0 man/log_system_info.Rd | 0 man/plot.gpsm_erf.Rd | 19 - man/{print.gpsm_erf.Rd => print.cgps_erf.Rd} | 12 +- ...rint.gpsm_pspop.Rd => print.cgps_pspop.Rd} | 12 +- man/set_logger.Rd | 0 man/smooth_erf.Rd | 0 ...ummary.gpsm_erf.Rd => summary.cgps_erf.Rd} | 12 +- ...ry.gpsm_pspop.Rd => summary.cgps_pspop.Rd} | 12 +- man/train_it.Rd | 0 man/w_fun.Rd | 0 vignettes/CausalGPS.Rmd | 4 + 75 files changed, 3570 insertions(+), 630 deletions(-) create mode 100644 docs/bootstrap-toc.css create mode 100644 docs/bootstrap-toc.js create mode 100644 docs/docsearch.css create mode 100644 docs/docsearch.js create mode 100644 docs/pkgdown.css create mode 100644 docs/reference/autoplot.cgps_cw.html create mode 100644 docs/reference/autoplot.cgps_erf.html create mode 100644 docs/reference/autoplot.cgps_gps.html create mode 100644 docs/reference/autoplot.cgps_pspop.html create mode 100644 docs/reference/compute_counter_weight.html create mode 100644 docs/reference/estimate_erf.html create mode 100644 docs/reference/figures/png/process_flow.png create mode 100644 docs/reference/plot.cgps_cw.html create mode 100644 docs/reference/plot.cgps_erf.html create mode 100644 docs/reference/plot.cgps_gps.html create mode 100644 docs/reference/plot.cgps_pspop.html create mode 100644 docs/reference/print.cgps_cw.html create mode 100644 docs/reference/print.cgps_erf.html create mode 100644 docs/reference/print.cgps_gps.html create mode 100644 docs/reference/print.cgps_pspop.html create mode 100644 docs/reference/summary.cgps_cw.html create mode 100644 docs/reference/summary.cgps_erf.html create mode 100644 docs/reference/summary.cgps_gps.html create mode 100644 docs/reference/summary.cgps_pspop.html create mode 100644 docs/reference/trim_it.html mode change 100755 => 100644 man/absolute_corr_fun.Rd mode change 100755 => 100644 man/absolute_weighted_corr_fun.Rd delete mode 100755 man/autoplot.gpsm_erf.Rd mode change 100755 => 100644 man/check_args.Rd mode change 100755 => 100644 man/check_args_compile_pseudo_pop.Rd mode change 100755 => 100644 man/check_args_estimate_gps.Rd mode change 100755 => 100644 man/check_args_use_cov_transformers.Rd mode change 100755 => 100644 man/check_covar_balance.Rd mode change 100755 => 100644 man/compile_pseudo_pop.Rd mode change 100755 => 100644 man/compute_closest_wgps.Rd mode change 100755 => 100644 man/compute_density.Rd mode change 100755 => 100644 man/compute_min_max.Rd mode change 100755 => 100644 man/compute_outer.Rd mode change 100755 => 100644 man/compute_resid.Rd mode change 100755 => 100644 man/compute_risk.Rd mode change 100755 => 100644 man/create_matching.Rd mode change 100755 => 100644 man/estimate_gps.Rd mode change 100755 => 100644 man/estimate_hat_vals.Rd create mode 100644 man/figures/png/process_flow.png mode change 100755 => 100644 man/gen_wrap_sl_lib.Rd mode change 100755 => 100644 man/generate_kernel.Rd mode change 100755 => 100644 man/log_system_info.Rd delete mode 100755 man/plot.gpsm_erf.Rd rename man/{print.gpsm_erf.Rd => print.cgps_erf.Rd} (56%) mode change 100755 => 100644 rename man/{print.gpsm_pspop.Rd => print.cgps_pspop.Rd} (55%) mode change 100755 => 100644 mode change 100755 => 100644 man/set_logger.Rd mode change 100755 => 100644 man/smooth_erf.Rd rename man/{summary.gpsm_erf.Rd => summary.cgps_erf.Rd} (53%) mode change 100755 => 100644 rename man/{summary.gpsm_pspop.Rd => summary.cgps_pspop.Rd} (52%) mode change 100755 => 100644 mode change 100755 => 100644 man/train_it.Rd mode change 100755 => 100644 man/w_fun.Rd diff --git a/NAMESPACE b/NAMESPACE index af758213..39cc031e 100755 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,23 +1,17 @@ # Generated by roxygen2: do not edit by hand -S3method(autoplot,cgps_cw) -S3method(autoplot,cgps_erf) -S3method(autoplot,cgps_gps) -S3method(autoplot,cgps_pspop) -S3method(autoplot,gpsm_erf) S3method(plot,cgps_cw) S3method(plot,cgps_erf) S3method(plot,cgps_gps) S3method(plot,cgps_pspop) -S3method(plot,gpsm_erf) S3method(print,cgps_cw) +S3method(print,cgps_erf) S3method(print,cgps_gps) -S3method(print,gpsm_erf) -S3method(print,gpsm_pspop) +S3method(print,cgps_pspop) S3method(summary,cgps_cw) +S3method(summary,cgps_erf) S3method(summary,cgps_gps) -S3method(summary,gpsm_erf) -S3method(summary,gpsm_pspop) +S3method(summary,cgps_pspop) export(absolute_corr_fun) export(absolute_weighted_corr_fun) export(check_covar_balance) diff --git a/R/plot.R b/R/plot.R index 5ce906d9..cb82422b 100755 --- a/R/plot.R +++ b/R/plot.R @@ -1,79 +1,3 @@ -#' @title -#' A helper function for gpsm_erf object -#' -#' @description -#' A helper function to plot gpsm_erf object using ggplot2 package. -#' -#' @param object A gpsm_erf object. -#' @param ... Additional arguments passed to customize the plot. -#' -#' @return -#' Returns a ggplot object. -#' -#' @export -#' -#' @keywords internal -#' @importFrom ggplot2 autoplot -#' @importFrom rlang .data -#' -autoplot.gpsm_erf <- function(object, ...) { - - gg_labs <- gg_title <- NULL - - ## collect additional arguments - dot_args <- list(...) - arg_names <- names(dot_args) - - for (i in arg_names) { - assign(i, unlist(dot_args[i], use.names = FALSE)) - } - - if (is.null(gg_labs)) { - gg_labs <- c("Exposure Level", "Outcome Rate") - } - - if (is.null(gg_title)) { - gg_title <- "Exposure Response Curve" - } - - # extract data - tmp_data <- data.frame(w.vals = object$params$w_vals, - erf = object$erf) - - g <- ggplot2::ggplot(tmp_data) + - ggplot2::theme_bw() + - ggplot2::theme(plot.title = ggplot2::element_text(hjust = 0.5)) + - ggplot2::geom_line(ggplot2::aes(.data$w.vals, .data$erf), - color = "red", size = 1) - - - g <- g + ggplot2::labs(x = gg_labs[1], y = gg_labs[2]) - g <- g + ggplot2::ggtitle(gg_title) - - return(g) -} - -#' @title -#' Extend generic plot functions for gpsm_erf class -#' -#' @description -#' A wrapper function to extend generic plot functions for gpsm_erf class. -#' -#' @param x A gpsm_erf object. -#' @param ... Additional arguments passed to customize the plot. -#' -#' @return -#' Returns a ggplot2 object, invisibly. This function is called for side effects. -#' -#' @export -#' -plot.gpsm_erf <- function(x, ...) { - g <- ggplot2::autoplot(x, ...) - print(g) - invisible(g) -} - - #' @title #' A helper function for cgps_pspop object #' @@ -86,7 +10,6 @@ plot.gpsm_erf <- function(x, ...) { #' @return #' Returns a ggplot object. #' -#' @export #' #' @keywords internal #' @importFrom ggplot2 autoplot @@ -226,6 +149,7 @@ autoplot.cgps_pspop <- function(object, ...){ return(g) } + #' @title #' Extend generic plot functions for cgps_pspop class #' @@ -250,7 +174,6 @@ plot.cgps_pspop <- function(x, ...) { } - #' @title #' A helper function for cgps_gps object #' @@ -263,7 +186,6 @@ plot.cgps_pspop <- function(x, ...) { #' @return #' Returns a ggplot object. #' -#' @export #' #' @keywords internal #' @importFrom ggplot2 autoplot @@ -287,8 +209,8 @@ autoplot.cgps_gps <- function(object, ...){ ggplot2::aes(x = .data$gps)) + ggplot2::theme_bw() + ggplot2::theme(plot.title = ggplot2::element_text(hjust = 0.5)) + - ggplot2::geom_density(fill = "blue", alpha = 0.5) + - ggplot2::ggtitle("Density Plot of GPS Values") + ggplot2::geom_density(fill = "blue", alpha = 0.5) + + ggplot2::ggtitle("Density Plot of GPS Values") g <- g + ggplot2::labs(x = "GPS value", y = "Density") return(g) @@ -317,7 +239,6 @@ plot.cgps_gps <- function(x, ...) { } - #' @title #' A helper function for cgps_cw object #' @@ -330,7 +251,6 @@ plot.cgps_gps <- function(x, ...) { #' @return #' Returns a ggplot object. #' -#' @export #' #' @keywords internal #' @importFrom ggplot2 autoplot @@ -394,19 +314,19 @@ autoplot.cgps_cw <- function(object, ...){ if (object$params$ci_appr == "matching") { hist_density_plot <- ggplot2::ggplot(subset_data, ggplot2::aes(x = counter_weight)) + - ggplot2::geom_histogram(bandwidth = 1, - fill = "blue", - color = "black") + - ggplot2::labs(x = "Count", y = "Frequency") + - ggplot2::theme_minimal() + ggplot2::geom_histogram(bandwidth = 1, + fill = "blue", + color = "black") + + ggplot2::labs(x = "Count", y = "Frequency") + + ggplot2::theme_minimal() y_label <- "Count" } else if (object$params$ci_appr == "weighting") { hist_density_plot <- ggplot2::ggplot(subset_data, - ggplot2::aes(x = counter_weight)) + - ggplot2::geom_density(fill = "blue", color = "black") + - ggplot2::labs(x = "Weight (displayed in log10 scale)", - y = "Density") + - ggplot2::theme_minimal() + ggplot2::scale_x_log10() + ggplot2::aes(x = counter_weight)) + + ggplot2::geom_density(fill = "blue", color = "black") + + ggplot2::labs(x = "Weight (displayed in log10 scale)", + y = "Density") + + ggplot2::theme_minimal() + ggplot2::scale_x_log10() y_label <- "Weight" } else { stop("The cgsp_cw object is not generated properly.") @@ -415,13 +335,13 @@ autoplot.cgps_cw <- function(object, ...){ plot_title <- paste0("Displaying the ", y_label) g <- ggplot2::ggplot(data = subset_data, ggplot2::aes(x = as.factor(id), - y = counter_weight)) + - ggplot2::geom_point(shape = "|", color = "blue", size = 2) + - ggplot2::geom_segment(ggplot2::aes(xend = as.factor(id), yend = 0), - color = "red", linewidth = 0.2) + - ggplot2::labs(x = "ID", y = y_label, title = plot_title) + - ggplot2::theme_minimal() + - ggplot2::coord_flip() + y = counter_weight)) + + ggplot2::geom_point(shape = "|", color = "blue", size = 2) + + ggplot2::geom_segment(ggplot2::aes(xend = as.factor(id), yend = 0), + color = "red", linewidth = 0.2) + + ggplot2::labs(x = "ID", y = y_label, title = plot_title) + + ggplot2::theme_minimal() + + ggplot2::coord_flip() if (every_n > 1){ g <- g + ggplot2::scale_x_discrete(breaks = unique(as.factor(subset_data$id))[c(rep(FALSE, every_n-1), TRUE)]) # Show ID labels every 20 data points @@ -479,7 +399,6 @@ plot.cgps_cw <- function(x, ...) { #' @return #' Returns a ggplot object. #' -#' @export #' #' @keywords internal #' @importFrom ggplot2 autoplot @@ -503,17 +422,17 @@ autoplot.cgps_erf <- function(object, ...){ } g <- ggplot2::ggplot() + - ggplot2::geom_point(data = df1, ggplot2::aes(x, - y_original, - size=normalized_weight), - color="blue", alpha=0.1) + - ggplot2::geom_line(data = df2, ggplot2::aes(w_vals, y_pred), color = "orange") + - ggplot2::geom_point(data = df2, ggplot2::aes(w_vals, y_pred), color = "orange") + - ggplot2::labs(x = "Exposure", - y = "Outcome") + - ggplot2::ggtitle(paste0("Exposure Response Curve for ", - object$params$model_type, " model")) + - ggplot2::theme_bw() + ggplot2::geom_point(data = df1, ggplot2::aes(x, + y_original, + size=normalized_weight), + color="blue", alpha=0.1) + + ggplot2::geom_line(data = df2, ggplot2::aes(w_vals, y_pred), color = "orange") + + ggplot2::geom_point(data = df2, ggplot2::aes(w_vals, y_pred), color = "orange") + + ggplot2::labs(x = "Exposure", + y = "Outcome") + + ggplot2::ggtitle(paste0("Exposure Response Curve for ", + object$params$model_type, " model")) + + ggplot2::theme_bw() return(g) } @@ -541,3 +460,4 @@ plot.cgps_erf <- function(x, ...) { print(g) invisible(g) } + diff --git a/R/print.R b/R/print.R index f2ff4fe5..a1691aa9 100755 --- a/R/print.R +++ b/R/print.R @@ -1,7 +1,7 @@ #' @title -#' Extend print function for gpsm_erf object +#' Extend print function for cgps_erf object #' -#' @param x A gpsm_erf object. +#' @param x A cgps_erf object. #' @param ... Additional arguments passed to customize the results. #' #' @return @@ -9,7 +9,7 @@ #' #' @export #' -print.gpsm_erf <- function(x, ...) { +print.cgps_erf <- function(x, ...) { x <- unclass(x) @@ -23,49 +23,50 @@ print.gpsm_erf <- function(x, ...) { } + #' @title -#' print summary of gpsm_erf object +#' print summary of cgps_erf object #' -#' @param object A gpsm_erf object. +#' @param object A cgps_erf object. #' @param ... Additional arguments passed to customize the results. #' #' @return #' Returns summary of data #' @export -summary.gpsm_erf <- function(object, ...) { - - cat_list <- function(input) { - cat(paste(" size: ", length(input), - ", class: ", class(input), - ", missing value(s): ", sum(is.na(input)), - sep = "")) - if (is.numeric(input)) { - cat(paste("\n min: ", sprintf("%.3f", min(input, na.rm = TRUE)), - "\n max: ", sprintf("%.3f", max(input, na.rm = TRUE)), - "\n mean: ", sprintf("%.3f", mean(input, na.rm = TRUE)), - sep = "")) - } - } - - object <- unclass(object) - cat("Input data: \n") - for (item in names(object$params)){ - cat(paste(" ", item, "\n")) - cat_list(object$params[[item]]) - cat("\n") - } - cat("\nOutput data: \n") - cat(paste(" erf\n")) - cat_list(object$erf) - cat("\n") +summary.cgps_erf <- function(object, ...) { + + # cat_list <- function(input) { + # cat(paste(" size: ", length(input), + # ", class: ", class(input), + # ", missing value(s): ", sum(is.na(input)), + # sep = "")) + # if (is.numeric(input)) { + # cat(paste("\n min: ", sprintf("%.3f", min(input, na.rm = TRUE)), + # "\n max: ", sprintf("%.3f", max(input, na.rm = TRUE)), + # "\n mean: ", sprintf("%.3f", mean(input, na.rm = TRUE)), + # sep = "")) + # } + # } + # + # object <- unclass(object) + # cat("Input data: \n") + # for (item in names(object$params)){ + # cat(paste(" ", item, "\n")) + # cat_list(object$params[[item]]) + # cat("\n") + # } + # cat("\nOutput data: \n") + # cat(paste(" erf\n")) + # cat_list(object$erf) + # cat("\n") } #' @title -#' Extend print function for gpsm_pspop object +#' Extend print function for cgps_pspop object #' -#' @param x A gpsm_pspop object. +#' @param x A cgps_pspop object. #' @param ... Additional arguments passed to customize the results. #' #' @return @@ -73,7 +74,7 @@ summary.gpsm_erf <- function(object, ...) { #' #' @export #' -print.gpsm_pspop <- function(x, ...) { +print.cgps_pspop <- function(x, ...) { x <- unclass(x) @@ -86,44 +87,43 @@ print.gpsm_pspop <- function(x, ...) { cat(" Look at summary for more details. \n") } - #' @title -#' print summary of gpsm_pspop object +#' print summary of cgps_pspop object #' -#' @param object A gpsm_pspop object. +#' @param object A cgps_pspop object. #' @param ... Additional arguments passed to customize the results. #' #' @return #' Returns summary of data #' @export -summary.gpsm_pspop <- function(object, ...) { +summary.cgps_pspop <- function(object, ...) { cat("--- CausalGPS pseudo population object summary --- \n") cat(paste("Pseudo population met the covariate balance requirement: ", object$passed_covar_test, "\n")) cat(paste("Absolute correlation of the original data: \n", " mean: ", sprintf("%.3f", - object$original_corr_results$mean_absolute_corr), + object$original_corr_results$mean_absolute_corr), "\n", " median: ", sprintf("%.3f", - object$original_corr_results$median_absolute_corr), + object$original_corr_results$median_absolute_corr), "\n", " maximal: ", sprintf("%.3f", - object$original_corr_results$maximal_absolute_corr), + object$original_corr_results$maximal_absolute_corr), "\n" - )) + )) cat(paste("\n", names(object$original_corr_results$absolute_corr), ":", sprintf("%.3f",object$original_corr_results$absolute_corr))) cat(paste("\n\n Absolute correlation of the pseudo population: \n", " mean: ", sprintf("%.3f", - object$adjusted_corr_results$mean_absolute_corr), + object$adjusted_corr_results$mean_absolute_corr), "\n", " median: ", sprintf("%.3f", - object$adjusted_corr_results$median_absolute_corr), + object$adjusted_corr_results$median_absolute_corr), "\n", " maximal: ", sprintf("%.3f", - object$adjusted_corr_results$maximal_absolute_corr), + object$adjusted_corr_results$maximal_absolute_corr), "\n" )) cat(paste("\n", names(object$adjusted_corr_results$absolute_corr), ":", @@ -239,3 +239,7 @@ summary.cgps_cw <- function(object, ...) { object <- unclass(object) cat("TBD \n") } + + + + diff --git a/_pkgdown.yml b/_pkgdown.yml index 4ec4e650..a6b5cf65 100755 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -21,25 +21,35 @@ reference: contents: - generate_pseudo_pop - compile_pseudo_pop + - compute_counter_weight - check_covar_balance - absolute_corr_fun - absolute_weighted_corr_fun - title: Outcome models contents: - - estimate_npmetric_erf - - estimate_semipmetric_erf - - estimate_pmetric_erf + - estimate_erf - title: Utilities contents: - generate_syn_data - set_logger - get_logger - - plot.gpsm_erf - - plot.gpsm_pspop - - print.gpsm_erf - - print.gpsm_pspop - - summary.gpsm_erf - - summary.gpsm_pspop + - trim_it + - plot.cgps_cw + - plot.cgps_gps + - plot.cgps_erf + - plot.cgps_pspop + - print.cgps_gps + - print.cgps_cw + # - print.gpsm_erf + - print.cgps_erf + - print.cgps_pspop + - summary.cgps_erf + - summary.cgps_pspop + - summary.cgps_cw + - summary.cgps_gps + # - summary.gpsm_erf + # - summary.gpsm_pspop + - title: Data contents: - synthetic_us_2010 @@ -51,7 +61,7 @@ articles: Generating-Pseudo-Population, Outcome-Models, Generating-Synthetic-Data, - Frequently-Asked-Questions,] + Frequently-Asked-Questions] - title: Collabration navbar: Collabration diff --git a/docs/bootstrap-toc.css b/docs/bootstrap-toc.css new file mode 100644 index 00000000..5a859415 --- /dev/null +++ b/docs/bootstrap-toc.css @@ -0,0 +1,60 @@ +/*! + * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) + * Copyright 2015 Aidan Feldman + * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ + +/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ + +/* All levels of nav */ +nav[data-toggle='toc'] .nav > li > a { + display: block; + padding: 4px 20px; + font-size: 13px; + font-weight: 500; + color: #767676; +} +nav[data-toggle='toc'] .nav > li > a:hover, +nav[data-toggle='toc'] .nav > li > a:focus { + padding-left: 19px; + color: #563d7c; + text-decoration: none; + background-color: transparent; + border-left: 1px solid #563d7c; +} +nav[data-toggle='toc'] .nav > .active > a, +nav[data-toggle='toc'] .nav > .active:hover > a, +nav[data-toggle='toc'] .nav > .active:focus > a { + padding-left: 18px; + font-weight: bold; + color: #563d7c; + background-color: transparent; + border-left: 2px solid #563d7c; +} + +/* Nav: second level (shown on .active) */ +nav[data-toggle='toc'] .nav .nav { + display: none; /* Hide by default, but at >768px, show it */ + padding-bottom: 10px; +} +nav[data-toggle='toc'] .nav .nav > li > a { + padding-top: 1px; + padding-bottom: 1px; + padding-left: 30px; + font-size: 12px; + font-weight: normal; +} +nav[data-toggle='toc'] .nav .nav > li > a:hover, +nav[data-toggle='toc'] .nav .nav > li > a:focus { + padding-left: 29px; +} +nav[data-toggle='toc'] .nav .nav > .active > a, +nav[data-toggle='toc'] .nav .nav > .active:hover > a, +nav[data-toggle='toc'] .nav .nav > .active:focus > a { + padding-left: 28px; + font-weight: 500; +} + +/* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */ +nav[data-toggle='toc'] .nav > .active > ul { + display: block; +} diff --git a/docs/bootstrap-toc.js b/docs/bootstrap-toc.js new file mode 100644 index 00000000..1cdd573b --- /dev/null +++ b/docs/bootstrap-toc.js @@ -0,0 +1,159 @@ +/*! + * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) + * Copyright 2015 Aidan Feldman + * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ +(function() { + 'use strict'; + + window.Toc = { + helpers: { + // return all matching elements in the set, or their descendants + findOrFilter: function($el, selector) { + // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ + // http://stackoverflow.com/a/12731439/358804 + var $descendants = $el.find(selector); + return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])'); + }, + + generateUniqueIdBase: function(el) { + var text = $(el).text(); + var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-'); + return anchor || el.tagName.toLowerCase(); + }, + + generateUniqueId: function(el) { + var anchorBase = this.generateUniqueIdBase(el); + for (var i = 0; ; i++) { + var anchor = anchorBase; + if (i > 0) { + // add suffix + anchor += '-' + i; + } + // check if ID already exists + if (!document.getElementById(anchor)) { + return anchor; + } + } + }, + + generateAnchor: function(el) { + if (el.id) { + return el.id; + } else { + var anchor = this.generateUniqueId(el); + el.id = anchor; + return anchor; + } + }, + + createNavList: function() { + return $(''); + }, + + createChildNavList: function($parent) { + var $childList = this.createNavList(); + $parent.append($childList); + return $childList; + }, + + generateNavEl: function(anchor, text) { + var $a = $(''); + $a.attr('href', '#' + anchor); + $a.text(text); + var $li = $('
  • '); + $li.append($a); + return $li; + }, + + generateNavItem: function(headingEl) { + var anchor = this.generateAnchor(headingEl); + var $heading = $(headingEl); + var text = $heading.data('toc-text') || $heading.text(); + return this.generateNavEl(anchor, text); + }, + + // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). + getTopLevel: function($scope) { + for (var i = 1; i <= 6; i++) { + var $headings = this.findOrFilter($scope, 'h' + i); + if ($headings.length > 1) { + return i; + } + } + + return 1; + }, + + // returns the elements for the top level, and the next below it + getHeadings: function($scope, topLevel) { + var topSelector = 'h' + topLevel; + + var secondaryLevel = topLevel + 1; + var secondarySelector = 'h' + secondaryLevel; + + return this.findOrFilter($scope, topSelector + ',' + secondarySelector); + }, + + getNavLevel: function(el) { + return parseInt(el.tagName.charAt(1), 10); + }, + + populateNav: function($topContext, topLevel, $headings) { + var $context = $topContext; + var $prevNav; + + var helpers = this; + $headings.each(function(i, el) { + var $newNav = helpers.generateNavItem(el); + var navLevel = helpers.getNavLevel(el); + + // determine the proper $context + if (navLevel === topLevel) { + // use top level + $context = $topContext; + } else if ($prevNav && $context === $topContext) { + // create a new level of the tree and switch to it + $context = helpers.createChildNavList($prevNav); + } // else use the current $context + + $context.append($newNav); + + $prevNav = $newNav; + }); + }, + + parseOps: function(arg) { + var opts; + if (arg.jquery) { + opts = { + $nav: arg + }; + } else { + opts = arg; + } + opts.$scope = opts.$scope || $(document.body); + return opts; + } + }, + + // accepts a jQuery object, or an options object + init: function(opts) { + opts = this.helpers.parseOps(opts); + + // ensure that the data attribute is in place for styling + opts.$nav.attr('data-toggle', 'toc'); + + var $topContext = this.helpers.createChildNavList(opts.$nav); + var topLevel = this.helpers.getTopLevel(opts.$scope); + var $headings = this.helpers.getHeadings(opts.$scope, topLevel); + this.helpers.populateNav($topContext, topLevel, $headings); + } + }; + + $(function() { + $('nav[data-toggle="toc"]').each(function(i, el) { + var $nav = $(el); + Toc.init($nav); + }); + }); +})(); diff --git a/docs/docsearch.css b/docs/docsearch.css new file mode 100644 index 00000000..e5f1fe1d --- /dev/null +++ b/docs/docsearch.css @@ -0,0 +1,148 @@ +/* Docsearch -------------------------------------------------------------- */ +/* + Source: https://github.com/algolia/docsearch/ + License: MIT +*/ + +.algolia-autocomplete { + display: block; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1 +} + +.algolia-autocomplete .ds-dropdown-menu { + width: 100%; + min-width: none; + max-width: none; + padding: .75rem 0; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .1); + box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .175); +} + +@media (min-width:768px) { + .algolia-autocomplete .ds-dropdown-menu { + width: 175% + } +} + +.algolia-autocomplete .ds-dropdown-menu::before { + display: none +} + +.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-] { + padding: 0; + background-color: rgb(255,255,255); + border: 0; + max-height: 80vh; +} + +.algolia-autocomplete .ds-dropdown-menu .ds-suggestions { + margin-top: 0 +} + +.algolia-autocomplete .algolia-docsearch-suggestion { + padding: 0; + overflow: visible +} + +.algolia-autocomplete .algolia-docsearch-suggestion--category-header { + padding: .125rem 1rem; + margin-top: 0; + font-size: 1.3em; + font-weight: 500; + color: #00008B; + border-bottom: 0 +} + +.algolia-autocomplete .algolia-docsearch-suggestion--wrapper { + float: none; + padding-top: 0 +} + +.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { + float: none; + width: auto; + padding: 0; + text-align: left +} + +.algolia-autocomplete .algolia-docsearch-suggestion--content { + float: none; + width: auto; + padding: 0 +} + +.algolia-autocomplete .algolia-docsearch-suggestion--content::before { + display: none +} + +.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header { + padding-top: .75rem; + margin-top: .75rem; + border-top: 1px solid rgba(0, 0, 0, .1) +} + +.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column { + display: block; + padding: .1rem 1rem; + margin-bottom: 0.1; + font-size: 1.0em; + font-weight: 400 + /* display: none */ +} + +.algolia-autocomplete .algolia-docsearch-suggestion--title { + display: block; + padding: .25rem 1rem; + margin-bottom: 0; + font-size: 0.9em; + font-weight: 400 +} + +.algolia-autocomplete .algolia-docsearch-suggestion--text { + padding: 0 1rem .5rem; + margin-top: -.25rem; + font-size: 0.8em; + font-weight: 400; + line-height: 1.25 +} + +.algolia-autocomplete .algolia-docsearch-footer { + width: 110px; + height: 20px; + z-index: 3; + margin-top: 10.66667px; + float: right; + font-size: 0; + line-height: 0; +} + +.algolia-autocomplete .algolia-docsearch-footer--logo { + background-image: url("data:image/svg+xml;utf8,"); + background-repeat: no-repeat; + background-position: 50%; + background-size: 100%; + overflow: hidden; + text-indent: -9000px; + width: 100%; + height: 100%; + display: block; + transform: translate(-8px); +} + +.algolia-autocomplete .algolia-docsearch-suggestion--highlight { + color: #FF8C00; + background: rgba(232, 189, 54, 0.1) +} + + +.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { + box-shadow: inset 0 -2px 0 0 rgba(105, 105, 105, .5) +} + +.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content { + background-color: rgba(192, 192, 192, .15) +} diff --git a/docs/docsearch.js b/docs/docsearch.js new file mode 100644 index 00000000..b35504cd --- /dev/null +++ b/docs/docsearch.js @@ -0,0 +1,85 @@ +$(function() { + + // register a handler to move the focus to the search bar + // upon pressing shift + "/" (i.e. "?") + $(document).on('keydown', function(e) { + if (e.shiftKey && e.keyCode == 191) { + e.preventDefault(); + $("#search-input").focus(); + } + }); + + $(document).ready(function() { + // do keyword highlighting + /* modified from https://jsfiddle.net/julmot/bL6bb5oo/ */ + var mark = function() { + + var referrer = document.URL ; + var paramKey = "q" ; + + if (referrer.indexOf("?") !== -1) { + var qs = referrer.substr(referrer.indexOf('?') + 1); + var qs_noanchor = qs.split('#')[0]; + var qsa = qs_noanchor.split('&'); + var keyword = ""; + + for (var i = 0; i < qsa.length; i++) { + var currentParam = qsa[i].split('='); + + if (currentParam.length !== 2) { + continue; + } + + if (currentParam[0] == paramKey) { + keyword = decodeURIComponent(currentParam[1].replace(/\+/g, "%20")); + } + } + + if (keyword !== "") { + $(".contents").unmark({ + done: function() { + $(".contents").mark(keyword); + } + }); + } + } + }; + + mark(); + }); +}); + +/* Search term highlighting ------------------------------*/ + +function matchedWords(hit) { + var words = []; + + var hierarchy = hit._highlightResult.hierarchy; + // loop to fetch from lvl0, lvl1, etc. + for (var idx in hierarchy) { + words = words.concat(hierarchy[idx].matchedWords); + } + + var content = hit._highlightResult.content; + if (content) { + words = words.concat(content.matchedWords); + } + + // return unique words + var words_uniq = [...new Set(words)]; + return words_uniq; +} + +function updateHitURL(hit) { + + var words = matchedWords(hit); + var url = ""; + + if (hit.anchor) { + url = hit.url_without_anchor + '?q=' + escape(words.join(" ")) + '#' + hit.anchor; + } else { + url = hit.url + '?q=' + escape(words.join(" ")); + } + + return url; +} diff --git a/docs/pkgdown.css b/docs/pkgdown.css new file mode 100644 index 00000000..80ea5b83 --- /dev/null +++ b/docs/pkgdown.css @@ -0,0 +1,384 @@ +/* Sticky footer */ + +/** + * Basic idea: https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ + * Details: https://github.com/philipwalton/solved-by-flexbox/blob/master/assets/css/components/site.css + * + * .Site -> body > .container + * .Site-content -> body > .container .row + * .footer -> footer + * + * Key idea seems to be to ensure that .container and __all its parents__ + * have height set to 100% + * + */ + +html, body { + height: 100%; +} + +body { + position: relative; +} + +body > .container { + display: flex; + height: 100%; + flex-direction: column; +} + +body > .container .row { + flex: 1 0 auto; +} + +footer { + margin-top: 45px; + padding: 35px 0 36px; + border-top: 1px solid #e5e5e5; + color: #666; + display: flex; + flex-shrink: 0; +} +footer p { + margin-bottom: 0; +} +footer div { + flex: 1; +} +footer .pkgdown { + text-align: right; +} +footer p { + margin-bottom: 0; +} + +img.icon { + float: right; +} + +/* Ensure in-page images don't run outside their container */ +.contents img { + max-width: 100%; + height: auto; +} + +/* Fix bug in bootstrap (only seen in firefox) */ +summary { + display: list-item; +} + +/* Typographic tweaking ---------------------------------*/ + +.contents .page-header { + margin-top: calc(-60px + 1em); +} + +dd { + margin-left: 3em; +} + +/* Section anchors ---------------------------------*/ + +a.anchor { + display: none; + margin-left: 5px; + width: 20px; + height: 20px; + + background-image: url(./link.svg); + background-repeat: no-repeat; + background-size: 20px 20px; + background-position: center center; +} + +h1:hover .anchor, +h2:hover .anchor, +h3:hover .anchor, +h4:hover .anchor, +h5:hover .anchor, +h6:hover .anchor { + display: inline-block; +} + +/* Fixes for fixed navbar --------------------------*/ + +.contents h1, .contents h2, .contents h3, .contents h4 { + padding-top: 60px; + margin-top: -40px; +} + +/* Navbar submenu --------------------------*/ + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu>.dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover>.dropdown-menu { + display: block; +} + +.dropdown-submenu>a:after { + display: block; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: #cccccc; + margin-top: 5px; + margin-right: -10px; +} + +.dropdown-submenu:hover>a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left>.dropdown-menu { + left: -100%; + margin-left: 10px; + border-radius: 6px 0 6px 6px; +} + +/* Sidebar --------------------------*/ + +#pkgdown-sidebar { + margin-top: 30px; + position: -webkit-sticky; + position: sticky; + top: 70px; +} + +#pkgdown-sidebar h2 { + font-size: 1.5em; + margin-top: 1em; +} + +#pkgdown-sidebar h2:first-child { + margin-top: 0; +} + +#pkgdown-sidebar .list-unstyled li { + margin-bottom: 0.5em; +} + +/* bootstrap-toc tweaks ------------------------------------------------------*/ + +/* All levels of nav */ + +nav[data-toggle='toc'] .nav > li > a { + padding: 4px 20px 4px 6px; + font-size: 1.5rem; + font-weight: 400; + color: inherit; +} + +nav[data-toggle='toc'] .nav > li > a:hover, +nav[data-toggle='toc'] .nav > li > a:focus { + padding-left: 5px; + color: inherit; + border-left: 1px solid #878787; +} + +nav[data-toggle='toc'] .nav > .active > a, +nav[data-toggle='toc'] .nav > .active:hover > a, +nav[data-toggle='toc'] .nav > .active:focus > a { + padding-left: 5px; + font-size: 1.5rem; + font-weight: 400; + color: inherit; + border-left: 2px solid #878787; +} + +/* Nav: second level (shown on .active) */ + +nav[data-toggle='toc'] .nav .nav { + display: none; /* Hide by default, but at >768px, show it */ + padding-bottom: 10px; +} + +nav[data-toggle='toc'] .nav .nav > li > a { + padding-left: 16px; + font-size: 1.35rem; +} + +nav[data-toggle='toc'] .nav .nav > li > a:hover, +nav[data-toggle='toc'] .nav .nav > li > a:focus { + padding-left: 15px; +} + +nav[data-toggle='toc'] .nav .nav > .active > a, +nav[data-toggle='toc'] .nav .nav > .active:hover > a, +nav[data-toggle='toc'] .nav .nav > .active:focus > a { + padding-left: 15px; + font-weight: 500; + font-size: 1.35rem; +} + +/* orcid ------------------------------------------------------------------- */ + +.orcid { + font-size: 16px; + color: #A6CE39; + /* margins are required by official ORCID trademark and display guidelines */ + margin-left:4px; + margin-right:4px; + vertical-align: middle; +} + +/* Reference index & topics ----------------------------------------------- */ + +.ref-index th {font-weight: normal;} + +.ref-index td {vertical-align: top; min-width: 100px} +.ref-index .icon {width: 40px;} +.ref-index .alias {width: 40%;} +.ref-index-icons .alias {width: calc(40% - 40px);} +.ref-index .title {width: 60%;} + +.ref-arguments th {text-align: right; padding-right: 10px;} +.ref-arguments th, .ref-arguments td {vertical-align: top; min-width: 100px} +.ref-arguments .name {width: 20%;} +.ref-arguments .desc {width: 80%;} + +/* Nice scrolling for wide elements --------------------------------------- */ + +table { + display: block; + overflow: auto; +} + +/* Syntax highlighting ---------------------------------------------------- */ + +pre, code, pre code { + background-color: #f8f8f8; + color: #333; +} +pre, pre code { + white-space: pre-wrap; + word-break: break-all; + overflow-wrap: break-word; +} + +pre { + border: 1px solid #eee; +} + +pre .img, pre .r-plt { + margin: 5px 0; +} + +pre .img img, pre .r-plt img { + background-color: #fff; +} + +code a, pre a { + color: #375f84; +} + +a.sourceLine:hover { + text-decoration: none; +} + +.fl {color: #1514b5;} +.fu {color: #000000;} /* function */ +.ch,.st {color: #036a07;} /* string */ +.kw {color: #264D66;} /* keyword */ +.co {color: #888888;} /* comment */ + +.error {font-weight: bolder;} +.warning {font-weight: bolder;} + +/* Clipboard --------------------------*/ + +.hasCopyButton { + position: relative; +} + +.btn-copy-ex { + position: absolute; + right: 0; + top: 0; + visibility: hidden; +} + +.hasCopyButton:hover button.btn-copy-ex { + visibility: visible; +} + +/* headroom.js ------------------------ */ + +.headroom { + will-change: transform; + transition: transform 200ms linear; +} +.headroom--pinned { + transform: translateY(0%); +} +.headroom--unpinned { + transform: translateY(-100%); +} + +/* mark.js ----------------------------*/ + +mark { + background-color: rgba(255, 255, 51, 0.5); + border-bottom: 2px solid rgba(255, 153, 51, 0.3); + padding: 1px; +} + +/* vertical spacing after htmlwidgets */ +.html-widget { + margin-bottom: 10px; +} + +/* fontawesome ------------------------ */ + +.fab { + font-family: "Font Awesome 5 Brands" !important; +} + +/* don't display links in code chunks when printing */ +/* source: https://stackoverflow.com/a/10781533 */ +@media print { + code a:link:after, code a:visited:after { + content: ""; + } +} + +/* Section anchors --------------------------------- + Added in pandoc 2.11: https://github.com/jgm/pandoc-templates/commit/9904bf71 +*/ + +div.csl-bib-body { } +div.csl-entry { + clear: both; +} +.hanging-indent div.csl-entry { + margin-left:2em; + text-indent:-2em; +} +div.csl-left-margin { + min-width:2em; + float:left; +} +div.csl-right-inline { + margin-left:2em; + padding-left:1em; +} +div.csl-indent { + margin-left: 2em; +} diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index e3512b63..bb37b275 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -12,7 +12,7 @@ articles: Outcome-Models: Outcome-Models.html Singularity-Image: Singularity-Image.html Testing-the-Package: Testing-the-Package.html -last_built: 2023-10-04T15:55Z +last_built: 2024-02-15T03:13Z urls: reference: https://NSAPH-Software.github.io/CausalGPS/reference article: https://NSAPH-Software.github.io/CausalGPS/articles diff --git a/docs/reference/autoplot.cgps_cw.html b/docs/reference/autoplot.cgps_cw.html new file mode 100644 index 00000000..f15c92b1 --- /dev/null +++ b/docs/reference/autoplot.cgps_cw.html @@ -0,0 +1,114 @@ + +A helper function for cgps_cw object — autoplot.cgps_cw • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    A helper function to plot cgps_cw object using ggplot2 package.

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_cw
    +autoplot(object, ...)
    +
    + +
    +

    Arguments

    +
    object
    +

    A cgps_cw object.

    + + +
    ...
    +

    Additional arguments passed to customize the plot.

    + +
    +
    +

    Value

    + + +

    Returns a ggplot object.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/autoplot.cgps_erf.html b/docs/reference/autoplot.cgps_erf.html new file mode 100644 index 00000000..ccb5d287 --- /dev/null +++ b/docs/reference/autoplot.cgps_erf.html @@ -0,0 +1,114 @@ + +A helper function for cgps_erf object — autoplot.cgps_erf • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    A helper function to plot cgps_erf object using ggplot2 package.

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_erf
    +autoplot(object, ...)
    +
    + +
    +

    Arguments

    +
    object
    +

    A cgps_erf object.

    + + +
    ...
    +

    Additional arguments passed to customize the plot.

    + +
    +
    +

    Value

    + + +

    Returns a ggplot object.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/autoplot.cgps_gps.html b/docs/reference/autoplot.cgps_gps.html new file mode 100644 index 00000000..e4d50eea --- /dev/null +++ b/docs/reference/autoplot.cgps_gps.html @@ -0,0 +1,114 @@ + +A helper function for cgps_gps object — autoplot.cgps_gps • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    A helper function to plot cgps_gps object using ggplot2 package.

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_gps
    +autoplot(object, ...)
    +
    + +
    +

    Arguments

    +
    object
    +

    A cgps_gps object.

    + + +
    ...
    +

    Additional arguments passed to customize the plot.

    + +
    +
    +

    Value

    + + +

    Returns a ggplot object.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/autoplot.cgps_pspop.html b/docs/reference/autoplot.cgps_pspop.html new file mode 100644 index 00000000..053cf123 --- /dev/null +++ b/docs/reference/autoplot.cgps_pspop.html @@ -0,0 +1,114 @@ + +A helper function for cgps_pspop object — autoplot.cgps_pspop • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    A helper function to plot cgps_pspop object using ggplot2 package.

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_pspop
    +autoplot(object, ...)
    +
    + +
    +

    Arguments

    +
    object
    +

    A cgps_pspop object.

    + + +
    ...
    +

    Additional arguments passed to customize the plot.

    + +
    +
    +

    Value

    + + +

    Returns a ggplot object.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/check_covar_balance.html b/docs/reference/check_covar_balance.html index 028895af..66ae5ef8 100644 --- a/docs/reference/check_covar_balance.html +++ b/docs/reference/check_covar_balance.html @@ -71,7 +71,15 @@

    Usage

    -
    check_covar_balance(w, c, ci_appr, counter_weight = NULL, nthread = 1, ...)
    +
    check_covar_balance(
    +  w,
    +  c,
    +  ci_appr,
    +  counter_weight = NULL,
    +  covar_bl_method = "absolute",
    +  covar_bl_trs = 0.1,
    +  covar_bl_trs_type = "mean"
    +)
    @@ -94,12 +102,17 @@

    Arguments @@ -110,26 +123,14 @@

    Value

    mean_absolute_corr

  • pass (TRUE,FALSE)

  • -

    -
    -

    Details

    - -
    -

    Additional parameters

    - -
    • For ci_appr == matching:

      • covar_bl_method

      • -
      • covar_bl_trs

      • -
    -
    -

    Examples

    # \donttest{
     set.seed(422)
     n <- 100
    -mydata <- generate_syn_data(sample_size=100)
    +mydata <- generate_syn_data(sample_size=n)
     year <- sample(x=c("2001","2002","2003","2004","2005"),size = n,
                   replace = TRUE)
     region <- sample(x=c("North", "South", "East", "West"),size = n,
    @@ -138,41 +139,56 @@ 

    Examplesmydata$region <- as.factor(region) mydata$cf5 <- as.factor(mydata$cf5) +m_xgboost <- function(nthread = 1, + ntrees = 35, + shrinkage = 0.3, + max_depth = 5, + ...) {SuperLearner::SL.xgboost( + nthread = nthread, + ntrees = ntrees, + shrinkage=shrinkage, + max_depth=max_depth, + ...)} - -pseudo_pop <- generate_pseudo_pop(mydata[, c("id", "w")], - mydata[, c("id", "cf1", "cf2", "cf3", - "cf4","cf5", "cf6", "year", - "region")], - ci_appr = "matching", - gps_density = "kernel", - exposure_trim_qtls = c(0.01,0.99), - sl_lib = c("m_xgboost"), - covar_bl_method = "absolute", - covar_bl_trs = 0.1, - covar_bl_trs_type = "mean", - max_attempt = 1, - dist_measure = "l1", - delta_n = 1, - scale = 0.5, - nthread = 1) -#> mean absolute correlation: 0.146209278430226| Covariate balance threshold: 0.1 +data_with_gps <- estimate_gps(.data = mydata, + .formula = w ~ cf1 + cf2 + cf3 + cf4 + cf5 + + cf6 + year + region, + sl_lib = c("m_xgboost"), + gps_density = "kernel") #> Loading required package: nnls -#> mean absolute correlation: 0.329695962727751| Covariate balance threshold: 0.1 -#> Covariate balance condition has not been met. -#> Best mean absolute correlation: 0.329695962727751| Covariate balance threshold: 0.1 +#> Error in get(library$library$predAlgorithm[s], envir = env): object 'm_xgboost' not found + + +cw_object_matching <- compute_counter_weight(gps_obj = data_with_gps, + ci_appr = "matching", + bin_seq = NULL, + nthread = 1, + delta_n = 0.1, + dist_measure = "l1", + scale = 0.5) +#> Error in compute_counter_weight(gps_obj = data_with_gps, ci_appr = "matching", bin_seq = NULL, nthread = 1, delta_n = 0.1, dist_measure = "l1", scale = 0.5): object 'data_with_gps' not found + +pseudo_pop <- generate_pseudo_pop(.data = mydata, + cw_obj = cw_object_matching, + covariate_col_names = c("cf1", "cf2", "cf3", + "cf4", "cf5", "cf6", + "year", "region"), + covar_bl_trs = 0.1, + covar_bl_trs_type = "maximal", + covar_bl_method = "absolute") +#> Error in generate_pseudo_pop(.data = mydata, cw_obj = cw_object_matching, covariate_col_names = c("cf1", "cf2", "cf3", "cf4", "cf5", "cf6", "year", "region"), covar_bl_trs = 0.1, covar_bl_trs_type = "maximal", covar_bl_method = "absolute"): object 'cw_object_matching' not found + -adjusted_corr_obj <- check_covar_balance(w = pseudo_pop$pseudo_pop[, c("w")], - c = pseudo_pop$pseudo_pop[ , - pseudo_pop$covariate_cols_name], - counter = pseudo_pop$pseudo_pop[, - c("counter_weight")], - ci_appr = "matching", - nthread = 1, - covar_bl_method = "absolute", - covar_bl_trs = 0.1, - covar_bl_trs_type = "mean") -#> mean absolute correlation: 0.329695962727751| Covariate balance threshold: 0.1 +adjusted_corr_obj <- check_covar_balance(w = pseudo_pop$.data[, c("w")], + c = pseudo_pop$.data[ , + pseudo_pop$params$covariate_col_names], + counter = pseudo_pop$.data[, + c("counter_weight")], + ci_appr = "matching", + covar_bl_method = "absolute", + covar_bl_trs = 0.1, + covar_bl_trs_type = "mean") +#> Error in ci_appr %in% c("matching", "weighting"): object 'pseudo_pop' not found # }

    diff --git a/docs/reference/check_kolmogorov_smirnov.html b/docs/reference/check_kolmogorov_smirnov.html index 3eea0bfe..acf61098 100644 --- a/docs/reference/check_kolmogorov_smirnov.html +++ b/docs/reference/check_kolmogorov_smirnov.html @@ -74,7 +74,7 @@

    Usage

    -
    check_kolmogorov_smirnov(w, c, ci_appr, counter_weight = NULL, nthread = 1)
    +
    check_kolmogorov_smirnov(w, c, ci_appr, counter_weight = NULL)
    @@ -96,10 +96,6 @@

    Arguments

    Value

    diff --git a/docs/reference/compile_pseudo_pop.html b/docs/reference/compile_pseudo_pop.html index 39cfbd95..676528ee 100644 --- a/docs/reference/compile_pseudo_pop.html +++ b/docs/reference/compile_pseudo_pop.html @@ -78,7 +78,6 @@

    Usage data_obj, ci_appr, gps_density, - bin_seq, exposure_col_name, nthread, ... @@ -106,12 +105,6 @@

    ArgumentsValue

    compile_pseudo_pop returns the pseudo population data that is compiled based on the selected causal inference approach.

    +
    +

    Details

    +

    For matching approach, use an extra parameter, bin_seq, which is sequence +of w (treatment) to generate pseudo population. If NULL is passed the +default value will be used, which is +seq(min(w)+delta_n/2,max(w), by=delta_n).

    +

    Examples

    # \donttest{
     set.seed(112)
     m_d <- generate_syn_data(sample_size = 100)
    -data_with_gps <- estimate_gps(m_d[, c("id", "w")],
    -                              m_d[, c("id", "cf1","cf2","cf3","cf4","cf5","cf6")],
    +
    +m_xgboost <- function(nthread = 1,
    +                      ntrees = 35,
    +                      shrinkage = 0.3,
    +                      max_depth = 5,
    +                      ...) {SuperLearner::SL.xgboost(
    +                        nthread = nthread,
    +                        ntrees = ntrees,
    +                        shrinkage=shrinkage,
    +                        max_depth=max_depth,
    +                        ...)}
    +
    +data_with_gps <- estimate_gps(.data = m_d,
    +                              .formula = w ~ cf1 + cf2 + cf3 +
    +                                             cf4 + cf5 + cf6,
                                   gps_density = "normal",
    -                              params = list(xgb_max_depth = c(3,4,5),
    -                                       xgb_nrounds=c(10,20,30,40,50,60)),
    -                              nthread = 1,
                                   sl_lib = c("m_xgboost")
                                  )
    +#> Error in get(library$library$predAlgorithm[s], envir = env): object 'm_xgboost' not found
     
     
     pd <- compile_pseudo_pop(data_obj = data_with_gps,
    @@ -160,6 +171,7 @@ 

    Examples covar_bl_trs_type= "mean", delta_n = 0.5, scale = 1) +#> Error in compile_pseudo_pop(data_obj = data_with_gps, ci_appr = "matching", gps_density = "normal", bin_seq = NULL, exposure_col_name = c("w"), nthread = 1, dist_measure = "l1", covar_bl_method = "absolute", covar_bl_trs = 0.1, covar_bl_trs_type = "mean", delta_n = 0.5, scale = 1): object 'data_with_gps' not found # }

    diff --git a/docs/reference/compute_counter_weight.html b/docs/reference/compute_counter_weight.html new file mode 100644 index 00000000..cbcedd75 --- /dev/null +++ b/docs/reference/compute_counter_weight.html @@ -0,0 +1,175 @@ + +Compute counter or weight of data samples — compute_counter_weight • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    Computes counter (for matching approach) or weight (for weighting) approach.

    +
    + +
    +

    Usage

    +
    compute_counter_weight(gps_obj, ci_appr, nthread = 1, ...)
    +
    + +
    +

    Arguments

    +
    gps_obj
    +

    A gps object that is generated with estimate_gps function. +If it is provided, the number of iteration will forced to 1 (Default: NULL).

    + + +
    ci_appr
    +

    The causal inference approach. Possible values are:

    • "matching": Matching by GPS

    • +
    • "weighting": Weighting by GPS

    • +
    + + +
    nthread
    +

    An integer value that represents the number of threads to be +used by internal packages.

    + + +
    ...
    +

    Additional arguments passed to different models.

    + +
    +
    +

    Value

    + + +

    Returns a counter_weight (cgps_cw) object that includes .data and params

    + + +

    attributes.

    • .data: includes id and counter_weight columns. In case of matching +the counter_weight column is integer values, which represent how many times +the provided observational data was mached during the matching process. In +case of weighting the column is double values.

    • +
    • params: Include related parameters that is used for the process.

    • +
    +
    +

    Details

    + +
    +

    Additional parameters

    + +
    +

    Causal Inference Approach (ci_appr)

    + +
    • if ci_appr = 'matching':

      • bin_seq: A sequence of w (treatment) to generate pseudo population. +If NULL is passed the default value will be used, which is +seq(min(w)+delta_n/2,max(w), by=delta_n).

      • +
      • dist_measure: Matching function. Available options:

        • l1: Manhattan distance matching

        • +
      • +
      • delta_n: caliper parameter.

      • +
      • scale: a specified scale parameter to control the relative weight that +is attributed to the distance measures of the exposure versus the GPS.

      • +
    • +
    + + +
    + +
    + +
    +

    Examples

    +
    # \donttest{
    +m_d <- generate_syn_data(sample_size = 100)
    +gps_obj <- estimate_gps(.data = m_d,
    +                        .formula = w ~ cf1 + cf2 + cf3 + cf4 + cf5 + cf6,
    +                        gps_density = "normal",
    +                        sl_lib = c("SL.xgboost"))
    +
    +cw_object <- compute_counter_weight(gps_obj = gps_obj,
    +                                    ci_appr = "matching",
    +                                    bin_seq = NULL,
    +                                    nthread = 1,
    +                                    delta_n = 0.1,
    +                                    dist_measure = "l1",
    +                                    scale = 0.5)
    +# }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/create_matching.html b/docs/reference/create_matching.html index 65389403..121a24fb 100644 --- a/docs/reference/create_matching.html +++ b/docs/reference/create_matching.html @@ -72,21 +72,27 @@

    Usage

    create_matching(
    -  data_obj,
    +  .data,
       exposure_col_name,
    +  matching_fn,
    +  dist_measure = dist_measure,
    +  gps_density = gps_density,
    +  delta_n = delta_n,
    +  scale = scale,
       bin_seq = NULL,
    -  gps_density = "normal",
    -  nthread = 1,
    -  ...
    +  nthread = 1
     )

    Arguments

    -
    data_obj
    -

    A list of elements. Including An original dataset as well -as helper vectors from estimating GPS. See compile_pseudo_pop() for more -details.

    +
    .data
    +

    TBD

    + + +
    gps_density
    +

    Model type which is used for estimating GPS value, including +normal (default) and kernel.

    bin_seq
    @@ -95,11 +101,6 @@

    ArgumentsCollabration

    Usage

    -
    create_weighting(dataset, exposure_col_name, ...)
    +
    create_weighting(dataset, exposure_col_name)

    Arguments

    dataset
    -

    The study data set.

    +

    A gps object data.

    -
    ...
    -

    Additional parameters.

    +
    exposure_col_name
    +

    The exposure column name.

    diff --git a/docs/reference/estimate_erf.html b/docs/reference/estimate_erf.html new file mode 100644 index 00000000..397e6a7d --- /dev/null +++ b/docs/reference/estimate_erf.html @@ -0,0 +1,141 @@ + +Estimate Exposure Response Function — estimate_erf • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    Estimates the exposure-response function (ERF) for a matched and weighted +dataset using parametric, semiparametric, and nonparametric models.

    +
    + +
    +

    Usage

    +
    estimate_erf(.data, .formula, weights_col_name, model_type, w_vals, ...)
    +
    + +
    +

    Arguments

    +
    .data
    +

    A data frame containing an observed continuous exposure variable, weights, +and an observed outcome variable. Includes an id column for future +reference.

    + + +
    .formula
    +

    A formula specifying the relationship between the exposure +variable and the outcome variable. For example, Y ~ w.

    + + +
    weights_col_name
    +

    A string representing the weight or counter column +name in .data.

    + + +
    model_type
    +

    A string representing the model type based on preliminary +assumptions, including parametric, semiparametric, and nonparametric +models.

    + + +
    w_vals
    +

    A numeric vector of values at which you want to calculate the +ERF.

    + + +
    ...
    +

    Additional arguments passed to the model.

    + +
    +
    +

    Value

    + + +

    Returns an S3 object containing the following data and parameters:

    • .data_original <- result_data_original

    • +
    • .data_prediction <- result_data_prediction

    • +
    • params

    • +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/estimate_gps.html b/docs/reference/estimate_gps.html index 06834103..83987be1 100644 --- a/docs/reference/estimate_gps.html +++ b/docs/reference/estimate_gps.html @@ -75,26 +75,25 @@

    Usage

    estimate_gps(
    -  w,
    -  c,
    +  .data,
    +  .formula,
       gps_density = "normal",
    -  params = list(),
    -  sl_lib = c("m_xgboost"),
    -  nthread = 1,
    +  sl_lib = c("SL.xgboost"),
       ...
     )

    Arguments

    -
    w
    -

    A data frame of observed continuous exposure variable. Including -id and w columns.

    +
    .data
    +

    A data frame of observed continuous exposure variable and +observed covariates variable. Also includes id column for future +references.

    -
    c
    -

    A data frame of observed covariates variable. Also includes id -column.

    +
    .formula
    +

    A formula specifying the relationship between the exposure +variable and the covariates. For example, w ~ I(cf1^2) + cf2.

    gps_density
    @@ -102,18 +101,9 @@

    ArgumentsArgumentsValue

    -

    The function returns a S3 object. Including the following:

    • dataset : id, w, gps

    • -
    • e_gps_pred

    • -
    • e_gps_std_pred

    • -
    • w_resid

    • -
    • gps_mx (min and max of gps)

    • +

      The function returns a S3 object. Including the following:

      • .data : id, w, gps, e_gps_pred, e_gps_std_pred, w_resid

      • +
      • params: Including the following fields:

        • gps_mx (min and max of gps)

        • w_mx (min and max of w).

        • -
        • used_params

        • +
        • .formula

        • +
        • gps_density

        • +
        • sl_lib

        • +
        • fcall (function call)

        • +
    -
    -

    Note

    -

    If internal.use is set to be FALSE, only original data set + GPS will -be returned.

    -

    The outcome variable is not used in estimating the GPS value. However, it is -used in compiling the data set with GPS values.

    -

    Examples

    # \donttest{
     m_d <- generate_syn_data(sample_size = 100)
    -data_with_gps <- estimate_gps(m_d[, c("id", "w")],
    -                              m_d[, c("id", "cf1", "cf2", "cf3",
    -                                      "cf4", "cf5", "cf6")],
    +data_with_gps <- estimate_gps(.data = m_d,
    +                              .formula = w ~ cf1 + cf2 + cf3 + cf4 + cf5 + cf6,
                                   gps_density = "normal",
    -                              params = list(xgb_max_depth = c(3,4,5),
    -                                       xgb_nrounds=c(10,20,30,40,50,60)),
    -                              nthread = 1,
    -                              sl_lib = c("m_xgboost")
    +                              sl_lib = c("SL.xgboost")
                                  )
     # }
     
    diff --git a/docs/reference/estimate_npmetric_erf.html b/docs/reference/estimate_npmetric_erf.html index 4c304b00..ec803cba 100644 --- a/docs/reference/estimate_npmetric_erf.html +++ b/docs/reference/estimate_npmetric_erf.html @@ -136,43 +136,6 @@

    DetailsEstimate Functions Using Local Polynomial kernel regression.

    -
    -

    Examples

    -
    # \donttest{
    -set.seed(697)
    -m_d <- generate_syn_data(sample_size = 200)
    -pseudo_pop <- generate_pseudo_pop(m_d[, c("id", "w")],
    -                                  m_d[, c("id", "cf1","cf2","cf3",
    -                                        "cf4","cf5","cf6")],
    -                                  ci_appr = "matching",
    -                                  pred_model = "sl",
    -                                  sl_lib = c("m_xgboost"),
    -                                  params = list(xgb_nrounds=c(10,20,30),
    -                                   xgb_eta=c(0.1,0.2,0.3)),
    -                                  nthread = 1,
    -                                  covar_bl_method = "absolute",
    -                                  covar_bl_trs = 0.1,
    -                                  covar_bl_trs_type="mean",
    -                                  max_attempt = 1,
    -                                  dist_measure = "l1",
    -                                  delta_n = 1,
    -                                  scale = 0.5)
    -#> mean absolute correlation: 0.233156732082237| Covariate balance threshold: 0.1
    -#> mean absolute correlation: 0.189312229205105| Covariate balance threshold: 0.1
    -#> Covariate balance condition has not been met.
    -#> Best mean absolute correlation: 0.189312229205105| Covariate balance threshold: 0.1
    -
    -data <- merge(m_d[, c("id", "Y")], pseudo_pop$pseudo_pop, by = "id")
    -erf_obj <- estimate_npmetric_erf(data$Y,
    -                                 data$w,
    -                                 data$counter_weight,
    -                                 bw_seq=seq(0.2,2,0.2),
    -                                 w_vals = seq(2,20,0.5),
    -                                 nthread = 1)
    -#> Error in checkForRemoteErrors(val): one node produced an error: could not find function "smooth_erf_locpol"
    -# }
    -
    -
    diff --git a/docs/reference/estimate_pmetric_erf.html b/docs/reference/estimate_pmetric_erf.html index 81fbc1b2..d3cca8fe 100644 --- a/docs/reference/estimate_pmetric_erf.html +++ b/docs/reference/estimate_pmetric_erf.html @@ -107,36 +107,6 @@

    DetailsThis method uses generalized nonlinear model (gnm) from gnm package.

    -
    -

    Examples

    -
    # \donttest{
    -m_d <- generate_syn_data(sample_size = 100)
    -pseudo_pop <- generate_pseudo_pop(m_d[, c("id", "w")],
    -                                  m_d[, c("id", "cf1","cf2","cf3",
    -                                          "cf4","cf5","cf6")],
    -                                  ci_appr = "matching",
    -                                  sl_lib = c("m_xgboost"),
    -                                  params = list(xgb_nrounds=c(10,20,30),
    -                                  xgb_eta=c(0.1,0.2,0.3)),
    -                                  nthread = 1,
    -                                  covar_bl_method = "absolute",
    -                                  covar_bl_trs = 0.1,
    -                                  covar_bl_trs_type= "mean",
    -                                  max_attempt = 1,
    -                                  dist_measure = "l1",
    -                                  delta_n = 1,
    -                                  scale = 0.5)
    -#> mean absolute correlation: 0.190532732398494| Covariate balance threshold: 0.1
    -#> mean absolute correlation: 0.149674153889077| Covariate balance threshold: 0.1
    -#> Covariate balance condition has not been met.
    -#> Best mean absolute correlation: 0.149674153889077| Covariate balance threshold: 0.1
    -data <- merge(m_d[, c("id", "Y")], pseudo_pop$pseudo_pop, by = "id")
    -outcome_m <- estimate_pmetric_erf(formula = Y ~ w,
    -                                  family = gaussian,
    -                                  data = data)
    -# }
    -
    -
    diff --git a/docs/reference/estimate_semipmetric_erf.html b/docs/reference/estimate_semipmetric_erf.html index 5b203202..e35e429b 100644 --- a/docs/reference/estimate_semipmetric_erf.html +++ b/docs/reference/estimate_semipmetric_erf.html @@ -107,37 +107,6 @@

    DetailsThis approach uses Generalized Additive Model (gam) using mgcv package.

    -
    -

    Examples

    -
    # \donttest{
    -m_d <- generate_syn_data(sample_size = 100)
    -pseudo_pop <- generate_pseudo_pop(m_d[, c("id", "w")],
    -                                  m_d[, c("id", "cf1","cf2","cf3",
    -                                          "cf4","cf5","cf6")],
    -                                  ci_appr = "matching",
    -                                  sl_lib = c("m_xgboost"),
    -                                  params = list(xgb_nrounds=c(10,20,30),
    -                                   xgb_eta=c(0.1,0.2,0.3)),
    -                                  nthread = 1,
    -                                  covar_bl_method = "absolute",
    -                                  covar_bl_trs = 0.1,
    -                                  covar_bl_trs_type = "mean",
    -                                  max_attempt = 1,
    -                                  dist_measure = "l1",
    -                                  delta_n = 1,
    -                                  scale = 0.5)
    -#> mean absolute correlation: 0.221667731370857| Covariate balance threshold: 0.1
    -#> mean absolute correlation: 0.150556845808525| Covariate balance threshold: 0.1
    -#> Covariate balance condition has not been met.
    -#> Best mean absolute correlation: 0.150556845808525| Covariate balance threshold: 0.1
    -data <- merge(m_d[, c("id", "Y")], pseudo_pop$pseudo_pop, by = "id")
    -outcome_m <- estimate_semipmetric_erf (formula = Y ~ w,
    -                                       family = gaussian,
    -                                       data = data)
    -
    -# }
    -
    -
    diff --git a/docs/reference/figures/png/process_flow.png b/docs/reference/figures/png/process_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..1da4d09763c0bf0c871895928c42c53d9154fa90 GIT binary patch literal 147161 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%0D38Aa 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

    Usage

    generate_pseudo_pop(
    -  w,
    -  c,
    -  ci_appr,
    -  gps_density = "normal",
    -  use_cov_transform = FALSE,
    -  transformers = list("pow2", "pow3"),
    -  bin_seq = NULL,
    -  exposure_trim_qtls = c(0.01, 0.99),
    -  gps_trim_qtls = c(0, 1),
    -  params = list(),
    -  sl_lib = c("m_xgboost"),
    -  nthread = 1,
    -  include_original_data = FALSE,
    -  gps_obj = NULL,
    -  ...
    +  .data,
    +  cw_obj,
    +  covariate_col_names,
    +  covar_bl_trs = 0.1,
    +  covar_bl_trs_type = "maximal",
    +  covar_bl_method = "absolute"
     )

    Arguments

    -
    w
    -

    A data.frame comprised of two columns: one contains the observed -exposure variable, and the other is labeled as 'id'. The column for the -outcome variable can be assigned any name as per your requirements.

    +
    .data
    +

    A data.frame of observation data with id column.

    -
    c
    -

    A data.frame of includes observed covariate variables. It should -also consist of a column named 'id'.

    +
    cw_obj
    +

    An S3 object of counter_weight.

    -
    ci_appr
    -

    The causal inference approach. Possible values are:

    • "matching": Matching by GPS

    • -
    • "weighting": Weighting by GPS

    • -
    +
    covariate_col_names
    +

    A list of covariate columns.

    -
    gps_density
    -

    Model type which is used for estimating GPS value, -including normal (default) and kernel.

    +
    covar_bl_trs
    +

    Covariate balance threshold

    -
    use_cov_transform
    -

    If TRUE, the function uses transformer to meet the -covariate balance.

    +
    covar_bl_trs_type
    +

    Type of the covariance balance threshold.

    -
    transformers
    -

    A list of transformers. Each transformer should be a -unary function. You can pass name of customized function in the quotes. -Available transformers:

    • pow2: to the power of 2

    • -
    • pow3: to the power of 3

    • -
    - - -
    bin_seq
    -

    Sequence of w (treatment) to generate pseudo population. If -NULL is passed the default value will be used, which is -seq(min(w)+delta_n/2,max(w), by=delta_n).

    - - -
    exposure_trim_qtls
    -

    A numerical vector of two. Represents the trim quantile -level for exposure values. Both numbers should be in the range of [0,1] and -in increasing order (default: c(0.01, 0.99)).

    - - -
    gps_trim_qtls
    -

    A numerical vector of two. Represents the trim quantile -level for the gps values. Both numbers should be in the range of [0,1] and -in increasing order (default: c(0.0, 1.0)).

    - - -
    params
    -

    Includes list of params that is used internally. Unrelated -parameters will be ignored.

    - - -
    sl_lib
    -

    A vector of prediction algorithms.

    - - -
    nthread
    -

    An integer value that represents the number of threads to be -used by internal packages.

    - - -
    include_original_data
    -

    If TRUE, includes the original data in the -outcome.

    - - -
    gps_obj
    -

    A gps object that is generated with estimate_gps function. -If it is provided, the number of iteration will forced to 1 (Default: NULL).

    - - -
    ...
    -

    Additional arguments passed to different models.

    +
    covar_bl_method
    +

    Covariate balance method.

    @@ -200,67 +134,53 @@

    Value

    best_gps_used_params

  • effect size of generated pseudo population

  • -
    -

    Details

    - -
    -

    Additional parameters

    - -
    -

    Causal Inference Approach (ci_appr)

    - -
    • if ci_appr = 'matching':

      • dist_measure: Matching function. Available options:

        • l1: Manhattan distance matching

        • -
      • -
      • delta_n: caliper parameter.

      • -
      • scale: a specified scale parameter to control the relative weight that -is attributed to the distance measures of the exposure versus the GPS.

      • -
      • covar_bl_method: covariate balance method. Available options:

        • 'absolute'

        • -
      • -
      • covar_bl_trs: covariate balance threshold

      • -
      • covar_bl_trs_type: covariate balance type (mean, median, maximal)

      • -
      • max_attempt: maximum number of attempt to satisfy covariate balance.

      • -
      • See create_matching() for more details about the parameters and default -values.

      • -
    • -
    • if ci_appr = 'weighting':

      • covar_bl_method: Covariate balance method.

      • -
      • covar_bl_trs: Covariate balance threshold

      • -
      • max_attempt: Maximum number of attempt to satisfy covariate balance.

      • -
    • -
    - - -
    - -

    Examples

    # \donttest{
    -m_d <- generate_syn_data(sample_size = 100)
    -pseuoo_pop <- generate_pseudo_pop(m_d[, c("id", "w")],
    -                                  m_d[, c("id", "cf1","cf2","cf3","cf4","cf5","cf6")],
    -                                  ci_appr = "matching",
    -                                  gps_density = "normal",
    -                                  bin_seq = NULL,
    -                                  expos_trim_qlts = c(0.01,0.99),
    -                                  gps_trim_qlts = c(0.01,0.99),
    -                                  use_cov_transform = FALSE,
    -                                  transformers = list(),
    -                                  params = list(xgb_nrounds=c(10,20,30),
    -                                                xgb_eta=c(0.1,0.2,0.3)),
    -                                  sl_lib = c("m_xgboost"),
    -                                  nthread = 1,
    -                                  covar_bl_method = "absolute",
    +
    +set.seed(967)
    +
    +m_d <- generate_syn_data(sample_size = 200)
    +m_d$id <- seq_along(1:nrow(m_d))
    +
    +m_xgboost <- function(nthread = 4,
    +                      ntrees = 35,
    +                      shrinkage = 0.3,
    +                      max_depth = 5,
    +                      ...) {SuperLearner::SL.xgboost(
    +                        nthread = nthread,
    +                        ntrees = ntrees,
    +                        shrinkage=shrinkage,
    +                        max_depth=max_depth,
    +                        ...)}
    +
    +data_with_gps_1 <- estimate_gps(
    +  .data = m_d,
    +  .formula = w ~ I(cf1^2) + cf2 + I(cf3^2) + cf4 + cf5 + cf6,
    +  sl_lib = c("m_xgboost"),
    +  gps_density = "normal")
    +#> Error in get(library$library$predAlgorithm[s], envir = env): object 'm_xgboost' not found
    +
    +cw_object_matching <- compute_counter_weight(gps_obj = data_with_gps_1,
    +                                             ci_appr = "matching",
    +                                             bin_seq = NULL,
    +                                             nthread = 1,
    +                                             delta_n = 0.1,
    +                                             dist_measure = "l1",
    +                                             scale = 0.5)
    +#> Error in compute_counter_weight(gps_obj = data_with_gps_1, ci_appr = "matching",     bin_seq = NULL, nthread = 1, delta_n = 0.1, dist_measure = "l1",     scale = 0.5): object 'data_with_gps_1' not found
    +
    +pseudo_pop <- generate_pseudo_pop(.data = m_d,
    +                                  cw_obj = cw_object_matching,
    +                                  covariate_col_names = c("cf1", "cf2",
    +                                                          "cf3", "cf4",
    +                                                          "cf5", "cf6"),
                                       covar_bl_trs = 0.1,
    -                                  covar_bl_trs_type= "mean",
    -                                  max_attempt = 1,
    -                                  dist_measure = "l1",
    -                                  delta_n = 1,
    -                                  scale = 0.5)
    -#> mean absolute correlation: 0.187874919634512| Covariate balance threshold: 0.1
    -#> mean absolute correlation: 0.259346434375271| Covariate balance threshold: 0.1
    -#> Covariate balance condition has not been met.
    -#> Best mean absolute correlation: 0.259346434375271| Covariate balance threshold: 0.1
    +                                  covar_bl_trs_type = "maximal",
    +                                  covar_bl_method = "absolute")
    +#> Error in generate_pseudo_pop(.data = m_d, cw_obj = cw_object_matching,     covariate_col_names = c("cf1", "cf2", "cf3", "cf4", "cf5",         "cf6"), covar_bl_trs = 0.1, covar_bl_trs_type = "maximal",     covar_bl_method = "absolute"): object 'cw_object_matching' not found
    +
     # }
     
    diff --git a/docs/reference/index.html b/docs/reference/index.html index 3e2a8546..72d0dda9 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -118,6 +118,11 @@

    Generate pseudo populationCompile pseudo population
    + compute_counter_weight() +
    +
    Compute counter or weight of data samples
    +
    + check_covar_balance()
    Check covariate balance
    @@ -144,19 +149,9 @@

    Outcome models
    - estimate_npmetric_erf() -
    -
    Estimate smoothed exposure-response function (ERF) for pseudo population
    -

    - - estimate_semipmetric_erf() + estimate_erf()
    -
    Estimate semi-exposure-response function (semi-ERF).
    -
    - - estimate_pmetric_erf() -
    -
    Estimate Parametric Exposure Response Function
    +
    Estimate Exposure Response Function

    Utilities

    @@ -185,34 +180,69 @@

    Utilitiesplot(<gpsm_erf>) + trim_it() + +
    Trim a data frame or an S3 object
    +
    + + plot(<cgps_cw>) +
    +
    Extend generic plot functions for cgps_cw class
    +
    + + plot(<cgps_gps>) +
    +
    Extend generic plot functions for cgps_gps class
    +
    + + plot(<cgps_erf>) +
    +
    Extend generic plot functions for cgps_cw class
    +
    + + plot(<cgps_pspop>) +
    +
    Extend generic plot functions for cgps_pspop class
    +
    + + print(<cgps_gps>) +
    +
    Extend print function for cgps_gps object
    +
    + + print(<cgps_cw>) +
    +
    Extend print function for cgps_cw object
    +
    + + print(<cgps_erf>)
    -
    Extend generic plot functions for gpsm_erf class
    +
    Extend print function for cgps_erf object
    - plot(<gpsm_pspop>) + print(<cgps_pspop>)
    -
    Extend generic plot functions for gpsm_erf class
    +
    Extend print function for cgps_pspop object
    - print(<gpsm_erf>) + summary(<cgps_erf>)
    -
    Extend print function for gpsm_erf object
    +
    print summary of cgps_erf object
    - print(<gpsm_pspop>) + summary(<cgps_pspop>)
    -
    Extend print function for gpsm_pspop object
    +
    print summary of cgps_pspop object
    - summary(<gpsm_erf>) + summary(<cgps_cw>)
    -
    print summary of gpsm_erf object
    +
    print summary of cgps_cw object
    - summary(<gpsm_pspop>) + summary(<cgps_gps>)
    -
    print summary of gpsm_pspop object
    +
    print summary of cgps_gps object

    Data

    diff --git a/docs/reference/plot.cgps_cw.html b/docs/reference/plot.cgps_cw.html new file mode 100644 index 00000000..2820fd35 --- /dev/null +++ b/docs/reference/plot.cgps_cw.html @@ -0,0 +1,120 @@ + +Extend generic plot functions for cgps_cw class — plot.cgps_cw • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    A wrapper function to extend generic plot functions for cgps_cw class.

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_cw
    +plot(x, ...)
    +
    + +
    +

    Arguments

    +
    x
    +

    A cgps_cw object.

    + + +
    ...
    +

    Additional arguments passed to customize the plot.

    + +
    +
    +

    Value

    + + +

    Returns a ggplot2 object, invisibly. This function is called for side effects.

    +
    +
    +

    Details

    +

    Additional parameters:

    • every_n: Puts label to ID at every n interval (default = 10)

    • +
    • subset_id: A vector of range of ids to be included in the plot +(default = NULL)

    • +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot.cgps_erf.html b/docs/reference/plot.cgps_erf.html new file mode 100644 index 00000000..0f7275f0 --- /dev/null +++ b/docs/reference/plot.cgps_erf.html @@ -0,0 +1,118 @@ + +Extend generic plot functions for cgps_cw class — plot.cgps_erf • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    A wrapper function to extend generic plot functions for cgps_cw class.

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_erf
    +plot(x, ...)
    +
    + +
    +

    Arguments

    +
    x
    +

    A cgps_erf object.

    + + +
    ...
    +

    Additional arguments passed to customize the plot.

    + +
    +
    +

    Value

    + + +

    Returns a ggplot2 object, invisibly. This function is called for side effects.

    +
    +
    +

    Details

    +

    TBD

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot.cgps_gps.html b/docs/reference/plot.cgps_gps.html new file mode 100644 index 00000000..2a715ebc --- /dev/null +++ b/docs/reference/plot.cgps_gps.html @@ -0,0 +1,114 @@ + +Extend generic plot functions for cgps_gps class — plot.cgps_gps • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    A wrapper function to extend generic plot functions for cgps_gps class.

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_gps
    +plot(x, ...)
    +
    + +
    +

    Arguments

    +
    x
    +

    A cgps_gps object.

    + + +
    ...
    +

    Additional arguments passed to customize the plot.

    + +
    +
    +

    Value

    + + +

    Returns a ggplot2 object, invisibly. This function is called for side effects.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot.cgps_pspop.html b/docs/reference/plot.cgps_pspop.html new file mode 100644 index 00000000..ba769340 --- /dev/null +++ b/docs/reference/plot.cgps_pspop.html @@ -0,0 +1,124 @@ + +Extend generic plot functions for cgps_pspop class — plot.cgps_pspop • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    A wrapper function to extend generic plot functions for cgps_pspop class.

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_pspop
    +plot(x, ...)
    +
    + +
    +

    Arguments

    +
    x
    +

    A cgps_pspop object.

    + + +
    ...
    +

    Additional arguments passed to customize the plot.

    + +
    +
    +

    Value

    + + +

    Returns a ggplot2 object, invisibly. This function is called for side effects.

    +
    +
    +

    Details

    + +
    +

    Additional parameters

    + +
    • include_details: If set to TRUE, the plot will include run details (Default = FALSE).

    • +
    + +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.cgps_cw.html b/docs/reference/print.cgps_cw.html new file mode 100644 index 00000000..1439ceb6 --- /dev/null +++ b/docs/reference/print.cgps_cw.html @@ -0,0 +1,114 @@ + +Extend print function for cgps_cw object — print.cgps_cw • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    Extend print function for cgps_cw object

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_cw
    +print(x, ...)
    +
    + +
    +

    Arguments

    +
    x
    +

    A cgps_cw object.

    + + +
    ...
    +

    Additional arguments passed to customize the results.

    + +
    +
    +

    Value

    + + +

    No return value. This function is called for side effects.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.cgps_erf.html b/docs/reference/print.cgps_erf.html new file mode 100644 index 00000000..7ca0bd1f --- /dev/null +++ b/docs/reference/print.cgps_erf.html @@ -0,0 +1,114 @@ + +Extend print function for cgps_erf object — print.cgps_erf • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    Extend print function for cgps_erf object

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_erf
    +print(x, ...)
    +
    + +
    +

    Arguments

    +
    x
    +

    A cgps_erf object.

    + + +
    ...
    +

    Additional arguments passed to customize the results.

    + +
    +
    +

    Value

    + + +

    No return value. This function is called for side effects.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.cgps_gps.html b/docs/reference/print.cgps_gps.html new file mode 100644 index 00000000..56855a1c --- /dev/null +++ b/docs/reference/print.cgps_gps.html @@ -0,0 +1,114 @@ + +Extend print function for cgps_gps object — print.cgps_gps • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    Extend print function for cgps_gps object

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_gps
    +print(x, ...)
    +
    + +
    +

    Arguments

    +
    x
    +

    A cgps_gps object.

    + + +
    ...
    +

    Additional arguments passed to customize the results.

    + +
    +
    +

    Value

    + + +

    No return value. This function is called for side effects.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.cgps_pspop.html b/docs/reference/print.cgps_pspop.html new file mode 100644 index 00000000..06cdce29 --- /dev/null +++ b/docs/reference/print.cgps_pspop.html @@ -0,0 +1,114 @@ + +Extend print function for cgps_pspop object — print.cgps_pspop • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    Extend print function for cgps_pspop object

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_pspop
    +print(x, ...)
    +
    + +
    +

    Arguments

    +
    x
    +

    A cgps_pspop object.

    + + +
    ...
    +

    Additional arguments passed to customize the results.

    + +
    +
    +

    Value

    + + +

    No return value. This function is called for side effects.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/summary.cgps_cw.html b/docs/reference/summary.cgps_cw.html new file mode 100644 index 00000000..73ced4fb --- /dev/null +++ b/docs/reference/summary.cgps_cw.html @@ -0,0 +1,114 @@ + +print summary of cgps_cw object — summary.cgps_cw • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    print summary of cgps_cw object

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_cw
    +summary(object, ...)
    +
    + +
    +

    Arguments

    +
    object
    +

    A cgps_cw object.

    + + +
    ...
    +

    Additional arguments passed to customize the results.

    + +
    +
    +

    Value

    + + +

    Returns summary of data

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/summary.cgps_erf.html b/docs/reference/summary.cgps_erf.html new file mode 100644 index 00000000..456908f9 --- /dev/null +++ b/docs/reference/summary.cgps_erf.html @@ -0,0 +1,114 @@ + +print summary of cgps_erf object — summary.cgps_erf • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    print summary of cgps_erf object

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_erf
    +summary(object, ...)
    +
    + +
    +

    Arguments

    +
    object
    +

    A cgps_erf object.

    + + +
    ...
    +

    Additional arguments passed to customize the results.

    + +
    +
    +

    Value

    + + +

    Returns summary of data

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/summary.cgps_gps.html b/docs/reference/summary.cgps_gps.html new file mode 100644 index 00000000..f82b3779 --- /dev/null +++ b/docs/reference/summary.cgps_gps.html @@ -0,0 +1,114 @@ + +print summary of cgps_gps object — summary.cgps_gps • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    print summary of cgps_gps object

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_gps
    +summary(object, ...)
    +
    + +
    +

    Arguments

    +
    object
    +

    A cgps_gps object.

    + + +
    ...
    +

    Additional arguments passed to customize the results.

    + +
    +
    +

    Value

    + + +

    Returns summary of data

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/summary.cgps_pspop.html b/docs/reference/summary.cgps_pspop.html new file mode 100644 index 00000000..b8aa7911 --- /dev/null +++ b/docs/reference/summary.cgps_pspop.html @@ -0,0 +1,114 @@ + +print summary of cgps_pspop object — summary.cgps_pspop • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    print summary of cgps_pspop object

    +
    + +
    +

    Usage

    +
    # S3 method for cgps_pspop
    +summary(object, ...)
    +
    + +
    +

    Arguments

    +
    object
    +

    A cgps_pspop object.

    + + +
    ...
    +

    Additional arguments passed to customize the results.

    + +
    +
    +

    Value

    + + +

    Returns summary of data

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/trim_it.html b/docs/reference/trim_it.html new file mode 100644 index 00000000..d147952e --- /dev/null +++ b/docs/reference/trim_it.html @@ -0,0 +1,137 @@ + +Trim a data frame or an S3 object — trim_it • CausalGPS + Skip to contents + + +
    +
    +
    + +
    +

    Trims a data frame or an S3 object's .data attributs.

    +
    + +
    +

    Usage

    +
    trim_it(data_obj, trim_quantiles, variable)
    +
    + +
    +

    Arguments

    +
    data_obj
    +

    A data frame or an S3 object containing the data to be +trimmed. For a data frame, the function operates directly on it. For an S3 +object, the function expects a .data attribute containing the data.

    + + +
    trim_quantiles
    +

    A numeric vector of length 2 specifying the lower and +upper quantiles used for trimming the data.

    + + +
    variable
    +

    The name of the variable in the data on which the trimming is +to be applied.

    + +
    +
    +

    Value

    + + +

    Returns a trimmed data frame or an S3 object with the $.data attribute +trimmed, depending on the input type.

    +
    + +
    +

    Examples

    +
    
    +# Example usage with a data frame
    +df <- data.frame(id = 1:10, value = rnorm(100))
    +trimmed_df <- trim_it(df, c(0.1, 0.9), "value")
    +
    +# Example usage with an S3 object
    +data_obj <- list()
    +class(data_obj) <- "myobject"
    +data_obj$.data <- df
    +trimmed_data_obj <- trim_it(data_obj, c(0.1, 0.9), "value")
    +
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/search.json b/docs/search.json index 166689e6..22f0504c 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -[{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement nkhoshnevis@g.harvard.edu. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.1, available https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. Community Impact Guidelines inspired [Mozilla’s code conduct enforcement ladder][https://github.com/mozilla/inclusion]. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https://www.contributor-covenant.org/translations.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/CausalGPS.html","id":"installation","dir":"Articles","previous_headings":"","what":"Installation","title":"CausalGPS","text":"","code":"library(\"devtools\") install_github(\"NSAPH-Software/CausalGPS\", ref=\"master\") library(\"CausalGPS\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/CausalGPS.html","id":"usage","dir":"Articles","previous_headings":"","what":"Usage","title":"CausalGPS","text":"Input parameters: Y vector observed outcome variable.w vector observed continuous exposure variable.c data.frame matrix observed covariates variable.ci_appr causal inference approach. Possible values : - “matching”: Matching GPS - “weighting”: Weighting GPSgps_density Model density type used estimating GPS value, including normal (default) kernel.use_cov_transform TRUE, function uses transformer meet covariate balance.transformers list transformers. transformer unary function. can pass name customized function quotes. Available transformers: - pow2: power 2 - pow3: power 3bin_seq Sequence w (treatment) generate pseudo population. NULL passed default value used, seq(min(w)+delta_n/2,max(w), =delta_n).exposure_trim_qtls numerical vector two. Represents trim quantile level exposure value. numbers range [0,1] increasing order (default: c(0.01,0.99)). gps_trim_qtls numerical vector two. Represents trim quantile level gps value. numbers range [0,1] increasing order (default: c(0.0, 1.0)).params Includes list params used internally. Unrelated parameters ignored.sl_lib: vector prediction algorithms. nthread integer value represents number threads used internal packages.... Additional arguments passed different models.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/CausalGPS.html","id":"causal-inference-approach-ci-appr","dir":"Articles","previous_headings":"Additional parameters","what":"Causal Inference Approach (ci.appr)","title":"CausalGPS","text":"l1: Manhattan distance matching delta_n: caliper parameter. scale: specified scale parameter control relative weight attributed distance measures exposure versus GPS. ‘absolute’ covar_bl_trs: covariate balance threshold covar_bl_trs_type: covariate balance type (mean, median, maximal) max_attempt: maximum number attempt satisfy covariate balance. See create_matching() details parameters default values. covar_bl_method: Covariate balance method. covar_bl_trs: Covariate balance threshold max_attempt: Maximum number attempt satisfy covariate balance. Generating Pseudo Population matching_fn Manhattan distance matching approach. prediction model use SuperLearner package. SuperLearner supports different machine learning methods packages. params list hyperparameters users can pass third party libraries SuperLearner package. hyperparameters go params list. prefixes used distinguished parameters different libraries. following table shows external package names, equivalent name used sl_lib, prefixes used hyperparameters params list, available hyperparameters. nthread number available threads (cores). XGBoost needs OpenMP installed system parallelize processing. Estimating GPS Estimating Exposure Rate Function Generating Synthetic Data Logging CausalGPS package logging internal activities CausalGPS.log file. file located source file location appended. Users can change logging file name (path) logging threshold. logging mechanism different thresholds (see logger package). two important thresholds INFO DEBUG levels. former, default level, logs general information process. latter, activated, logs detailed information can used debugging purposes.","code":"set.seed(422) n <- 1000 mydata <- generate_syn_data(sample_size = n) year <- sample(x=c(\"2001\", \"2002\", \"2003\", \"2004\", \"2005\"), size = n, replace = TRUE) region <- sample(x=c(\"North\", \"South\", \"East\", \"West\"),size = n, replace = TRUE) mydata$year <- as.factor(year) mydata$region <- as.factor(region) mydata$cf5 <- as.factor(mydata$cf5) pseudo_pop <- generate_pseudo_pop( mydata[, c(\"id\", \"w\")], mydata[, c(\"id\", \"cf1\", \"cf2\", \"cf3\", \"cf4\", \"cf5\", \"cf6\",\"year\",\"region\")], ci_appr = \"matching\", gps_density = \"kernel\", use_cov_transform = TRUE, transformers = list(\"pow2\", \"pow3\", \"abs\", \"scale\"), exposure_trim_qtls = c(0.01,0.99), sl_lib = c(\"m_xgboost\"), covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 4, dist_measure = \"l1\", delta_n = 1, scale = 0.5, nthread = 1) plot(pseudo_pop) data_with_gps <- estimate_gps(w, c, params = list(xgb_max_depth = c(3,4,5), xgb_rounds = c(10,20,30,40)), nthread = 1, sl_lib = c(\"m_xgboost\") ) estimate_npmetric_erf<-function(matched_Y, matched_w, matched_counter = NULL, bw_seq=seq(0.2,2,0.2), w_vals, nthread) syn_data <- generate_syn_data(sample_size=100, outcome_sd = 10, gps_spec = 1, cova_spec = 1)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"environment-setup","dir":"Articles","previous_headings":"","what":"Environment Setup","title":"Developers Guide","text":"order contribute project, better idea local copy CausalGPS Github account. steps: Navigate CausalGPS Github repository, top right corner, click Fork button. add clone project Github account. Open terminal (Gitbash Windows, Anaconda prompt, …) run following command (brackets included): already SSH key, need generate one. Read . Now, can modify codebase track modification. good idea create new branch work codebase. Read following instructions git branching.","code":"git clone git@github.com:[your user name]/CausalGPS.git"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"git-branching-model","dir":"Articles","previous_headings":"","what":"Git Branching Model","title":"Developers Guide","text":"Although, personal repository, can pick branch name, however, order keep consistency also understand working , following convention strongly recommended. project, follow convention proposed Vincent Driessen successful Git branching model post. summary branches: master: master branch hosts released software packages. project maintainers write access master branch. develop: develop branch considered main branch source code HEAD always reflects state latest delivered development changes next release. feature: start new feature branch add new features software. naming convention iss[issue_number]_short_description. example, need add unittest one functions package issue number 12, iss12_add_unittest can valid git branch name. start issue number go back take look issue details necessary. Although feature branches temporary, naming convention helps developers understand situation working codebase. working features open issue , please open issue assign . can also make comment working . hotfix: hotfix branches used fixing bug released package. fixing bug, third digit version number incremented one. example, 2.3.5 –> 2.3.6. branches prefixed hotfix followed upcoming version number (e.g., case, hotfix_2.3.6) release: Release branches support preparation new production release.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"where-to-submit-pull-requests","dir":"Articles","previous_headings":"","what":"Where to submit pull requests?","title":"Developers Guide","text":"pull requests submitted base repository: NSAPH-Software/CausalGPS base: develop branch.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"pull-request-checklist","dir":"Articles","previous_headings":"","what":"Pull request checklist","title":"Developers Guide","text":"Please run devtools::document(), devtools::load_all() final modifications. Make sure modified code passes checks tests (can run devtools::check() RStudio) PR pass CI reviews can merge . Add line(s) modification NEWS.md file. adding new features, please make sure appropriate documentation added updated. Please clean white spaces. Read .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"reporting-bugs","dir":"Articles","previous_headings":"","what":"Reporting bugs","title":"Developers Guide","text":"Please report potential bugs creating new issue sending us email. Please include following information bug report: brief description , expected happen, happened. OS using whether using personal computer HPC cluster. version package installed.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"style-guide","dir":"Articles","previous_headings":"","what":"Style Guide","title":"Developers Guide","text":"project, follow tidyverse style guide.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"names","dir":"Articles","previous_headings":"Style Guide > Summary","what":"Names","title":"Developers Guide","text":"File names snake_case ends .R (e.g., create_matching.R) variable names small letter separate _ need (e.g., delta_n) Function names follow snake_case style (e.g., generate_data) Function names follow verb+output convention (e.g., compute_resid)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"spaces-and-indentation","dir":"Articles","previous_headings":"Style Guide > Summary","what":"Spaces and Indentation","title":"Developers Guide","text":"Indentations two spaces (use tab) Place space around binary operators (e.g., x + y) Place space comma Place space # commenting avoid multiple ### put space opening closing parenthesis Place space () used , , .","code":"#Acceptable: z <- x + y #Not recommended: z<-x+y # (no space) z<- x+y z<-x +y #Acceptable: a <- matrix(c(1:100), nrow = 5) #Not recommended: a <- matrix(c(1:100),nrow = 5) # (no space after comma) a <- matrix( c(1:100), nrow = 5 ) # (extra space after and before parentheses) a<-matrix(c(1:100), nrow = 5) # (no space around unary operator <- ) #Acceptable: # This is a comment #Not recommended: #This is a comment # This is a comment (more than one space after #) ## This is a comment (multiple #) ### This is a comment (multiple # and more than one space) #Acceptable: x <- (z + y) #Not recommended: x <- ( z + y ) # (unnecessary space) x <- (z + y ) x <- ( z + y) #Acceptible if (x > 2) { print(x) } # Not recommended if(x > 2){ print(x) }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"other-notes","dir":"Articles","previous_headings":"Style Guide > Summary","what":"Other notes","title":"Developers Guide","text":"Maximum line length 80 character Use explicit returns Use explicit tags documentation (e.g., @title, @description, …)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"notes-on-superlearner","dir":"Articles","previous_headings":"","what":"Notes on SuperLearner","title":"Developers Guide","text":"package create customized wrapper SuperLearner internal libraries. Please read Notes SL Wrappers details.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"logger","dir":"Articles","previous_headings":"","what":"Logger","title":"Developers Guide","text":"Use logger investigate internal process. default level “INFO”, writes messages “CausalGPS.log” file. can use update_logger function change log file location level.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/ERF-Kernel-Smoothing.html","id":"multiplication-factor-100","dir":"Articles","previous_headings":"","what":"Multiplication factor: 100","title":"ERF Kernel Smoothing","text":"","code":"plot_list_100 <- compare_smooth_methods(100) #> Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0. #> ℹ Please use `linewidth` instead. #> This warning is displayed once every 8 hours. #> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was #> generated. #> [1] \"Max residual for bw = 5e-04 : 0.376724232844119\" #> [1] \"Max residual for bw = 0.001 : 0.34102886655536\" #> [1] \"Max residual for bw = 0.01 : 0.00885525713034725\" #> [1] \"Max residual for bw = 0.1 : 0.0015642091493715\" #> [1] \"Max residual for bw = 1 : 0.000887744632188214\" grid.arrange(grobs = plot_list_100, ncol = 2)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/ERF-Kernel-Smoothing.html","id":"multiplication-factor-1000","dir":"Articles","previous_headings":"","what":"Multiplication factor: 1000","title":"ERF Kernel Smoothing","text":"visualizations clearly illustrate significance multiplication factor diminishes bandwidth value escalates. Therefore, within package, ’ve opted utilize multiplication factor 100. caution employing multiplication factor 1000 potentially trigger memory overflow errors handling medium large datasets. require control multiplication factor, encourage open issue.","code":"plot_list_1000 <- compare_smooth_methods(1000) #> [1] \"Max residual for bw = 5e-04 : 0.37053801414259\" #> [1] \"Max residual for bw = 0.001 : 0.340214416795152\" #> [1] \"Max residual for bw = 0.01 : 0.001086480021527\" #> [1] \"Max residual for bw = 0.1 : 0.00108884634631823\" #> [1] \"Max residual for bw = 1 : 9.28881533373005e-05\" grid.arrange(grobs = plot_list_1000, ncol = 2)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Estimating-GPS.html","id":"available-superlearner-libraries","dir":"Articles","previous_headings":"","what":"Available SuperLearner Libraries","title":"Estimating GPS","text":"users can use library SuperLearner package. However, order control internal libraries generate customized wrappers. following table represents available customized wrappers well hyperparameters.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Estimating-GPS.html","id":"implementation","dir":"Articles","previous_headings":"","what":"Implementation","title":"Estimating GPS","text":"XGBoost ranger libraries developed efficient processing multiple cores. requirement making sure OpenMP installed system. User needs pass number threads (nthread) running estimate_gps function. following section, conduct several analyses test scalability performance. analyses can used rough estimate expect different data sizes computational resources.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/FAQ.html","id":"how-to-define-a-new-transformer","dir":"Articles","previous_headings":"","what":"1) How to define a new transformer?","title":"Frequently Asked Questions","text":"Transformers unary functions applied covariates. example “power 5”. can pass transformers list \"pow5\".","code":"pow5 <- function(x) {x^5}"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/FAQ.html","id":"is-the-order-of-transformers-important","dir":"Articles","previous_headings":"","what":"2) Is the order of transformers important?","title":"Frequently Asked Questions","text":"gen_pseudo_pop function tries transformers covariate balance test met previous attempt. covariate worst balance value chosen apply transformer. first transformer list selected purpose. transformer used specific covariate, next value selected.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/FAQ.html","id":"how-change-the-logger-level","dir":"Articles","previous_headings":"","what":"3) How change the logger level?","title":"Frequently Asked Questions","text":"can use set_logger function set logger_level one “TRACE”, “DEBUG”, “INFO”, “SUCCESS”, “WARN”, “ERROR”, ”FATAL”. package internal information logged INFO DEBUG level. need see new information .log file, please consider opening issue .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/FAQ.html","id":"is-there-any-trade-off-between-number-of-cpu-cores-nthread-and-memory-usage","dir":"Articles","previous_headings":"","what":"4) Is there any trade-off between number of CPU cores (nthread) and memory usage?","title":"Frequently Asked Questions","text":"using spawning mechanism multicore processing. worker processor gets copy required data libraries. case limited available memory large dataset, can reduce number CPU cores (nthread) fit processing system. Following recommendation, processing time increase; however, memory usage decrease.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/FAQ.html","id":"i-am-using-macos-however-i-cannot-see-any-performance-increase-with-increasing-number-of-threads-nthread-","dir":"Articles","previous_headings":"","what":"5) I am using macOS, however, I cannot see any performance increase with increasing number of threads (nthread).","title":"Frequently Asked Questions","text":"Many internal libraries (e.g., XGBoost) dependent OpenMP library parallel computation. Please make sure installed OpenMP library configured correctly. Please see following links details: Installing data.table macOS Installing XGBoost macOS","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/FAQ.html","id":"i-am-running-the-package-on-hpc-however-i-think-the-package-is-using-only-one-core-","dir":"Articles","previous_headings":"","what":"6) I am running the package on HPC; however, I think the package is using only one core.","title":"Frequently Asked Questions","text":"order activate OpenMP HPC, need load required modules. example, using SLURM Cannon Harvard University, need load intel module. Please read .","code":"module load intel/19.0.5-fasrc01 export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"how-to-define-a-new-transformer","dir":"Articles","previous_headings":"","what":"1) How to define a new transformer?","title":"Frequently Asked Questions","text":"Transformers unary functions applied covariates. example “power 5”. can pass transformers list \"pow5\".","code":"pow5 <- function(x) {x^5}"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"is-the-order-of-transformers-important","dir":"Articles","previous_headings":"","what":"2) Is the order of transformers important?","title":"Frequently Asked Questions","text":"gen_pseudo_pop function tries transformers covariate balance test met previous attempt. covariate worst balance value chosen apply transformer. first transformer list selected purpose. transformer used specific covariate, next value selected.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"how-change-the-logger-level","dir":"Articles","previous_headings":"","what":"3) How change the logger level?","title":"Frequently Asked Questions","text":"can use set_logger function set logger_level one “TRACE”, “DEBUG”, “INFO”, “SUCCESS”, “WARN”, “ERROR”, ”FATAL”. package internal information logged INFO DEBUG level. need see new information .log file, please consider opening issue .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"is-there-any-trade-off-between-number-of-cpu-cores-nthread-and-memory-usage","dir":"Articles","previous_headings":"","what":"4) Is there any trade-off between number of CPU cores (nthread) and memory usage?","title":"Frequently Asked Questions","text":"using spawning mechanism multicore processing. worker processor gets copy required data libraries. case limited available memory large dataset, can reduce number CPU cores (nthread) fit processing system. Following recommendation, processing time increase; however, memory usage decrease.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"i-am-using-macos-however-i-cannot-see-any-performance-increase-with-increasing-number-of-threads-nthread-","dir":"Articles","previous_headings":"","what":"5) I am using macOS, however, I cannot see any performance increase with increasing number of threads (nthread).","title":"Frequently Asked Questions","text":"Many internal libraries (e.g., XGBoost) dependent OpenMP library parallel computation. Please make sure installed OpenMP library configured correctly. Please see following links details: Installing data.table macOS Installing XGBoost macOS","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"i-am-running-the-package-on-hpc-however-i-think-the-package-is-using-only-one-core-","dir":"Articles","previous_headings":"","what":"6) I am running the package on HPC; however, I think the package is using only one core.","title":"Frequently Asked Questions","text":"order activate OpenMP HPC, need load required modules. example, using SLURM Cannon Harvard University, need load intel module. Please read .","code":"module load intel/19.0.5-fasrc01 export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"what-is-the-counter_weight-column-in-the-pseudo-population","dir":"Articles","previous_headings":"","what":"7) What is the counter_weight column in the pseudo population?","title":"Frequently Asked Questions","text":"matching weighting approaches find combination original data set pass covariate balance test. case matching, package uses different number data samples. data samples never used; hence counter_weight value 0. data samples probably far common support area, resolution w fine enough. case weighting, inverse probability getting exposure. old versions (ver0.2.9), column counter matching approach ipw weighting approach, respectively.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"is-there-a-public-data-set-that-i-can-test-my-model","dir":"Articles","previous_headings":"","what":"8) Is there a public data set that I can test my model?","title":"Frequently Asked Questions","text":"One can either generate synthetic data using generate_syn_data() function, use synthetic_us_2010 data comes package. datasets mostly L3 data shared public.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"can-a-data-sample-match-with-itself","dir":"Articles","previous_headings":"","what":"9) Can a data sample match with itself?","title":"Frequently Asked Questions","text":"question commonly asked researchers coming matching binary exposures. CausalGPS package (algorithm), exposure level data sample, generate new data sample poses requested exposure level; however, different GPS value. find closest original data (terms w GPS) generated pseudo-data sample. data matched requested exposure level, based original data sample. Therefore context CausalGPS package, correct question.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"where-can-i-get-the-code","dir":"Articles","previous_headings":"","what":"10) Where can I get the code?","title":"Frequently Asked Questions","text":"updated version NSAPH-Software/develop branch latest release NSAPH-Software/master branch.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"how-does-trimming-work","dir":"Articles","previous_headings":"","what":"11) How does trimming work?","title":"Frequently Asked Questions","text":"generate_pseudo_pop() function trims entire data based trimming quantiles. processes (e.g., estimating gps, compiling pseudo population, matching, weighting, …) use trimmed data. Trimming data open research question, many different configurations can considered.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"can-i-use-a-data-with-missing-value","dir":"Articles","previous_headings":"","what":"12) Can I use a data with missing value?","title":"Frequently Asked Questions","text":"Yes. rows missing values eliminated process.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"in-the-matching-approach-i-realized-computation-with-scale-1-is-faster-than-any-other-amount--is-that-correct","dir":"Articles","previous_headings":"","what":"13) In the matching approach, I realized computation with scale = 1 is faster than any other amount. Is that correct?","title":"Frequently Asked Questions","text":"correct. scale 1, compute distance based GPS values. case, algorithm simplified special case average time complexity \\(O(n.log(n))\\) instead \\(O(n^2)\\). Please note still use subset data within caliper boundary matching purposes. result, exposure level matched data valid range.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"encountering-an-error-while-executing-the-non-parametric-exposure-response-function-error-in-checkforremoteerrorsval-one-node-produced-an-error-lengthxeval--maxevalpts-is-not-true-","dir":"Articles","previous_headings":"","what":"14) Encountering an error while executing the non-parametric exposure-response function: Error in checkForRemoteErrors(val) : one node produced an error: length(xeval) < .maxEvalPts is not TRUE.","title":"Frequently Asked Questions","text":"issue arises due constraint within locpol package. feasible solution circumnavigate problem install modified version locpol. deviation original package lies augmentation maximum number evaluation points (.maxEvalPts).","code":"remotes::install_github(\"NSAPH-Software/locpol\", reference=\"master\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Generating-Pseudo-Population.html","id":"usage","dir":"Articles","previous_headings":"","what":"Usage","title":"Generating Pseudo Population","text":"Input parameters: w data.frame observed continues exposure, including id w columns. c data frame matrix observed baseline covariates, also includes id column,ci_appr causal inference approach. Options “matching” “weighting”.dist_measure Distance measuring function.scale specified scale parameter control relative weight attributed distance measures exposure versus GPS estimatesdelta_n specified caliper parameter exposurecovar_bl_method specified covariate balance methodcovar_bl_trs specified covariate balance thresholdmax_attempt maximum number attempt satisfy covariate balance","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Generating-Pseudo-Population.html","id":"technical-details-for-matching","dir":"Articles","previous_headings":"","what":"Technical Details for Matching","title":"Generating Pseudo Population","text":"matching algorithm aims match observed unit \\(j\\) \\(j'\\) exposure level \\(w^{(l)}\\). specify delta_n (\\(\\delta_n\\)), caliper exposure level \\(w\\), constitutes equally sized bins, .e., \\([w-\\delta_n, w+\\delta_n]\\). Based caliper delta_n , define predetermined set \\(L\\) exposure levels \\(\\{w^{(1)}=\\min(w)+ \\delta_n,w^{(2)}=\\min(w)+3 \\delta_n,...,w^{(L)} = \\min(w)+(2L-1) \\delta_n\\}\\), \\(L = \\lfloor \\frac{\\max(w)-\\min(w)}{2\\delta_n} + \\frac{1}{2} \\rfloor\\). exposure level \\(w^{(l)}\\) midpoint equally sized bins, \\([w^{(l)}-\\delta_n, w^{(l)}+\\delta_n]\\). implement nested-loop algorithm, \\(l\\) \\(1,2,\\ldots, L\\) outer-loop, \\(j'\\) \\(1 ,\\ldots,N\\) inner-loop. algorithm outputs final product design stage, .e., matched set \\(N\\times L\\) units.\\(l = 1,2,\\ldots, L\\)   Choose one exposure level interest \\(w^{(l)} \\\\{w^{(1)}, w^{(2)}, ..., w^{(L)}\\}\\).   \\(j' = 1 ,\\ldots,N\\)   2.1 Evaluate GPS \\(\\hat{e}(w^{(l)}, \\mathbf{c}_{j'})\\) (short \\(e^{(l)}_{j'}\\)) \\(w^{(l)}\\) based fitted GPS model Step 1 unit \\(j'\\) observed covariates \\(\\mathbf{c}_{j'}\\).   2.2 Implement matching find observed unit – denoted \\(j\\) – matched \\(j'\\) respect exposure \\(w_{j}\\approx w^{(l)}\\) estimated GPS \\(\\hat{e}(w_j, \\mathbf{c}_{j}) \\approx e^{(l)}_{j'}\\) (standardized Euclidean transformation). specifically, find \\(j\\) \\[ j_{{gps}}(e^{(l)}_{j'},w^{(l)})=\\text{arg} \\ \\underset{j: w_j \\[w^{(l)}-\\delta_n,w^{(l)}+\\delta_n]}{\\text{min}} \\ \\mid\\mid( \\lambda \\hat{e}^{*}(w_j,\\mathbf{c}_j), (1-\\lambda)w^{*}_j) -(\\lambda e_{j'}^{(l)*}, (1-\\lambda) w^{(l)*})\\mid\\mid, \\] dist_measure (\\(||.||\\)) pre-specified two-dimensional metric, scale (\\(\\lambda\\)) scale parameter assigning weights corresponding two dimensions (.e., GPS exposure), \\(\\delta\\) caliper defined Step 2 allowing unit \\(j\\) observed exposure \\(w_j \\[w^{(l)}-\\delta,w^{(l)}+\\delta]\\) can get matched.   2.3 Impute \\(Y_{j'}(w^{(l)})\\) : \\(\\hat{Y}_{j'}(w^{(l)})=Y^{obs}_{j_{{gps}}(e^{(l)}_{j'},w^{(l)})}\\).   end end implementing matching algorithm, construct matched set \\(N\\times L\\) units combining \\(\\hat{Y}_{j'}(w^{(l)})\\) \\(j'=1,\\ldots,N\\) \\(w^{(l)} \\\\{w^{(1)},w^{(2)},...,w^{(L)}\\}\\).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Generating-Pseudo-Population.html","id":"technical-details-for-covariate-balance","dir":"Articles","previous_headings":"","what":"Technical Details for Covariate Balance","title":"Generating Pseudo Population","text":"introduce absolute correlation measure (covar_bl_method = “absolute”) assess covariate balance continuous exposures . absolute correlation exposure pre-exposure covariate global measure can inform whether whole matched set balanced. measures build upon work (Austin 2019) examine covariate balance conditions continuous exposures. adapt proposed matching framework. balanced pseudo population dataset, correlations exposure pre-exposure covariates close zero, \\(E [\\mathbf{c}_{}^{*} w_{}^{*} ] \\approx \\mathbf{0}.\\) calculate absolute correlation pseudo population dataset \\[\\begin{align*} \\big\\lvert \\sum_{=1}^{N\\times L} \\mathbf{c}_{}^{*} w_{}^{*} \\big\\lvert \\end{align*}\\] average absolute correlations defined average absolute correlations among covariates. Average absolute correlation: \\[\\begin{align*} \\overline{\\big\\lvert \\sum_{=1}^{N\\times L} \\mathbf{c}_{}^{*} w_{}^{*} \\big\\lvert} < \\boldsymbol{\\epsilon}_1. \\end{align*}\\] specify pre-specified threshold covar_bl_trs (\\(\\boldsymbol{\\epsilon}_1\\)), example 0.1, average absolute correlation threshold covariate balance pseudo population dataset.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Generating-Synthetic-Data.html","id":"usage","dir":"Articles","previous_headings":"","what":"Usage","title":"Generate Synthetic Data","text":"Input parameters: sample_size Number data samples seed seed R’s random number generator outcome_sd Standard deviation used generate outcome gps_spec numerical value (1-7) indicates GPS model used generate synthetic data. See following section details. cova_spec numerical value (1-2) modify covariates. See code details.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Generating-Synthetic-Data.html","id":"technical-details-for-data-generating-process","dir":"Articles","previous_headings":"","what":"Technical Details for Data Generating Process","title":"Generate Synthetic Data","text":"generate six confounders \\((C_1,C_2,...,C_6)\\), include combination continuous categorical variables, \\[\\begin{align*} C_1,\\ldots,C_4 \\sim N(0,\\boldsymbol{}_4), C_5 \\sim U\\{-2,2\\}, C_6 \\sim U(-3,3), \\end{align*}\\] generate \\(W\\) using six specifications generalized propensity score model, \\(W = 9 \\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\} +17 + N(0,5)\\) \\(W = 15\\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\} + 22 + T(2)\\) \\(W = 9 \\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\} + 3/2 C_3^2 + 15 + N(0,5)\\) \\(W = \\frac{49 \\exp(\\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\})}{1+ \\exp(\\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\})} -6 + N(0,5)\\) \\(W = \\frac{42}{1+ \\exp(\\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\})} - 18 + N(0,5)\\) \\(W = 7 \\text{log} ( \\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\}) + 13 + N(0,4)\\) generate \\(Y\\) outcome model assumed cubical function \\(W\\) additive terms confounders interactions \\(W\\) confounders \\(\\mathbf{C}\\), \\[Y | W, \\mathbf{C} \\sim N\\{\\mu(W, \\mathbf{C}),\\text{sd}^2\\}\\] \\[\\mu(W, \\mathbf{C}) = -10 - (2, 2, 3, -1,2,2)\\mathbf{C} - W(0.1 - 0.1C_1 + 0.1C_4 + 0.1C_5 + 0.1C_3^2) + 0.13^2W^3\\]","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Singularity-Image.html","id":"setting-up-the-environment","dir":"Articles","previous_headings":"","what":"Setting up the environment","title":"Singularity","text":"order build singularity image, need singularity installed system, need root privilege build image. sufficient instructions (example, ). can also use Sylab Remote Builder services.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Singularity-Image.html","id":"definition-file","dir":"Articles","previous_headings":"","what":"Definition File","title":"Singularity","text":"Definition File (CausalGPS_rstudio.def) recipe building image. Please note build upon [rocker/rstudio:4.0.4] image. details generating Definition File, please refer Singularity User Guide.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Singularity-Image.html","id":"building-singularity-image","dir":"Articles","previous_headings":"","what":"Building Singularity Image","title":"Singularity","text":"build image, download Definition File (CausalGPS_rstudio.def) run following: Running command generate Singularity image (CausalGPS_rstudio.sif). can double-check CausalGPS package version running image using following command: result following format:","code":"$ sudo singularity build CausalGPS_rstudio.sif CausalGPS_rstudio.def singularity run CausalGPS_rstudio.sif Container was created Thu 03 Feb 2022 07:54:45 PM UTC CausalGPS package installed (ver: [1] ‘0.2.6.9000’)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Singularity-Image.html","id":"run-an-r-session","dir":"Articles","previous_headings":"","what":"Run an R Session","title":"Singularity","text":"want use R console, can follow steps: Run shell command image run R. provide following results activate R. Now, can run R command. example:","code":"singularity shell CausalGPS_rstudio.sif Singularity> R R version 4.0.4 (2021-02-15) -- \"Lost Library Book\" Copyright (C) 2021 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > utils::packageVersion(\"CausalGPS\") # [1] ‘0.2.6.9000’"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Singularity-Image.html","id":"run-a-rstudio-session","dir":"Articles","previous_headings":"","what":"Run a Rstudio Session","title":"Singularity","text":"can also open RStudio session browser following steps mentioned Rocker Project (Singularity). Open browser enter URL:","code":"mkdir -p run var-lib-rstudio-server printf 'provider=sqlite\\ndirectory=/var/lib/rstudio-server\\n' > database.conf singularity exec --bind run:/run,var-lib-rstudio-server:/var/lib/rstudio-server,database.conf:/etc/rstudio/database.conf CausalGPS_rstudio.sif rserver --www-address=127.0.0.1 127.0.0.1:8787"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"load-data-and-preprocessing","dir":"Articles","previous_headings":"","what":"Load Data and Preprocessing","title":"Synthetic Medicare Data","text":"","code":"data(\"synthetic_us_2010\") data <- synthetic_us_2010 knitr::kable(head((data))) # transformers pow2 <- function(x) {x^2} pow3 <- function(x) {x^3} clog <- function(x) log(x+0.001) confounders <- names(data) confounders <- confounders[!(confounders %in% c(\"FIPS\",\"Name\",\"STATE\", \"STATE_CODE\",\"cms_mortality_pct\", \"qd_mean_pm25\"))]"},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"scenario-1","dir":"Articles","previous_headings":"Examples of Generating Pseudo Population","what":"Scenario 1","title":"Synthetic Medicare Data","text":"Causal Inference: Matching GPS model: Parametric Optimized_compile: True","code":"confounders_s1 <- c(\"cs_poverty\",\"cs_hispanic\", \"cs_black\", \"cs_ed_below_highschool\", \"cs_median_house_value\", \"cs_population_density\", \"cdc_mean_bmi\",\"cdc_pct_nvsmoker\", \"gmet_mean_summer_tmmx\", \"gmet_mean_summer_rmx\", \"gmet_mean_summer_sph\", \"cms_female_pct\", \"region\" ) study_data <- data[, c(\"qd_mean_pm25\", confounders, \"cms_mortality_pct\")] study_data$id <- seq_along(1:nrow(study_data)) study_data$region <- as.factor(study_data$region) study_data$cs_PIR <- study_data$cs_median_house_value/study_data$cs_household_income # Choose subset of data q1 <- stats::quantile(study_data$qd_mean_pm25, 0.25) q2 <- stats::quantile(study_data$qd_mean_pm25, 0.99) trimmed_data <- subset(study_data[stats::complete.cases(study_data) ,], qd_mean_pm25 <= q2 & qd_mean_pm25 >= q1) trimmed_data$gmet_mean_summer_sph <- pow2(trimmed_data$gmet_mean_summer_sph) set.seed(172) pseudo_pop_1 <- generate_pseudo_pop(trimmed_data[, c(\"id\", \"qd_mean_pm25\")], trimmed_data[, c(\"id\", confounders_s1)], ci_appr = \"matching\", gps_density = \"normal\", bin_seq = NULL, exposure_trim_qtls = c(0.0 , 1.0), use_cov_transform = TRUE, transformers = list(\"pow2\",\"pow3\",\"clog\"), sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(17), xgb_eta=c(0.28)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 0.1, scale = 1) #> mean absolute correlation: 0.150596118336646| Covariate balance threshold: 0.1 #> Loading required package: nnls #> mean absolute correlation: 0.0466272611362718| Covariate balance threshold: 0.1 #> Covariate balance condition has been met (iteration: 1/1) #> Best mean absolute correlation: 0.0466272611362718| Covariate balance threshold: 0.1 plot(pseudo_pop_1)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"scenario-2","dir":"Articles","previous_headings":"Examples of Generating Pseudo Population","what":"Scenario 2","title":"Synthetic Medicare Data","text":"Causal Inference: Matching GPS model: Parametric Optimized_compile: False","code":"set.seed(172) pseudo_pop_2 <- generate_pseudo_pop(trimmed_data[, c(\"id\", \"qd_mean_pm25\")], trimmed_data[, c(\"id\", confounders_s1)], ci_appr = \"matching\", gps_density = \"normal\", bin_seq = NULL, exposure_trim_qtls = c(0.0 , 1.0), use_cov_transform = TRUE, transformers = list(\"pow2\",\"pow3\",\"clog\"), sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(17), xgb_eta=c(0.28)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 0.1, scale = 1) #> mean absolute correlation: 0.150596118336646| Covariate balance threshold: 0.1 #> mean absolute correlation: 0.0466272611362718| Covariate balance threshold: 0.1 #> Covariate balance condition has been met (iteration: 1/1) #> Best mean absolute correlation: 0.0466272611362718| Covariate balance threshold: 0.1 plot(pseudo_pop_2) optimized_data_1 <- pseudo_pop_1$pseudo_pop[,c(\"qd_mean_pm25\",\"gps\",\"counter_weight\")] nonoptimized_data_2 <- pseudo_pop_2$pseudo_pop[,c(\"qd_mean_pm25\",\"gps\",\"counter_weight\")] print(paste(\"Number of rows of data in the optimized approach: \", nrow(optimized_data_1))) #> [1] \"Number of rows of data in the optimized approach: 2300\" print(paste(\"Number of rows of data in the non-optimized approach: \", nrow(nonoptimized_data_2))) #> [1] \"Number of rows of data in the non-optimized approach: 2300\" print(paste(\"Sum of data samples in the optimized approach: \", sum(optimized_data_1$counter_weight))) #> [1] \"Sum of data samples in the optimized approach: 140300\" print(paste(\"Number of data in the non-optimized approach: \", length(nonoptimized_data_2$qd_mean_pm25))) #> [1] \"Number of data in the non-optimized approach: 2300\" # Replicate gps values of optimized approach expanded_opt_data_1 <- optimized_data_1[rep(seq_len(nrow(optimized_data_1)), optimized_data_1$counter_weight), 1:3] exp_gps_a_1 <- expanded_opt_data_1$gps gps_b_1 <- nonoptimized_data_2$gps differences <- sort(gps_b_1) - sort(exp_gps_a_1) print(paste(\"Sum of differences in gps values between optimized and \", \"non-optimized approaches is: \", sum(differences))) #> [1] \"Sum of differences in gps values between optimized and non-optimized approaches is: 38958.9033869061\""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"scenario-3","dir":"Articles","previous_headings":"Examples of Generating Pseudo Population","what":"Scenario 3","title":"Synthetic Medicare Data","text":"Causal Inference: Matching GPS model: Non-Parametric Optimized_compile: True","code":"trimmed_data <- subset(study_data[stats::complete.cases(study_data) ,], qd_mean_pm25 <= q2 & qd_mean_pm25 >= q1) set.seed(8967) pseudo_pop_3 <- generate_pseudo_pop(trimmed_data[, c(\"id\", \"qd_mean_pm25\")], trimmed_data[, c(\"id\", confounders_s1)], ci_appr = \"matching\", gps_density = \"kernel\", bin_seq = NULL, exposure_trim_qtls = c(0.0 , 1.0), use_cov_transform = TRUE, transformers = list(\"pow2\",\"pow3\",\"clog\"), sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(12), xgb_eta=c(0.1)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 0.1, scale = 1) #> mean absolute correlation: 0.150596118336646| Covariate balance threshold: 0.1 #> mean absolute correlation: 0.0521458538948391| Covariate balance threshold: 0.1 #> Covariate balance condition has been met (iteration: 1/1) #> Best mean absolute correlation: 0.0521458538948391| Covariate balance threshold: 0.1 plot(pseudo_pop_3)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"scenario-4","dir":"Articles","previous_headings":"Examples of Generating Pseudo Population","what":"Scenario 4","title":"Synthetic Medicare Data","text":"Causal Inference: Weighting GPS model: Parametric Optimized_compile: N/","code":"trimmed_data <- subset(study_data[stats::complete.cases(study_data) ,], qd_mean_pm25 <= q2 & qd_mean_pm25 >= q1) trimmed_data$cs_poverty <- pow2(trimmed_data$cs_poverty) set.seed(672) pseudo_pop_4 <- generate_pseudo_pop(trimmed_data[, c(\"id\", \"qd_mean_pm25\")], trimmed_data[, c(\"id\", confounders_s1)], ci_appr = \"weighting\", gps_density = \"normal\", bin_seq = NULL, exposure_trim_qtls = c(0.0 , 1.0), use_cov_transform = TRUE, transformers = list(\"pow2\",\"pow3\",\"clog\"), sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(35), xgb_eta=c(0.14)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 0.1, scale = 1) #> mean absolute correlation: 0.150596118336646| Covariate balance threshold: 0.1 #> mean absolute correlation: 0.532572233294456| Covariate balance threshold: 0.1 #> Covariate balance condition has not been met. #> Best mean absolute correlation: 0.532572233294456| Covariate balance threshold: 0.1 plot(pseudo_pop_4)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"covariate-balance","dir":"Articles","previous_headings":"","what":"Covariate Balance","title":"Synthetic Medicare Data","text":"previous examples, passed specific parameters estimating GPS values. Achieving acceptable covariate balance can computed searching appropriate parameters might simple task. package uses transformers features get acceptable covariate balance. following parameters directly related searching acceptable covariate balance. covar_bl_trs: acceptable threshold stop searching. can computed either mean, median, maximal value features correlation, defined covar_bl_trs_type. params: different iterations, choose parameter random provided list. example, xgb_nrounds=seq(1,100) parameters, nround parameter xgboost trainer selected number 1 100 random, iteration. transformers: iteration, choose feature highest correlation apply transformer provided list. transformers applied feature reapplying transformer feature. max_attempt: Number test iteration. covar_bl_trs met, search stop max_attempt iteration return best found population.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"scenario-5","dir":"Articles","previous_headings":"Covariate Balance","what":"Scenario 5","title":"Synthetic Medicare Data","text":"Causal Inference: Matching + searching acceptable covariate balance GPS model: Non-Parametric Optimized_compile: True Search domain: transformers: pow2, pow3, clog. nround xgboost: 10-100. eta xgboost: 0.1-0.5. max_attempt: 5. covar_bl_trs: 0.08. covar_bl_trs_type: mean example, 5 attempts, find pseudo population can satisfy covariate balance test.","code":"trimmed_data <- subset(study_data[stats::complete.cases(study_data) ,], qd_mean_pm25 <= q2 & qd_mean_pm25 >= q1) set.seed(328) pseudo_pop_5 <- generate_pseudo_pop(trimmed_data[, c(\"id\", \"qd_mean_pm25\")], trimmed_data[, c(\"id\", confounders_s1)], ci_appr = \"matching\", gps_density = \"kernel\", bin_seq = NULL, exposure_trim_qtls = c(0.0 , 1.0), use_cov_transform = TRUE, transformers = list(\"pow2\",\"pow3\",\"clog\"), sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=seq(10, 100, 1), xgb_eta=seq(0.1,0.5,0.01)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.08, covar_bl_trs_type = \"mean\", max_attempt = 5, dist_measure = \"l1\", delta_n = 0.1, scale = 1) #> mean absolute correlation: 0.150596118336646| Covariate balance threshold: 0.08 #> mean absolute correlation: 0.123983603260029| Covariate balance threshold: 0.08 #> mean absolute correlation: 0.200346741127591| Covariate balance threshold: 0.08 #> mean absolute correlation: 0.165910759386325| Covariate balance threshold: 0.08 #> mean absolute correlation: 0.160872521798462| Covariate balance threshold: 0.08 #> mean absolute correlation: 0.180468747869512| Covariate balance threshold: 0.08 #> Covariate balance condition has not been met. #> Best mean absolute correlation: 0.123983603260029| Covariate balance threshold: 0.08 plot(pseudo_pop_5)"},{"path":[]},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"installing-the-package","dir":"Articles","previous_headings":"Getting the Code","what":"Installing the Package","title":"Testing the Package","text":"Use devtools::install_github install package. specify ref, install master (main) branch. master branch hosts latest released code. latest updates committed develop branch. details please refer Git Branching Model Developers Guide section. process run smoothly. Try ?CausalGPS. open package description page help tab (assuming using RStudio).","code":"library(devtools) try(detach(\"package:CausalGPS\", unload = TRUE), silent = TRUE) # if already you have the package, detach and unload it, to have a new install. install_github(\"NSAPH-Software/CausalGPS\", ref=\"develop\") library(CausalGPS)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"cloning-the-package","dir":"Articles","previous_headings":"Getting the Code","what":"Cloning the Package","title":"Testing the Package","text":"Go package Github repository, top left (), choose branch want clone, click Code button (B), choose Download ZIP. following figure shows buttons’ location. cloning code, open one files using RStudio, change project directory project directory (Session > Set Working Directory > Project Directory).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"forking-the-package","dir":"Articles","previous_headings":"Getting the Code","what":"Forking the package","title":"Testing the Package","text":"Forking explained Contribution page.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"package-development-test-check-cycle","dir":"Articles","previous_headings":"","what":"Package development, test, check cycle","title":"Testing the Package","text":"commands need use testing debugging package. can read commands R Packages book. debugging testing, need know steps. list commands need: document() change Roxygen Skeleton (e.g., added new argument function, improved example), run documents(). make sure internal documentation updated. test() runs tests located inside tests/testthat folder. modification code followed running test() make sure breaking existing functionality. check() checks many features (e.g., whether package can installed without problem). need run check() frequently; however, suggest running get code committing make sure errors, warnings, notes. load_all() program source code different one loaded memory (read ). modify part code, need load memory takes latest modifications effect. Run load_all() modification testing. install() cases load_all() sufficient. However, sometimes links package components broken. especially happens significantly change part code, pass tests. cases, may need run install().","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"running-examples","dir":"Articles","previous_headings":"","what":"Running Examples","title":"Testing the Package","text":"can use causal inference studies data test package. database needs following attributes: Y: Output value w: Treatment C: covariate matrix package can generate synthetic data can used test different features package. current implementation, code generates synthetic numerical data; however, small innovation, one can add categorical data. following, present reproducible examples can copy build upon .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"generating-synthetic-data","dir":"Articles","previous_headings":"Running Examples","what":"Generating Synthetic Data","title":"Testing the Package","text":"","code":"library(\"CausalGPS\") mydata <- generate_syn_data(sample_size = 10000) str(mydata) #'data.frame': 10000 obs. of 8 variables: # $ Y : num -17 3.66 -45.88 -12.12 2.75 ... # $ treat: num 9.74 14.88 5.22 10.19 16.65 ... # $ cf1 : num -0.128 0.155 -1.271 0.551 0.846 ... # $ cf2 : num 0.2376 0.0466 0.8918 -1.8434 -2.4487 ... # $ cf3 : num 1.5492 -0.4453 0.0718 0.8309 0.6749 ... # $ cf4 : num 1.3738 0.8621 0.4735 0.7013 -0.0851 ... # $ cf5 : num -2 2 1 -2 0 1 1 2 -2 -1 ... # $ cf6 : num -1.794 -1.822 0.79 -0.591 2.673 ..."},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"estimating-gps-values-for-the-dataset","dir":"Articles","previous_headings":"Running Examples","what":"Estimating GPS Values for the Dataset","title":"Testing the Package","text":"following example, first, generate 10000 synthetic data samples, feed estimate_gps function estimate GPS values. Please note Y variable used inside code, provided cbind generated GPS values. can read different arguments documentation (?estimate_gps). summary, - want run code using SuperLearner (sl) prediction model. Inside SuperLearner package, want use XGBoost package. know, internally generate customized wrapper XGBoost package; thus, correct way activate passing m_xgboost, stands modified xgboost. - requested one thread (nthread = 1); can use much want; package use available one ignore rest . XGBoost uses OpenMP backend use cores. Sometimes becomes really big challenge Mac systems. using Mac see performance improvement, aware . - params, passed list parameters; function choose one list random generate customize wrapper based . want use specific value, just give list one number (e.g., xgb_max_depth = c(3)). parameters start xgb_ change XGBoost hyperparameters. Now, let’s add categorical data. Let’s say data belongs 5 different years (2000 observations per year), year data 4 different regions, including North, South, East, West.","code":"library(\"CausalGPS\") mydata <- generate_syn_data(sample_size = 10000) data_with_gps <- estimate_gps(mydata[, c(\"id\", \"Y\")], mydata[, c(\"id\", w\")], mydata[, c(\"id\", \"cf1\", \"cf2\", \"cf3\", \"cf4\",\"cf5\",\"cf6\")], params = list(xgb_max_depth = c(3,4,5), xgb_nrounds=c(10,20,30,40,50,60)), nthread = 1, sl_lib = c(\"m_xgboost\") ) library(\"CausalGPS\") mydata <- generate_syn_data(sample_size = 10000) year <- c(rep(c(\"2001\"), each=2000), rep(c(\"2002\"), each=2000), rep(c(\"2003\"), each=2000), rep(c(\"2004\"), each=2000), rep(c(\"2005\"), each=2000)) region <- rep(c(rep(\"North\",each=500), rep(\"South\",each=500), rep(\"East\",each=500), rep(\"West\",each=500)), each=5) mydata$year <- as.factor(year) mydata$region <- as.factor(region) data_with_gps <- estimate_gps(mydata[, c(\"id\", \"Y\")], mydata[, c(\"id\", \"w\")], mydata[, c(\"id\", \"cf1\", \"cf2\", \"cf3\", \"cf4\", \"cf5\", \"cf6\", \"year\", \"region\")], params = list(xgb_max_depth = c(3,4,5), xgb_nrounds=c(10,20,30,40,50,60)), nthread = 1, sl_lib = c(\"m_xgboost\") )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"generating-pseudo-population","dir":"Articles","previous_headings":"Running Examples","what":"Generating Pseudo Population","title":"Testing the Package","text":"Generating pseudo population (gen_pseudo_pop())one important parts package. internally uses estimate_gps() package. acceptable pseudo population pass covariate balance test. Users choose test threshold, many attempts. covariate balance test met, function stops trying returns generated population. However, pass test, still returns generated message user indicating population pass test. iteration, change hyperparameters modify GPS values (better worse) pass covariate balance test. estimating GPS values, need compile population. three major approaches compile pseudo population, including: Matching Adjusting (implemented) Weighting (implemented) Among different methods testing covariate balance test, absolute approach implemented. second causal inference approach weighting. example generate pseudo population using weighting approach.","code":"library(\"CausalGPS\") mydata <- generate_syn_data(sample_size = 10000) pseudo_pop <- generate_pseudo_pop(mydata[, c(\"id\", \"Y\")], mydata[, c(\"id\", \"w\")], mydata[,c(\"id\", \"cf1\", \"cf2\", \"cf3\", \"cf4\", \"cf5\", \"cf6\")], ci_appr = \"matching\", sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(10,20,30), xgb_eta=c(0.1,0.2,0.3)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type= \"mean\", max_attempt = 1, dist_measure = \"matching_fn\", delta_n = 1, scale = 0.5) mydata <- generate_syn_data(sample_size = 10000) year <- c(rep(c(\"2001\"), each=2000), rep(c(\"2002\"), each=2000), rep(c(\"2003\"), each=2000), rep(c(\"2004\"), each=2000), rep(c(\"2005\"), each=2000)) region <- rep(c(rep(\"North\",each=500), rep(\"South\",each=500), rep(\"East\",each=500), rep(\"West\",each=500)), each=5) mydata$year <- as.factor(year) mydata$region <- as.factor(region) pseudo_pop <- generate_pseudo_pop(mydata[, c(\"id\", \"Y\")], mydata[, c(\"id\", \"w\")], mydata[, c(\"id\", \"cf1\", \"cf2\", \"cf3\", \"cf4\",\"cf5\",\"cf6\", \"year\",\"region\")], ci_appr = \"weighting\", sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(10,20,30), xgb_eta=c(0.1,0.2,0.3)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 1 )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"further-processing","dir":"Articles","previous_headings":"Running Examples","what":"Further Processing","title":"Testing the Package","text":"generating pseudo population, can process data different purposes. far, estimating exposure rate function (estimate_erf) implemented.","code":"# library(\"CausalGPS\") mydata <- generate_syn_data(sample_size = 10000) pseudo_pop <- generate_pseudo_pop(mydata[, c(\"id\", \"Y\")], mydata[, c(\"id\", \"w\")], mydata[, c(\"id\", \"cf1\",\"cf2\",\"cf3\",\"cf4\",\"cf5\",\"cf6\")], ci_appr = \"matching\", sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(10,20,30), xgb_eta=c(0.1,0.2,0.3)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type= \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 1, scale = 0.5) erf_val <- estimate_npmetric_erf(pseudo_pop$pseudo_pop$Y, pseudo_pop$pseudo_pop$w, bw_seq=seq(0.2,2,0.2), w_vals = seq(2,20,0.5))"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"steps-for-using-precomputed-data-during-the-test","dir":"Articles","previous_headings":"","what":"Steps for using precomputed data during the test","title":"Testing the Package","text":"package tested different data samples, generated testing, others generated just loaded. data located “R/sysdata.rda” file. add new features code, may need use external pre-computed data set test functions. following, explain steps append data “R/sysdata.rda”. Please note CRAN might reject large data sets. Step 1: Run check() make sure file -satisfies test requirements. raises error, warning, note, please address modifying data. rare cases, check() pass successfully, however, test() . sufficient changing data; however, need address submitting pull request. Step 2: Create backup data current data. Step 3: Clean Global environment Step 4: Load current data store names Step 5: Generate data (mydata) make sure add steps reproduce data comment test file. Step 6: Add new data name list_names. Please note quotes. need add data, just name. Step 7: Save data. Step 8: Run check()/test() make sure passes tests. pass tests, address problem. Step 9: successful check()/pass() remove backup file.","code":"# in terminal cp R/sysdata.rda R/sysdata_backup.rda rm(list=ls()) load(\"R/sysdata.rd\") list_names <- ls() list_names <- c(list_names, \"mydata\") save(list=list_names, file=\"R/sysdata.rda\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Naeem Khoshnevis. Author, maintainer. HUIT Xiao Wu. Author. CUMC Danielle Braun. Author. HSPH","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Khoshnevis N, Wu X, Braun D (2023). “CausalGPS: R Package Causal Inference Continuous Exposures.” doi:10.48550/arXiv.2310.00561, R package version 0.4.1, 2310.00561.","code":"@Misc{, title = {CausalGPS: An R Package for Causal Inference With Continuous Exposures}, author = {Naeem Khoshnevis and Xiao Wu and Danielle Braun}, note = {R package version 0.4.1}, year = {2023}, eprint = {2310.00561}, archiveprefix = {arXiv}, primaryclass = {stat.CO}, doi = {10.48550/arXiv.2310.00561}, }"},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/index.html","id":"summary","dir":"","previous_headings":"","what":"Summary","title":"Implementing matching, and weighting on GPS with continuous exposures.","text":"R package implementing matching, weighting generalized propensity scores continuous exposures. developed innovative approach estimating causal effects using observational data settings continuous exposures, introduce new framework GPS caliper matching jointly matches estimated GPS exposure levels fully adjust confounding bias.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/index.html","id":"estimating-gps","dir":"","previous_headings":"Features","what":"Estimating GPS","title":"Implementing matching, and weighting on GPS with continuous exposures.","text":"generalized propensity scores computed using various parametric /non-parametric models. generalized propensity scores used following causal inference approaches.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/index.html","id":"generating-pseudo-population","dir":"","previous_headings":"Features","what":"Generating Pseudo Population","title":"Implementing matching, and weighting on GPS with continuous exposures.","text":"Pseudo population dataset computed based user-defined causal inference approaches (e.g., matching weighting). covariate balance test performed pseudo population dataset. Users can specify covariate balance criteria activate adaptive approach number attempts search target pseudo population dataset meets covariate balance criteria.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/index.html","id":"outcome-models","dir":"","previous_headings":"Features","what":"Outcome Models","title":"Implementing matching, and weighting on GPS with continuous exposures.","text":"Several outcome models can achieved using generated pseudo population dataset. Users can specify non-/semi-parametric models obtain exposure-response curves parametric models obtain regression coefficients interest.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/index.html","id":"acknowledgments","dir":"","previous_headings":"Features > Outcome Models","what":"Acknowledgments","title":"Implementing matching, and weighting on GPS with continuous exposures.","text":"Funding provided Health Effects Institute grant 4953-RFA14-3/16-4, Environmental Protection Agency grant 83587201-0, National Institute Health grants R01 ES026217, R01 MD012769, R01 ES028033, 1R01 ES030616, 1R01 AG066793-01R01, 1R01 ES029950, R01 ES028033-S1, Alfred P. Sloan Foundation grant G-2020-13946.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/CausalGPS-package.html","id":null,"dir":"Reference","previous_headings":"","what":"The 'CausalGPS' package. — CausalGPS-package","title":"The 'CausalGPS' package. — CausalGPS-package","text":"R package implementing matching weighting generalized propensity scores continuous exposures.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/CausalGPS-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"The 'CausalGPS' package. — CausalGPS-package","text":"developed innovative approach estimating causal effects using observational data settings continuous exposures, introduce new framework GPS caliper matching.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/CausalGPS-package.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"The 'CausalGPS' package. — CausalGPS-package","text":"Wu, X., Mealli, F., Kioumourtzoglou, M.., Dominici, F. Braun, D., 2022. Matching generalized propensity scores continuous exposures. Journal American Statistical Association, pp.1-29. Kennedy, E.H., Ma, Z., McHugh, M.D. Small, D.S., 2017. Non-parametric methods doubly robust estimation continuous treatment effects. Journal Royal Statistical Society. Series B (Statistical Methodology), 79(4), pp.1229-1245.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/CausalGPS-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"The 'CausalGPS' package. — CausalGPS-package","text":"Naeem Khoshnevis Xiao Wu Danielle Braun","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_corr_fun.html","id":null,"dir":"Reference","previous_headings":"","what":"Check covariate balance using absolute approach — absolute_corr_fun","title":"Check covariate balance using absolute approach — absolute_corr_fun","text":"Checks covariate balance based absolute correlations given data sets.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_corr_fun.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check covariate balance using absolute approach — absolute_corr_fun","text":"","code":"absolute_corr_fun(w, c)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_corr_fun.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check covariate balance using absolute approach — absolute_corr_fun","text":"w vector observed continuous exposure variable. c data.frame observed covariates variable.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_corr_fun.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check covariate balance using absolute approach — absolute_corr_fun","text":"function returns list including: absolute_corr: absolute correlations pre-exposure covariates; mean_absolute_corr: average absolute correlations pre-exposure covariates.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_corr_fun.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Check covariate balance using absolute approach — absolute_corr_fun","text":"","code":"set.seed(291) n <- 100 mydata <- generate_syn_data(sample_size=100) year <- sample(x=c(\"2001\",\"2002\",\"2003\",\"2004\",\"2005\"),size = n, replace = TRUE) region <- sample(x=c(\"North\", \"South\", \"East\", \"West\"),size = n, replace = TRUE) mydata$year <- as.factor(year) mydata$region <- as.factor(region) mydata$cf5 <- as.factor(mydata$cf5) cor_val <- absolute_corr_fun(mydata[,2], mydata[, 3:length(mydata)]) print(cor_val$mean_absolute_corr) #> [1] 0.1760572"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_weighted_corr_fun.html","id":null,"dir":"Reference","previous_headings":"","what":"Check Weighted Covariate Balance Using Absolute Approach — absolute_weighted_corr_fun","title":"Check Weighted Covariate Balance Using Absolute Approach — absolute_weighted_corr_fun","text":"Checks covariate balance based absolute weighted correlations given data sets.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_weighted_corr_fun.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check Weighted Covariate Balance Using Absolute Approach — absolute_weighted_corr_fun","text":"","code":"absolute_weighted_corr_fun(w, vw, c)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_weighted_corr_fun.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check Weighted Covariate Balance Using Absolute Approach — absolute_weighted_corr_fun","text":"w vector observed continuous exposure variable. vw vector weights. c data.table observed covariates variable.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_weighted_corr_fun.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check Weighted Covariate Balance Using Absolute Approach — absolute_weighted_corr_fun","text":"function returns list saved measure related covariate balance absolute_corr: absolute correlations pre-exposure covairates; mean_absolute_corr: average absolute correlations pre-exposure covairates.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_weighted_corr_fun.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Check Weighted Covariate Balance Using Absolute Approach — absolute_weighted_corr_fun","text":"","code":"set.seed(639) n <- 100 mydata <- generate_syn_data(sample_size=100) year <- sample(x=c(\"2001\",\"2002\",\"2003\",\"2004\",\"2005\"),size = n, replace = TRUE) region <- sample(x=c(\"North\", \"South\", \"East\", \"West\"),size = n, replace = TRUE) mydata$year <- as.factor(year) mydata$region <- as.factor(region) mydata$cf5 <- as.factor(mydata$cf5) cor_val <- absolute_weighted_corr_fun(mydata[,2], runif(n), mydata[, 3:length(mydata)]) print(cor_val$mean_absolute_corr) #> [1] 0.1409821"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"A helper function for gpsm_erf object — autoplot.gpsm_erf","title":"A helper function for gpsm_erf object — autoplot.gpsm_erf","text":"helper function plot gpsm_erf object using ggplot2 package.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A helper function for gpsm_erf object — autoplot.gpsm_erf","text":"","code":"# S3 method for gpsm_erf autoplot(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A helper function for gpsm_erf object — autoplot.gpsm_erf","text":"object gpsm_erf object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A helper function for gpsm_erf object — autoplot.gpsm_erf","text":"Returns ggplot object.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_pspop.html","id":null,"dir":"Reference","previous_headings":"","what":"A helper function for gpsm_pspop object — autoplot.gpsm_pspop","title":"A helper function for gpsm_pspop object — autoplot.gpsm_pspop","text":"helper function plot gpsm_pspop object using ggplot2 package.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_pspop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A helper function for gpsm_pspop object — autoplot.gpsm_pspop","text":"","code":"# S3 method for gpsm_pspop autoplot(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_pspop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A helper function for gpsm_pspop object — autoplot.gpsm_pspop","text":"object gpsm_pspop object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_pspop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A helper function for gpsm_pspop object — autoplot.gpsm_pspop","text":"Returns ggplot object.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args.html","id":null,"dir":"Reference","previous_headings":"","what":"Check additional arguments — check_args","title":"Check additional arguments — check_args","text":"Checks additional arguments user needs provide different prediction models.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check additional arguments — check_args","text":"","code":"check_args( ci_appr, use_cov_transform, transformers, gps_density, trim_quantiles, ... )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check additional arguments — check_args","text":"ci_appr causal inference approach. use_cov_transform logical value (TRUE/FALSE) use covariate balance transforming. transformers list transformers. ... Additional named arguments passed.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check additional arguments — check_args","text":"TRUE requirements met. Raises error otherwise.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_compile_pseudo_pop.html","id":null,"dir":"Reference","previous_headings":"","what":"Check compile_pseudo_pop function arguments — check_args_compile_pseudo_pop","title":"Check compile_pseudo_pop function arguments — check_args_compile_pseudo_pop","text":"additional arguments provided.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_compile_pseudo_pop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check compile_pseudo_pop function arguments — check_args_compile_pseudo_pop","text":"","code":"check_args_compile_pseudo_pop(ci_appr, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_compile_pseudo_pop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check compile_pseudo_pop function arguments — check_args_compile_pseudo_pop","text":"ci_appr selected causal inference approach. ... Additional arguments successfully run selected ci_appr.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_compile_pseudo_pop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check compile_pseudo_pop function arguments — check_args_compile_pseudo_pop","text":"Returns True passes checks, successfully. Otherwise raises ERROR.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_estimate_gps.html","id":null,"dir":"Reference","previous_headings":"","what":"Check estimate_gps function arguments — check_args_estimate_gps","title":"Check estimate_gps function arguments — check_args_estimate_gps","text":"Checks estimate_gps function arguments make sure required additional arguments provided.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_estimate_gps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check estimate_gps function arguments — check_args_estimate_gps","text":"","code":"check_args_estimate_gps(gps_density, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_estimate_gps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check estimate_gps function arguments — check_args_estimate_gps","text":"gps_density Model type used estimating GPS value, including normal kernel. ... Additional arguments successfully run process.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_estimate_gps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check estimate_gps function arguments — check_args_estimate_gps","text":"Returns True passes checks, successfully. Otherwise raises ERROR.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_use_cov_transformers.html","id":null,"dir":"Reference","previous_headings":"","what":"Check Covariate Balance Transformers Argument — check_args_use_cov_transformers","title":"Check Covariate Balance Transformers Argument — check_args_use_cov_transformers","text":"Checks Covariate Balance Transformers terms using available transformers.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_use_cov_transformers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check Covariate Balance Transformers Argument — check_args_use_cov_transformers","text":"","code":"check_args_use_cov_transformers(use_cov_transform, transformers)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_use_cov_transformers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check Covariate Balance Transformers Argument — check_args_use_cov_transformers","text":"use_cov_transform logical value (TRUE/FALSE) use covariate balance transforming. transformers list transformers.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_use_cov_transformers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check Covariate Balance Transformers Argument — check_args_use_cov_transformers","text":"TRUE passes tests.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_covar_balance.html","id":null,"dir":"Reference","previous_headings":"","what":"Check covariate balance — check_covar_balance","title":"Check covariate balance — check_covar_balance","text":"Checks covariate balance original population pseudo population.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_covar_balance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check covariate balance — check_covar_balance","text":"","code":"check_covar_balance(w, c, ci_appr, counter_weight = NULL, nthread = 1, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_covar_balance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check covariate balance — check_covar_balance","text":"w vector observed continuous exposure variable. c data.frame observed covariates variable. ci_appr causal inference approach. counter_weight weight vector different situations. matching approach selected, integer data.table counters. case weighting approach, weight data.table. nthread number available threads. ... Additional arguments passed different models.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_covar_balance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check covariate balance — check_covar_balance","text":"output object: corr_results absolute_corr mean_absolute_corr pass (TRUE,FALSE)","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_covar_balance.html","id":"additional-parameters","dir":"Reference","previous_headings":"","what":"Additional parameters","title":"Check covariate balance — check_covar_balance","text":"ci_appr == matching: covar_bl_method covar_bl_trs","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_covar_balance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Check covariate balance — check_covar_balance","text":"","code":"# \\donttest{ set.seed(422) n <- 100 mydata <- generate_syn_data(sample_size=100) year <- sample(x=c(\"2001\",\"2002\",\"2003\",\"2004\",\"2005\"),size = n, replace = TRUE) region <- sample(x=c(\"North\", \"South\", \"East\", \"West\"),size = n, replace = TRUE) mydata$year <- as.factor(year) mydata$region <- as.factor(region) mydata$cf5 <- as.factor(mydata$cf5) pseudo_pop <- generate_pseudo_pop(mydata[, c(\"id\", \"w\")], mydata[, c(\"id\", \"cf1\", \"cf2\", \"cf3\", \"cf4\",\"cf5\", \"cf6\", \"year\", \"region\")], ci_appr = \"matching\", gps_density = \"kernel\", exposure_trim_qtls = c(0.01,0.99), sl_lib = c(\"m_xgboost\"), covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 1, scale = 0.5, nthread = 1) #> mean absolute correlation: 0.146209278430226| Covariate balance threshold: 0.1 #> Loading required package: nnls #> mean absolute correlation: 0.329695962727751| Covariate balance threshold: 0.1 #> Covariate balance condition has not been met. #> Best mean absolute correlation: 0.329695962727751| Covariate balance threshold: 0.1 adjusted_corr_obj <- check_covar_balance(w = pseudo_pop$pseudo_pop[, c(\"w\")], c = pseudo_pop$pseudo_pop[ , pseudo_pop$covariate_cols_name], counter = pseudo_pop$pseudo_pop[, c(\"counter_weight\")], ci_appr = \"matching\", nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\") #> mean absolute correlation: 0.329695962727751| Covariate balance threshold: 0.1 # }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_kolmogorov_smirnov.html","id":null,"dir":"Reference","previous_headings":"","what":"Check Kolmogorov-Smirnov (KS) statistics — check_kolmogorov_smirnov","title":"Check Kolmogorov-Smirnov (KS) statistics — check_kolmogorov_smirnov","text":"Checks Kolmogorov-Smirnov (KS) statistics exposure confounders pseudo-population","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_kolmogorov_smirnov.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check Kolmogorov-Smirnov (KS) statistics — check_kolmogorov_smirnov","text":"","code":"check_kolmogorov_smirnov(w, c, ci_appr, counter_weight = NULL, nthread = 1)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_kolmogorov_smirnov.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check Kolmogorov-Smirnov (KS) statistics — check_kolmogorov_smirnov","text":"w vector observed continuous exposure variable. c data.frame observed covariates variable. ci_appr causal inference approach. counter_weight weight vector different situations. matching approach selected, integer data.table counters. case weighting approach, weight data.table. nthread number available threads.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_kolmogorov_smirnov.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check Kolmogorov-Smirnov (KS) statistics — check_kolmogorov_smirnov","text":"output object list including: ks_stat maximal_val mean_val median_val","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compile_pseudo_pop.html","id":null,"dir":"Reference","previous_headings":"","what":"Compile pseudo population — compile_pseudo_pop","title":"Compile pseudo population — compile_pseudo_pop","text":"Compiles pseudo population based original population estimated GPS value.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compile_pseudo_pop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compile pseudo population — compile_pseudo_pop","text":"","code":"compile_pseudo_pop( data_obj, ci_appr, gps_density, bin_seq, exposure_col_name, nthread, ... )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compile_pseudo_pop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compile pseudo population — compile_pseudo_pop","text":"data_obj S3 object including following: Original data set + GPS values e_gps_pred e_gps_std_pred w_resid gps_mx (min max gps) w_mx (min max w). ci_appr Causal inference approach. gps_density Model type used estimating GPS value, including normal kernel. bin_seq Sequence w (treatment) generate pseudo population. NULL passed default value used, seq(min(w)+delta_n/2,max(w), =delta_n). exposure_col_name Exposure data column name. nthread integer value represents number threads used internal packages. ... Additional parameters.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compile_pseudo_pop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compile pseudo population — compile_pseudo_pop","text":"compile_pseudo_pop returns pseudo population data compiled based selected causal inference approach.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compile_pseudo_pop.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compile pseudo population — compile_pseudo_pop","text":"","code":"# \\donttest{ set.seed(112) m_d <- generate_syn_data(sample_size = 100) data_with_gps <- estimate_gps(m_d[, c(\"id\", \"w\")], m_d[, c(\"id\", \"cf1\",\"cf2\",\"cf3\",\"cf4\",\"cf5\",\"cf6\")], gps_density = \"normal\", params = list(xgb_max_depth = c(3,4,5), xgb_nrounds=c(10,20,30,40,50,60)), nthread = 1, sl_lib = c(\"m_xgboost\") ) pd <- compile_pseudo_pop(data_obj = data_with_gps, ci_appr = \"matching\", gps_density = \"normal\", bin_seq = NULL, exposure_col_name = c(\"w\"), nthread = 1, dist_measure = \"l1\", covar_bl_method = 'absolute', covar_bl_trs = 0.1, covar_bl_trs_type= \"mean\", delta_n = 0.5, scale = 1) # }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_closest_wgps.html","id":null,"dir":"Reference","previous_headings":"","what":"Find the closest data in subset to the original data — compute_closest_wgps","title":"Find the closest data in subset to the original data — compute_closest_wgps","text":"function compute closest data subset data original data based two attributes: vector scalar (vector size one).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_closest_wgps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Find the closest data in subset to the original data — compute_closest_wgps","text":"","code":"compute_closest_wgps(a, b, c, d, sc, nthread)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_closest_wgps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Find the closest data in subset to the original data — compute_closest_wgps","text":"Vector first attribute values subset data. b Vector first attribute values data. c Vector second attribute values subset data. d Vector size one second attribute value. sc Scale parameter give weight two mentioned measurements. nthread Number available cores.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_closest_wgps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Find the closest data in subset to the original data — compute_closest_wgps","text":"function returns index subset data closest original data sample.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_density.html","id":null,"dir":"Reference","previous_headings":"","what":"Approximate density based on another vector — compute_density","title":"Approximate density based on another vector — compute_density","text":"function impute missing values based density estimation another vector removing missing values.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_density.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Approximate density based on another vector — compute_density","text":"","code":"compute_density(x0, x1)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_density.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Approximate density based on another vector — compute_density","text":"x0 vector x1 vector","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_density.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Approximate density based on another vector — compute_density","text":"Returns approximation density value vector x1 based vector x0.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_min_max.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute minimum and maximum — compute_min_max","title":"Compute minimum and maximum — compute_min_max","text":"Function compute minimum maximum input vector","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_min_max.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute minimum and maximum — compute_min_max","text":"","code":"compute_min_max(x)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_min_max.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute minimum and maximum — compute_min_max","text":"x vector","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_min_max.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute minimum and maximum — compute_min_max","text":"Returns vector length 2. first element min value, second element max value.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_outer.html","id":null,"dir":"Reference","previous_headings":"","what":"Computes distance on all possible combinations — compute_outer","title":"Computes distance on all possible combinations — compute_outer","text":"Computes distance combination elements two vector. vector size n, b vector size m, result, matrix size(n,m)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_outer.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Computes distance on all possible combinations — compute_outer","text":"","code":"compute_outer(a, b, op)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_outer.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Computes distance on all possible combinations — compute_outer","text":"first vector (size n) b second vector (size m) op operator (e.g., '-', '+', '/', ...)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_outer.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Computes distance on all possible combinations — compute_outer","text":"n m matrix includes abs difference elements vector b.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_resid.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute residual — compute_resid","title":"Compute residual — compute_resid","text":"Function compute residual","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_resid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute residual — compute_resid","text":"","code":"compute_resid(a, b, c)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_resid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute residual — compute_resid","text":"vector b vector c vector","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_resid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute residual — compute_resid","text":"returns residual values.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_risk.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute risk value — compute_risk","title":"Compute risk value — compute_risk","text":"Calculates cross-validated risk optimal bandwidth selection kernel smoothing approach.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_risk.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute risk value — compute_risk","text":"","code":"compute_risk(h, matched_Y, matched_w, matched_cw, x_eval, w_vals, kernel_appr)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_risk.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute risk value — compute_risk","text":"h scalar representing bandwidth value. matched_Y vector outcome variable matched set. matched_w vector continuous exposure variable matched set. matched_cw vector counter weight variable matched set. w_vals vector values want calculate values ERF . kernel_appr Internal kernel approach. Available options locpol kernsmooth.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_risk.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute risk value — compute_risk","text":"returns cross-validated risk value input bandwidth","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/convert_data_into_standard_format.html","id":null,"dir":"Reference","previous_headings":"","what":"Put original data into package standard data — convert_data_into_standard_format","title":"Put original data into package standard data — convert_data_into_standard_format","text":"temporal function convert original data package standard data. function removed addressing issue #67: \"convert accessing data column index column name #67\"","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/convert_data_into_standard_format.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Put original data into package standard data — convert_data_into_standard_format","text":"","code":"convert_data_into_standard_format(Y, w, c, q1, q2, ci_appr)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/convert_data_into_standard_format.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Put original data into package standard data — convert_data_into_standard_format","text":"Y Output vector w Treatment exposure vector c Covariate matrix ci_appr Causal Inference approach","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/convert_data_into_standard_format.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Put original data into package standard data — convert_data_into_standard_format","text":"Original data place holder columns.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_matching.html","id":null,"dir":"Reference","previous_headings":"","what":"Create pseudo population using matching casual inference approach — create_matching","title":"Create pseudo population using matching casual inference approach — create_matching","text":"Generates pseudo population based matching casual inference method.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_matching.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create pseudo population using matching casual inference approach — create_matching","text":"","code":"create_matching( data_obj, exposure_col_name, bin_seq = NULL, gps_density = \"normal\", nthread = 1, ... )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_matching.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create pseudo population using matching casual inference approach — create_matching","text":"data_obj list elements. Including original dataset well helper vectors estimating GPS. See compile_pseudo_pop() details. bin_seq Sequence w (treatment) generate pseudo population. NULL passed default value used, seq(min(w)+delta_n/2,max(w), =delta_n). gps_density Model type used estimating GPS value, including normal (default) kernel. nthread Number available cores. ... Additional arguments passed function.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_matching.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create pseudo population using matching casual inference approach — create_matching","text":"Returns data.table matched set.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_weighting.html","id":null,"dir":"Reference","previous_headings":"","what":"Create pseudo population using weighting casual inference approach — create_weighting","title":"Create pseudo population using weighting casual inference approach — create_weighting","text":"Generates pseudo population based weighting casual inference method.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_weighting.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create pseudo population using weighting casual inference approach — create_weighting","text":"","code":"create_weighting(dataset, exposure_col_name, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_weighting.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create pseudo population using weighting casual inference approach — create_weighting","text":"dataset study data set. ... Additional parameters.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_weighting.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create pseudo population using weighting casual inference approach — create_weighting","text":"Returns data table includes following columns: Y w gps counter row_index ipw covariates","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_gps.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate generalized propensity score (GPS) values — estimate_gps","title":"Estimate generalized propensity score (GPS) values — estimate_gps","text":"Estimates GPS value observation using normal kernel approaches.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_gps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate generalized propensity score (GPS) values — estimate_gps","text":"","code":"estimate_gps( w, c, gps_density = \"normal\", params = list(), sl_lib = c(\"m_xgboost\"), nthread = 1, ... )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_gps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate generalized propensity score (GPS) values — estimate_gps","text":"w data frame observed continuous exposure variable. Including id w columns. c data frame observed covariates variable. Also includes id column. gps_density Model type used estimating GPS value, including normal (default) kernel. params Includes list parameters used internally. Unrelated parameters ignored. sl_lib vector prediction algorithms. nthread integer value represents number threads used shared memory system. ... Additional arguments passed model.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_gps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate generalized propensity score (GPS) values — estimate_gps","text":"function returns S3 object. Including following: dataset : id, w, gps e_gps_pred e_gps_std_pred w_resid gps_mx (min max gps) w_mx (min max w). used_params","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_gps.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Estimate generalized propensity score (GPS) values — estimate_gps","text":"internal.use set FALSE, original data set + GPS returned. outcome variable used estimating GPS value. However, used compiling data set GPS values.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_gps.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate generalized propensity score (GPS) values — estimate_gps","text":"","code":"# \\donttest{ m_d <- generate_syn_data(sample_size = 100) data_with_gps <- estimate_gps(m_d[, c(\"id\", \"w\")], m_d[, c(\"id\", \"cf1\", \"cf2\", \"cf3\", \"cf4\", \"cf5\", \"cf6\")], gps_density = \"normal\", params = list(xgb_max_depth = c(3,4,5), xgb_nrounds=c(10,20,30,40,50,60)), nthread = 1, sl_lib = c(\"m_xgboost\") ) # }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_hat_vals.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate hat (fitted) values — estimate_hat_vals","title":"Estimate hat (fitted) values — estimate_hat_vals","text":"Estimates fitted values based bandwidth value","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_hat_vals.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate hat (fitted) values — estimate_hat_vals","text":"","code":"estimate_hat_vals(bw, matched_w, w_vals)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_hat_vals.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate hat (fitted) values — estimate_hat_vals","text":"bw bandwidth value. matched_w vector continuous exposure variable matched set. w_vals vector values want calculate values ERF .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_hat_vals.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate hat (fitted) values — estimate_hat_vals","text":"Returns fitted values, prediction made model observation.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_npmetric_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","title":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","text":"Estimate smoothed exposure-response function (ERF) matched weighted data set using non-parametric models.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_npmetric_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","text":"","code":"estimate_npmetric_erf( m_Y, m_w, counter_weight, bw_seq, w_vals, nthread, kernel_appr = \"locpol\" )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_npmetric_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","text":"m_Y vector outcome variable matched set. m_w vector continuous exposure variable matched set. counter_weight vector counter weight variable matched set. bw_seq vector bandwidth values. w_vals vector values want calculate values ERF . nthread number available cores. kernel_appr Internal kernel approach. Available options locpol kernsmooth.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_npmetric_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","text":"function returns gpsm_erf object. object includes following attributes: params m_Y m_w bw_seq w_vals erf fcall","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_npmetric_erf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","text":"Estimate Functions Using Local Polynomial kernel regression.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_npmetric_erf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","text":"","code":"# \\donttest{ set.seed(697) m_d <- generate_syn_data(sample_size = 200) pseudo_pop <- generate_pseudo_pop(m_d[, c(\"id\", \"w\")], m_d[, c(\"id\", \"cf1\",\"cf2\",\"cf3\", \"cf4\",\"cf5\",\"cf6\")], ci_appr = \"matching\", pred_model = \"sl\", sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(10,20,30), xgb_eta=c(0.1,0.2,0.3)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type=\"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 1, scale = 0.5) #> mean absolute correlation: 0.233156732082237| Covariate balance threshold: 0.1 #> mean absolute correlation: 0.189312229205105| Covariate balance threshold: 0.1 #> Covariate balance condition has not been met. #> Best mean absolute correlation: 0.189312229205105| Covariate balance threshold: 0.1 data <- merge(m_d[, c(\"id\", \"Y\")], pseudo_pop$pseudo_pop, by = \"id\") erf_obj <- estimate_npmetric_erf(data$Y, data$w, data$counter_weight, bw_seq=seq(0.2,2,0.2), w_vals = seq(2,20,0.5), nthread = 1) #> Error in checkForRemoteErrors(val): one node produced an error: could not find function \"smooth_erf_locpol\" # }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_pmetric_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","title":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","text":"Estimate constant effect size matched weighted data set using parametric models","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_pmetric_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","text":"","code":"estimate_pmetric_erf(formula, family, data, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_pmetric_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","text":"formula vector outcome variable matched set. family description error distribution (see ?gnm) data dataset formula build upon (Note counter_weight column data.) ... Additional parameters fine tuning gnm model.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_pmetric_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","text":"returns object class gnm","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_pmetric_erf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","text":"method uses generalized nonlinear model (gnm) gnm package.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_pmetric_erf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","text":"","code":"# \\donttest{ m_d <- generate_syn_data(sample_size = 100) pseudo_pop <- generate_pseudo_pop(m_d[, c(\"id\", \"w\")], m_d[, c(\"id\", \"cf1\",\"cf2\",\"cf3\", \"cf4\",\"cf5\",\"cf6\")], ci_appr = \"matching\", sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(10,20,30), xgb_eta=c(0.1,0.2,0.3)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type= \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 1, scale = 0.5) #> mean absolute correlation: 0.190532732398494| Covariate balance threshold: 0.1 #> mean absolute correlation: 0.149674153889077| Covariate balance threshold: 0.1 #> Covariate balance condition has not been met. #> Best mean absolute correlation: 0.149674153889077| Covariate balance threshold: 0.1 data <- merge(m_d[, c(\"id\", \"Y\")], pseudo_pop$pseudo_pop, by = \"id\") outcome_m <- estimate_pmetric_erf(formula = Y ~ w, family = gaussian, data = data) # }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_semipmetric_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","title":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","text":"Estimates smoothed exposure-response function using generalized additive model splines.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_semipmetric_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","text":"","code":"estimate_semipmetric_erf(formula, family, data, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_semipmetric_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","text":"formula vector outcome variable matched set. family description error distribution (see ?gam). data dataset formula build upon Note counter_weight column data.). ... Additional parameters fine tuning gam model.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_semipmetric_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","text":"returns object class gam","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_semipmetric_erf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","text":"approach uses Generalized Additive Model (gam) using mgcv package.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_semipmetric_erf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","text":"","code":"# \\donttest{ m_d <- generate_syn_data(sample_size = 100) pseudo_pop <- generate_pseudo_pop(m_d[, c(\"id\", \"w\")], m_d[, c(\"id\", \"cf1\",\"cf2\",\"cf3\", \"cf4\",\"cf5\",\"cf6\")], ci_appr = \"matching\", sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(10,20,30), xgb_eta=c(0.1,0.2,0.3)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 1, scale = 0.5) #> mean absolute correlation: 0.221667731370857| Covariate balance threshold: 0.1 #> mean absolute correlation: 0.150556845808525| Covariate balance threshold: 0.1 #> Covariate balance condition has not been met. #> Best mean absolute correlation: 0.150556845808525| Covariate balance threshold: 0.1 data <- merge(m_d[, c(\"id\", \"Y\")], pseudo_pop$pseudo_pop, by = \"id\") outcome_m <- estimate_semipmetric_erf (formula = Y ~ w, family = gaussian, data = data) # }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/gen_wrap_sl_lib.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate customized wrapper for SuperLearner libraries — gen_wrap_sl_lib","title":"Generate customized wrapper for SuperLearner libraries — gen_wrap_sl_lib","text":"function generates customized wrapper order access external libraries hyperparameters.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/gen_wrap_sl_lib.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate customized wrapper for SuperLearner libraries — gen_wrap_sl_lib","text":"","code":"gen_wrap_sl_lib(lib_name, params, nthread)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/gen_wrap_sl_lib.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate customized wrapper for SuperLearner libraries — gen_wrap_sl_lib","text":"lib_name library name (e.g., m_xgboost). params list includes key-values different parameters. relevant parameters extracted, others ignored. nthread Number threads available used external libraries (case can use ).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/gen_wrap_sl_lib.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate customized wrapper for SuperLearner libraries — gen_wrap_sl_lib","text":"Returns list TRUE best used parameters, modified library given library implemented; otherwise, returns list FALSE. function also called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_kernel.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate kernel function — generate_kernel","title":"Generate kernel function — generate_kernel","text":"Generates kernel function","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_kernel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate kernel function — generate_kernel","text":"","code":"generate_kernel(t)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_kernel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate kernel function — generate_kernel","text":"t standardized vector (z-score)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_kernel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate kernel function — generate_kernel","text":"probability distribution","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_pseudo_pop.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate pseudo population — generate_pseudo_pop","title":"Generate pseudo population — generate_pseudo_pop","text":"Generates pseudo population data set based user-defined causal inference approach. function uses adaptive approach satisfies covariate balance requirements. function terminates either satisfying covariate balance completing requested number iteration, whichever comes first.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_pseudo_pop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate pseudo population — generate_pseudo_pop","text":"","code":"generate_pseudo_pop( w, c, ci_appr, gps_density = \"normal\", use_cov_transform = FALSE, transformers = list(\"pow2\", \"pow3\"), bin_seq = NULL, exposure_trim_qtls = c(0.01, 0.99), gps_trim_qtls = c(0, 1), params = list(), sl_lib = c(\"m_xgboost\"), nthread = 1, include_original_data = FALSE, gps_obj = NULL, ... )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_pseudo_pop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate pseudo population — generate_pseudo_pop","text":"w data.frame comprised two columns: one contains observed exposure variable, labeled 'id'. column outcome variable can assigned name per requirements. c data.frame includes observed covariate variables. also consist column named 'id'. ci_appr causal inference approach. Possible values : \"matching\": Matching GPS \"weighting\": Weighting GPS gps_density Model type used estimating GPS value, including normal (default) kernel. use_cov_transform TRUE, function uses transformer meet covariate balance. transformers list transformers. transformer unary function. can pass name customized function quotes. Available transformers: pow2: power 2 pow3: power 3 bin_seq Sequence w (treatment) generate pseudo population. NULL passed default value used, seq(min(w)+delta_n/2,max(w), =delta_n). exposure_trim_qtls numerical vector two. Represents trim quantile level exposure values. numbers range [0,1] increasing order (default: c(0.01, 0.99)). gps_trim_qtls numerical vector two. Represents trim quantile level gps values. numbers range [0,1] increasing order (default: c(0.0, 1.0)). params Includes list params used internally. Unrelated parameters ignored. sl_lib vector prediction algorithms. nthread integer value represents number threads used internal packages. include_original_data TRUE, includes original data outcome. gps_obj gps object generated estimate_gps function. provided, number iteration forced 1 (Default: NULL). ... Additional arguments passed different models.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_pseudo_pop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate pseudo population — generate_pseudo_pop","text":"Returns pseudo population (gpsm_pspop) object generated augmented based selected causal inference approach (ci_appr). object includes following objects: params ci_appr params pseudo_pop adjusted_corr_results original_corr_results best_gps_used_params effect size generated pseudo population","code":""},{"path":[]},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_pseudo_pop.html","id":"causal-inference-approach-ci-appr-","dir":"Reference","previous_headings":"","what":"Causal Inference Approach (ci_appr)","title":"Generate pseudo population — generate_pseudo_pop","text":"ci_appr = 'matching': dist_measure: Matching function. Available options: l1: Manhattan distance matching delta_n: caliper parameter. scale: specified scale parameter control relative weight attributed distance measures exposure versus GPS. covar_bl_method: covariate balance method. Available options: 'absolute' covar_bl_trs: covariate balance threshold covar_bl_trs_type: covariate balance type (mean, median, maximal) max_attempt: maximum number attempt satisfy covariate balance. See create_matching() details parameters default values. ci_appr = 'weighting': covar_bl_method: Covariate balance method. covar_bl_trs: Covariate balance threshold max_attempt: Maximum number attempt satisfy covariate balance.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_pseudo_pop.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate pseudo population — generate_pseudo_pop","text":"","code":"# \\donttest{ m_d <- generate_syn_data(sample_size = 100) pseuoo_pop <- generate_pseudo_pop(m_d[, c(\"id\", \"w\")], m_d[, c(\"id\", \"cf1\",\"cf2\",\"cf3\",\"cf4\",\"cf5\",\"cf6\")], ci_appr = \"matching\", gps_density = \"normal\", bin_seq = NULL, expos_trim_qlts = c(0.01,0.99), gps_trim_qlts = c(0.01,0.99), use_cov_transform = FALSE, transformers = list(), params = list(xgb_nrounds=c(10,20,30), xgb_eta=c(0.1,0.2,0.3)), sl_lib = c(\"m_xgboost\"), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type= \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 1, scale = 0.5) #> mean absolute correlation: 0.187874919634512| Covariate balance threshold: 0.1 #> mean absolute correlation: 0.259346434375271| Covariate balance threshold: 0.1 #> Covariate balance condition has not been met. #> Best mean absolute correlation: 0.259346434375271| Covariate balance threshold: 0.1 # }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_syn_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate synthetic data for the CausalGPS package — generate_syn_data","title":"Generate synthetic data for the CausalGPS package — generate_syn_data","text":"Generates synthetic data set based different GPS models covariates.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_syn_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate synthetic data for the CausalGPS package — generate_syn_data","text":"","code":"generate_syn_data( sample_size = 1000, outcome_sd = 10, gps_spec = 1, cova_spec = 1, vectorized_y = FALSE )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_syn_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate synthetic data for the CausalGPS package — generate_syn_data","text":"sample_size positive integer number represents number data samples. outcome_sd positive double number represents standard deviation used generate outcome synthetic data set. gps_spec numerical integer values ranging 1 7. complexity form relationship covariates treatment variables determined gps_spec. , find concise definition values: gps_spec: 1: treatment generated using normal distributionMay 24, 2023 (stats::rnorm) linear function covariates (cf1 cf6). gps_spec: 2: treatment generated using Student's t-distribution (stats::rt) linear function covariates, also truncated within specific range (-5 25). gps_spec: 3: treatment includes quadratic term third covariate. gps_spec: 4: treatment calculated using exponential function within fraction, creating logistic-like model. gps_spec: 5: treatment also uses logistic-like model different parameters. gps_spec: 6: treatment calculated using natural logarithm absolute value linear combination covariates. gps_spec: 7: treatment generated similarly gps_spec = 2, without truncation. cova_spec numerical value (1 2) modify covariates. determines covariates synthetic data set transformed. cova_spec equals 2, function applies non-linear transformation covariates, can add complexity relationships covariates outcomes synthetic data. See code details. vectorized_y Boolean value indicates Y internally generated. (Default = FALSE). parameter introduced backward compatibility. vectorized_y = TRUE performs better.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_syn_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate synthetic data for the CausalGPS package — generate_syn_data","text":"synthetic_data: function returns data.frame saved constructed synthetic data.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_syn_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate synthetic data for the CausalGPS package — generate_syn_data","text":"","code":"set.seed(298) s_data <- generate_syn_data(sample_size = 100, outcome_sd = 10, gps_spec = 1, cova_spec = 1)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/get_logger.html","id":null,"dir":"Reference","previous_headings":"","what":"Get Logger Settings — get_logger","title":"Get Logger Settings — get_logger","text":"Returns current logger settings.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/get_logger.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get Logger Settings — get_logger","text":"","code":"get_logger()"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/get_logger.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get Logger Settings — get_logger","text":"Returns list includes logger_file_path logger_level.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/get_logger.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get Logger Settings — get_logger","text":"","code":"set_logger(\"mylogger.log\", \"INFO\") log_meta <- get_logger()"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/log_system_info.html","id":null,"dir":"Reference","previous_headings":"","what":"Log system information — log_system_info","title":"Log system information — log_system_info","text":"Logs system related information log file.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/log_system_info.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Log system information — log_system_info","text":"","code":"log_system_info()"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/log_system_info.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Log system information — log_system_info","text":"return value. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_fn.html","id":null,"dir":"Reference","previous_headings":"","what":"Match observations — matching_fn","title":"Match observations — matching_fn","text":"Matching function using L1 distance single exposure level w","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_fn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Match observations — matching_fn","text":"","code":"matching_fn( w, dataset, exposure_col_name, e_gps_pred, e_gps_std_pred, w_resid, gps_mx, w_mx, dist_measure = \"l1\", gps_density = \"normal\", delta_n = 1, scale = 0.5, nthread = 1 )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_fn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Match observations — matching_fn","text":"w targeted single exposure levels. dataset completed observational data frame matrix containing (Y, w, gps, counter, row_index, c). e_gps_pred vector predicted gps values obtained Machine learning methods. e_gps_std_pred vector predicted std gps obtained Machine learning methods. w_resid standardized residuals w. gps_mx vector length 2, includes min(gps), max(gps) w_mx vector length 2, includes min(w), max(w). gps_density Model type used estimating GPS value, including normal (default) kernel. delta_n specified caliper parameter exposure (Default 1). scale specified scale parameter control relative weight attributed distance measures exposure versus GPS estimates (Default 0.5). nthread Number available cores.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_fn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Match observations — matching_fn","text":"dp: function returns data.table saved matched points single exposure level w proposed GPS matching approaches.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_l1.html","id":null,"dir":"Reference","previous_headings":"","what":"Match observations — matching_l1","title":"Match observations — matching_l1","text":"Matching function using L1 distance single exposure level w","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_l1.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Match observations — matching_l1","text":"","code":"matching_l1( w, dataset, exposure_col_name, e_gps_pred, e_gps_std_pred, w_resid, gps_mx, w_mx, gps_density = \"normal\", delta_n = 1, scale = 0.5, nthread = 1 )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_l1.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Match observations — matching_l1","text":"w targeted single exposure levels. dataset completed observational data frame matrix containing (Y, w, gps, counter, row_index, c). e_gps_pred vector predicted gps values obtained Machine learning methods. e_gps_std_pred vector predicted std gps obtained Machine learning methods. w_resid standardized residuals w. gps_mx vector length 2, includes min(gps), max(gps) w_mx vector length 2, includes min(w), max(w). gps_density Model type used estimating GPS value, including normal (default) kernel. delta_n specified caliper parameter exposure (Default 1). scale specified scale parameter control relative weight attributed distance measures exposure versus GPS estimates (Default 0.5). nthread Number available cores.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_l1.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Match observations — matching_l1","text":"dp: function returns data.table saved matched points single exposure level w proposed GPS matching approaches.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend generic plot functions for gpsm_erf class — plot.gpsm_erf","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_erf","text":"wrapper function extend generic plot functions gpsm_erf class.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_erf","text":"","code":"# S3 method for gpsm_erf plot(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_erf","text":"x gpsm_erf object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_erf","text":"Returns ggplot2 object, invisibly. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_pspop.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend generic plot functions for gpsm_erf class — plot.gpsm_pspop","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_pspop","text":"wrapper function extend generic plot functions gpsm_erf class.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_pspop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_pspop","text":"","code":"# S3 method for gpsm_pspop plot(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_pspop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_pspop","text":"x gpsm_erf object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_pspop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_pspop","text":"Returns ggplot2 object, invisibly. function called side effects.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_pspop.html","id":"additional-parameters","dir":"Reference","previous_headings":"","what":"Additional parameters","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_pspop","text":"include_details: set TRUE, plot include run details (Default = FALSE).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/preprocess_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Preprocess data — preprocess_data","title":"Preprocess data — preprocess_data","text":"Preprocess data isolate extra details","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/preprocess_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Preprocess data — preprocess_data","text":"","code":"preprocess_data(w, c, trim_quantiles, exposure_col)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/preprocess_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Preprocess data — preprocess_data","text":"w data.frame comprised two columns: one contains observed exposure variable, labeled 'id'. column outcome variable can assigned name per requirements. c data.frame includes observed covariate variables. also consist column named 'id'. exposure_col Column name used exposure.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/preprocess_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Preprocess data — preprocess_data","text":"list preprocessed original data.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend print function for gpsm_erf object — print.gpsm_erf","title":"Extend print function for gpsm_erf object — print.gpsm_erf","text":"Extend print function gpsm_erf object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend print function for gpsm_erf object — print.gpsm_erf","text":"","code":"# S3 method for gpsm_erf print(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend print function for gpsm_erf object — print.gpsm_erf","text":"x gpsm_erf object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend print function for gpsm_erf object — print.gpsm_erf","text":"return value. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_pspop.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend print function for gpsm_pspop object — print.gpsm_pspop","title":"Extend print function for gpsm_pspop object — print.gpsm_pspop","text":"Extend print function gpsm_pspop object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_pspop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend print function for gpsm_pspop object — print.gpsm_pspop","text":"","code":"# S3 method for gpsm_pspop print(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_pspop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend print function for gpsm_pspop object — print.gpsm_pspop","text":"x gpsm_pspop object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_pspop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend print function for gpsm_pspop object — print.gpsm_pspop","text":"return value. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/set_logger.html","id":null,"dir":"Reference","previous_headings":"","what":"Set Logger Settings — set_logger","title":"Set Logger Settings — set_logger","text":"Updates logger settings, including log level location file.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/set_logger.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set Logger Settings — set_logger","text":"","code":"set_logger(logger_file_path = \"CausalGPS.log\", logger_level = \"INFO\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/set_logger.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set Logger Settings — set_logger","text":"logger_file_path path (including file name) log messages. (Default: CausalGPS.log) logger_level log level. Available levels include: TRACE DEBUG INFO (Default) SUCCESS WARN ERROR FATAL","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/set_logger.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set Logger Settings — set_logger","text":"return value. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/set_logger.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set Logger Settings — set_logger","text":"","code":"set_logger(\"Debug\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Smooth exposure response function — smooth_erf","title":"Smooth exposure response function — smooth_erf","text":"Smooths exposure response function based bandwidth","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Smooth exposure response function — smooth_erf","text":"","code":"smooth_erf(matched_Y, bw, matched_w, matched_cw, x_eval, kernel_appr)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Smooth exposure response function — smooth_erf","text":"matched_Y vector outcome variable matched set. bw bandwidth value. matched_w vector continuous exposure variable matched set. matched_cw vector counter weight variable matched set. kernel_appr Internal kernel approach. Available options locpol kernsmooth.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Smooth exposure response function — smooth_erf","text":"Smoothed value ERF","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_kernsmooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute smoothed erf with kernsmooth approach — smooth_erf_kernsmooth","title":"Compute smoothed erf with kernsmooth approach — smooth_erf_kernsmooth","text":"Compute smoothed erf kernsmooth approach","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_kernsmooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute smoothed erf with kernsmooth approach — smooth_erf_kernsmooth","text":"","code":"smooth_erf_kernsmooth(matched_Y, matched_w, matched_cw, x_eval, bw)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_kernsmooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute smoothed erf with kernsmooth approach — smooth_erf_kernsmooth","text":"matched_Y vector outcome value. matched_w vector treatment value. matched_cw vector weight count. bw scaler number indicating bandwidth.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_kernsmooth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute smoothed erf with kernsmooth approach — smooth_erf_kernsmooth","text":"vector smoothed ERF.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_locpol.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute smoothed erf with locpol approach — smooth_erf_locpol","title":"Compute smoothed erf with locpol approach — smooth_erf_locpol","text":"Compute smoothed erf locpol approach","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_locpol.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute smoothed erf with locpol approach — smooth_erf_locpol","text":"","code":"smooth_erf_locpol(matched_Y, matched_w, matched_cw, x_eval, bw)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_locpol.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute smoothed erf with locpol approach — smooth_erf_locpol","text":"matched_Y vector outcome value. matched_w vector treatment value. matched_cw vector weight count. bw scaler number indicating bandwidth.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_locpol.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute smoothed erf with locpol approach — smooth_erf_locpol","text":"vector smoothed ERF.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"print summary of gpsm_erf object — summary.gpsm_erf","title":"print summary of gpsm_erf object — summary.gpsm_erf","text":"print summary gpsm_erf object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"print summary of gpsm_erf object — summary.gpsm_erf","text":"","code":"# S3 method for gpsm_erf summary(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"print summary of gpsm_erf object — summary.gpsm_erf","text":"object gpsm_erf object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"print summary of gpsm_erf object — summary.gpsm_erf","text":"Returns summary data","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_pspop.html","id":null,"dir":"Reference","previous_headings":"","what":"print summary of gpsm_pspop object — summary.gpsm_pspop","title":"print summary of gpsm_pspop object — summary.gpsm_pspop","text":"print summary gpsm_pspop object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_pspop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"print summary of gpsm_pspop object — summary.gpsm_pspop","text":"","code":"# S3 method for gpsm_pspop summary(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_pspop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"print summary of gpsm_pspop object — summary.gpsm_pspop","text":"object gpsm_pspop object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_pspop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"print summary of gpsm_pspop object — summary.gpsm_pspop","text":"Returns summary data","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/synthetic_us_2010.html","id":null,"dir":"Reference","previous_headings":"","what":"Public data set for air pollution and health studies,\ncase study: 2010 county-Level data set for the contiguous United States — synthetic_us_2010","title":"Public data set for air pollution and health studies,\ncase study: 2010 county-Level data set for the contiguous United States — synthetic_us_2010","text":"dataset containing exposure, confounders, outcome causal inference studies. dataset hosted Harvard dataverse doi:10.7910/DVN/L7YF2G . dataset produced five different resources. Please see https://github.com/NSAPH-Projects/synthetic_data/ data processing pipelines. following Exposure Data exposure parameter PM2.5. Di et al. (2019) provided daily, annual PM2.5 estimates 1 km×1 km grid cells entire United States. data can downloaded Di et al. (2021). Features category starts qd_ prefix. Census Data main reference getting census data United States Census Bureau. numerous studies surveys different geographical resolutions. use 2010 county level American County Survey county level (acs5). Features category starts cs_ prefix. CDC Data Centers Disease Control Prevention (CDC), provides Behavioral Risk Factor Surveillance System (Centers Disease Control Prevention (2021)), nation’s premier system health-related telephone surveys collect state data U.S. residents regarding health-related risk behaviors. GridMET Data Climatology Lab University California, Merced, provides GridMET data (Abatzoglou (2013)). data set daily surface meteorological data covering contiguous United States. CMS Data Centers Medicare Medicaid Services(CMS) provides synthetic data county level 2008-2010 (Centers Medicare & Medicaid Services (2021)). definition variables provided . data collected 2010 aggregated county level contiguous United States.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/synthetic_us_2010.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Public data set for air pollution and health studies,\ncase study: 2010 county-Level data set for the contiguous United States — synthetic_us_2010","text":"","code":"data(synthetic_us_2010)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/synthetic_us_2010.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Public data set for air pollution and health studies,\ncase study: 2010 county-Level data set for the contiguous United States — synthetic_us_2010","text":"data frame 3109 rows 46 variables: qd_mean_pm25 Mean PM2.5 (microgram/m3) cs_poverty proportion poverty level population among 65+ years old. cs_hispanic proportion Hispanic Latino population among 65+ years old. cs_black proportion Black African American population among 65+ years old. cs_white proportion White population among 65 years . cs_native proportion American Indian Alaska native population among 65 years . cs_asian proportion Asian population among 65 years . cs_other proportion races population among 65 years . cs_ed_below_highschool proportion population high school level education among 65 years . cs_household_income Median Household income past 12 months (2010 inflation-adjusted dollars) householder 65 years . cs_median_house_value Median house value (USD) cs_total_population Total Population cs_area Area county (square miles) cs_population_density number population one square mile. cdc_mean_bmi Body Mass Index. cdc_pct_cusmoker proportion current smokers. cdc_pct_sdsmoker proportion days smokers. cdc_pct_fmsmoker proportion former smokers. cdc_pct_nvsmoker proportion never smokers. cdc_pct_nnsmoker proportion known smokers. gmet_mean_tmmn Annual mean daily minimum temperature (K) gmet_mean_summer_tmmn mean daily minimum temperature summer (K) gmet_mean_winter_tmmn mean daily minimum temperature winter (K) gmet_mean_tmmx Annual mean daily maximum temperature (K) gmet_mean_summer_tmmx mean daily maximum temperature summer (K) gmet_mean_winter_tmmx mean daily maximum temperature winter (K) gmet_mean_rmn Annual mean daily minimum relative humidity (%) gmet_mean_summer_rmn mean daily minimum relative humidity summer (%) gmet_mean_winter_rmn mean daily minimum relative humidity winter (%) gmet_mean_rmx Annual mean daily maximum relative humidity (%) gmet_mean_summer_rmx mean daily maximum relative humidity summer (%) gmet_mean_winter_rmx mean daily maximum relative humidity winter (%) gmet_mean_sph Annual mean daily mean specific humidity (kg/kg) gmet_mean_summer_sph mean daily mean specific humidity summer(kg/kg) gmet_mean_winter_sph mean daily mean specific humidity winter(kg/kg) cms_mortality_pct proportion deceased patients. cms_white_pct proportion White patients. cms_black_pct proportion Black patients. cms_hispanic_pct proportion Hispanic patients. cms_others_pct proportion patients. cms_female_pct proportion Female patients. region region county located . FIPS Federal Information Processing Standards, unique ID county. NAME County, State name. STATE State abbreviation. STATE_CODE State numerical code.","code":"NORTHEAST=(\"NY\",\"MA\",\"PA\",\"RI\",\"NH\",\"ME\",\"VT\",\"CT\",\"NJ\") SOUTH=(\"DC\",\"VA\",\"NC\",\"WV\",\"KY\",\"SC\",\"GA\",\"FL\",\"AL\",\"TN\",\"MS\",\"AR\",\"MD\",\"DE\",\"OK\",\"TX\",\"LA\") MIDWEST=c(\"OH\",\"IN\",\"MI\",\"IA\",\"MO\",\"WI\",\"MN\",\"SD\",\"ND\",\"IL\",\"KS\",\"NE\") WEST=c(\"MT\",\"CO\",\"WY\",\"ID\",\"UT\",\"NV\",\"CA\",\"OR\",\"WA\",\"AZ\",\"NM\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/synthetic_us_2010.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Public data set for air pollution and health studies,\ncase study: 2010 county-Level data set for the contiguous United States — synthetic_us_2010","text":"Abatzoglou, John T. 2013. “Development Gridded Surface Meteorological Data Ecological Applications Modelling.” International Journal Climatology 33 (1): 121–31. doi:10.1002/joc.3413 . Centers Disease Control Prevention. 2021. “Behavioral Risk Factor Surveillance System.” https://www.cdc.gov/brfss/annual_data/annual_2010.htm/. Centers Medicare & Medicaid Services. 2021. “CMS 2008-2010 Data Entrepreneurs’ Synthetic Public Use File (DE-SynPUF).” https://www.cms.gov/data-research/statistics-trends--reports/medicare-claims-synthetic-public-use-files/cms-2008-2010-data-entrepreneurs-synthetic-public-use-file-de-synpuf. Di, Qian, Heresh Amini, Liuhua Shi, Itai Kloog, Rachel Silvern, James Kelly, M Benjamin Sabath, et al. 2019. “Ensemble-Based Model Pm2. 5 Concentration Across Contiguous United States High Spatiotemporal Resolution.” Environment International 130: 104909. doi:10.1016/j.envint.2019.104909 . Di, Qian, Yaguang Wei, Alexandra Shtein, Carolynne Hultquist, Xiaoshi Xing, Heresh Amini, Liuhua Shi, et al. 2021. “Daily Annual Pm2.5 Concentrations Contiguous United States, 1-Km Grids, V1 (2000 - 2016).” NASA Socioeconomic Data; Applications Center (SEDAC). doi:10.7927/0rvr-4538 .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/train_it.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate Prediction Model — train_it","title":"Generate Prediction Model — train_it","text":"Function develop prediction model based user's preferences.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/train_it.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate Prediction Model — train_it","text":"","code":"train_it(target, input, sl_lib_internal = NULL, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/train_it.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate Prediction Model — train_it","text":"target vector target data. input vector, matrix, dataframe input data. sl_lib_internal internal library used SuperLearner ... Model related parameters provided.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/train_it.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate Prediction Model — train_it","text":"prediction model","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/transform_it.html","id":null,"dir":"Reference","previous_headings":"","what":"Transform data — transform_it","title":"Transform data — transform_it","text":"Transforms data new values.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/transform_it.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Transform data — transform_it","text":"","code":"transform_it(c_name, c_val, transformer)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/transform_it.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Transform data — transform_it","text":"c_name column (attribute) name. c_val column value transformer transformer function.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/transform_it.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Transform data — transform_it","text":"Returns transformed data.frame.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_gps.html","id":null,"dir":"Reference","previous_headings":"","what":"Trim a gps object based on provided trimming quantiles — trim_gps","title":"Trim a gps object based on provided trimming quantiles — trim_gps","text":"Trims gps object based provided trimming quantiles.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_gps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trim a gps object based on provided trimming quantiles — trim_gps","text":"","code":"trim_gps(gps_obj, trim_quantiles)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_gps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trim a gps object based on provided trimming quantiles — trim_gps","text":"gps_obj gps S3 object. trim_quantiles vector trimming quantiles two min max values.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_gps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trim a gps object based on provided trimming quantiles — trim_gps","text":"trimmed gps_obj","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/w_fun.html","id":null,"dir":"Reference","previous_headings":"","what":"Helper function — w_fun","title":"Helper function — w_fun","text":"Helper function","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/w_fun.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Helper function — w_fun","text":"","code":"w_fun(bw, matched_w, w_vals)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/w_fun.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Helper function — w_fun","text":"bw bandwidth value matched_w vector continuous exposure variable matched set. w_vals vector values want calculate values ERF .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/w_fun.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Helper function — w_fun","text":"return value (TODO)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-041-2023-09-29","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.4.1 (2023-09-29)","title":"CausalGPS 0.4.1 (2023-09-29)","text":"CRAN release: 2023-09-29","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-4-1","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.4.1 (2023-09-29)","text":"Extra step check consistency delta_n exposure range. Software paper examples added.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-4-1","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.4.1 (2023-09-29)","text":"Plotting pseudo population includes object details. Set include_details = TRUE. *generate_pseudo_pop take Y input.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-040-2023-05-25","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.4.0 (2023-05-25)","title":"CausalGPS 0.4.0 (2023-05-25)","text":"CRAN release: 2023-05-25","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-4-0","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.4.0 (2023-05-25)","text":"Docker image supports R 4.2.3 generate_syn_data supports vectorized_y accelerate data generation. matching_fun –> dist_measure matching_l1 –> matching_fn estimate_semipmetric_erf now takes gam models optional arguments. estimate_pmetric_erf now takes gnm models optional arguments. trim_quantiles –> exposure_trim_qtls generate_pseudo_pop function accepts gps_obj optional input. internal_use part parameters estimate_gps function. estimate_gps function returns id, w, computed gps part dataset. Now design analysis phases explicitly separated. gps_model –> gps_density. Now takes, normal kernel options instead parametric non-parametric options.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-4-0","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.4.0 (2023-05-25)","text":"estimate_npmetric_erf supports locpol KernSmooth approaches. gps_trim_qtls input parameter trim data samples based gps values. Now users can also collect original data pseudo population object.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-4-0","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.4.0 (2023-05-25)","text":"bug swapping transformed covairates original one.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-031-2023-05-15","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.3.1 (2023-05-15)","title":"CausalGPS 0.3.1 (2023-05-15)","text":"CRAN release: 2023-05-16","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-3-1","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.3.1 (2023-05-15)","text":"unit tests less accuracy overcome bug stats::density function.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-030-2023-02-15","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.3.0 (2023-02-15)","title":"CausalGPS 0.3.0 (2023-02-15)","text":"CRAN release: 2023-02-15","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-3-0","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.3.0 (2023-02-15)","text":"Unit tests support new wCorr release (#193). optimized compilation supported. previous versions, approach known optimzied_compile == TRUE.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-3-0","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.3.0 (2023-02-15)","text":"earth package part suggested packages.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-029-2022-12-16","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.2.9 (2022-12-16)","title":"CausalGPS 0.2.9 (2022-12-16)","text":"CRAN release: 2022-12-16","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-9","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.9 (2022-12-16)","text":"fixed bug based covariate balance threshold (#178, @naeemkh). estimate_npmetric_erf assigns user-defined log file.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-9","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.9 (2022-12-16)","text":"process now prints progress message based selected thresholds. matched_Y –> m_Y matched_w –> m_w matched_cw –> counter_weight estimate_npmetric_erf function, matched_cw input now mandatory. Internal kernel smoothing now uses locpol::locpol function. entire data set trimmed based trimming quantiles. earth ranger installed automatically. can installed manually needed. sysdata.rda modified reflect transition counter ipw counter_weight counter_weight used counter weight, matching weighting approaches. counter ipw dropped. sl_lib becomes required argument. package transferred NSAPH-Software Github account. Summary function gpsm_pspop S3 object returns details adjusting process.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-2-9","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.2.9 (2022-12-16)","text":"Now Kolmogorov-Smirnov(KS) statistics provided computed pseudo population. effect size generated pseudo population computed reported. Binary search approach used scale = 1. pseodo_pop also includes covariate column names. compute_closest_wgps_helper_no_sc added take care mostly used special case (scale = 1).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"removed-0-2-9","dir":"Changelog","previous_headings":"","what":"Removed","title":"CausalGPS 0.2.9 (2022-12-16)","text":"Dropped importing KernSmooth tidyr packages. pred_model argument dropped. package predicts using SuperLearner.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-028-2022-06-22","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.2.8 (2022-06-22)","title":"CausalGPS 0.2.8 (2022-06-22)","text":"CRAN release: 2022-06-22","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-8","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.8 (2022-06-22)","text":"Message implemented methods changed reduce misunderstanding. Empty counter raise error estimating non-parametric response function.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-8","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.8 (2022-06-22)","text":"matching_l1 returns frequency table instead entire vector. Vectorized population compilation used data.table multi-thread assignment. Removed nested parallelism compiling pseudo population, results close control memory. estimate_npmetric_erf also returns optimal h risk values.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-2-8","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.2.8 (2022-06-22)","text":"estimate_gps returns optimal hyperparameters. estimate_gps returns S3 object. Internal xgboost approach support verbose parameter. Pseudo-population object now report parameters used best covariate balance.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-027-2022-02-04","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.2.7 (2022-02-04)","title":"CausalGPS 0.2.7 (2022-02-04)","text":"CRAN release: 2022-02-07","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-7","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.7 (2022-02-04)","text":"Naming covariate balance scores.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-7","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.7 (2022-02-04)","text":"Restarting adaptive approach keep trying maximum attempt.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-2-7","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.2.7 (2022-02-04)","text":"Synthetic data (synthetic_us_2010) Check defined covariate balance (absolute_corr_fun, absolute_weighted_corr_fun) Covariate balance threshold type: mean, median, maximal. Improved test coverage. Singularity definition file.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-026-2021-09-06","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.2.6 (2021-09-06)","title":"CausalGPS 0.2.6 (2021-09-06)","text":"CRAN release: 2021-09-06","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-2-6","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.2.6 (2021-09-06)","text":"added status optimized compile generate_pseudo_pop function output. compute_closest_wgps accepts number user-defined threads.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-6","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.6 (2021-09-06)","text":"Vignette file names. trim condition > < >= <=. Removed seed input generate_syn_data function. R package, setting seed value inside function recommended. Users can set seed using function. OpenMP uses user defined number cores.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-6","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.6 (2021-09-06)","text":"Initial covariate balance weighted approach. counter column preallocated correctly. Counter value compiling. initial value set one, , however, zero correct one. Private variable issue OpenMP. Fixed OpenMP option macOS checks.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-025-2021-07-23","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.2.5 (2021-07-23)","title":"CausalGPS 0.2.5 (2021-07-23)","text":"CRAN release: 2021-07-23","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-5","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.5 (2021-07-23)","text":"User needs activate logger","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-5","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.5 (2021-07-23)","text":"CRAN package URLs canonical forms.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-2-4","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.2.4 (2021-07-11)","text":"OpenMP Rcpp code optimized_compile log_system_info() Frequently asked questions logo","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-4","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.4 (2021-07-11)","text":"estimate_gps.Rmd estimate_semi_erf -> estimate_semipmetric_erf estimate_erf -> estimate_npmetric_erf estimate_hr -> estimate_pmetric_erf gen_pseudo_pop -> generate_pseudo_pop gen_syn_data -> generate_syn_data estimate_erf accepts counter input estimate_erf can use multiple cores generating_pseudo_population.Rmd estimate_erf function description estimate_hr function description estimate_semi_erf function description compute_risk function description return value outcome_models.Rmd generate_synthetic_data.Rmd","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-4","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.4 (2021-07-11)","text":"Rcpp parLapply worker processors arguments","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"removed-0-2-4","dir":"Changelog","previous_headings":"","what":"Removed","title":"CausalGPS 0.2.4 (2021-07-11)","text":"running_appr","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-3","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.3 (2021-05-12)","text":"Fixed documentations","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-2-2","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.2.2 (2021-05-12)","text":"estimate_semi_erf estimate_hr","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-2","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.2 (2021-05-12)","text":"Package name: GPSmatching –> CausalGPS","code":""}] +[{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement nkhoshnevis@g.harvard.edu. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.1, available https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. Community Impact Guidelines inspired [Mozilla’s code conduct enforcement ladder][https://github.com/mozilla/inclusion]. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https://www.contributor-covenant.org/translations.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/CausalGPS.html","id":"installation","dir":"Articles","previous_headings":"","what":"Installation","title":"CausalGPS","text":"","code":"library(\"devtools\") install_github(\"NSAPH-Software/CausalGPS\", ref=\"master\") library(\"CausalGPS\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/CausalGPS.html","id":"usage","dir":"Articles","previous_headings":"","what":"Usage","title":"CausalGPS","text":"Input parameters: Y vector observed outcome variable.w vector observed continuous exposure variable.c data.frame matrix observed covariates variable.ci_appr causal inference approach. Possible values : - “matching”: Matching GPS - “weighting”: Weighting GPSgps_density Model density type used estimating GPS value, including normal (default) kernel.use_cov_transform TRUE, function uses transformer meet covariate balance.transformers list transformers. transformer unary function. can pass name customized function quotes. Available transformers: - pow2: power 2 - pow3: power 3bin_seq Sequence w (treatment) generate pseudo population. NULL passed default value used, seq(min(w)+delta_n/2,max(w), =delta_n).exposure_trim_qtls numerical vector two. Represents trim quantile level exposure value. numbers range [0,1] increasing order (default: c(0.01,0.99)). gps_trim_qtls numerical vector two. Represents trim quantile level gps value. numbers range [0,1] increasing order (default: c(0.0, 1.0)).params Includes list params used internally. Unrelated parameters ignored.sl_lib: vector prediction algorithms. nthread integer value represents number threads used internal packages.... Additional arguments passed different models.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/CausalGPS.html","id":"causal-inference-approach-ci-appr","dir":"Articles","previous_headings":"Additional parameters","what":"Causal Inference Approach (ci.appr)","title":"CausalGPS","text":"l1: Manhattan distance matching delta_n: caliper parameter. scale: specified scale parameter control relative weight attributed distance measures exposure versus GPS. ‘absolute’ covar_bl_trs: covariate balance threshold covar_bl_trs_type: covariate balance type (mean, median, maximal) max_attempt: maximum number attempt satisfy covariate balance. See create_matching() details parameters default values. covar_bl_method: Covariate balance method. covar_bl_trs: Covariate balance threshold max_attempt: Maximum number attempt satisfy covariate balance. Generating Pseudo Population matching_fn Manhattan distance matching approach. prediction model use SuperLearner package. SuperLearner supports different machine learning methods packages. params list hyperparameters users can pass third party libraries SuperLearner package. hyperparameters go params list. prefixes used distinguished parameters different libraries. following table shows external package names, equivalent name used sl_lib, prefixes used hyperparameters params list, available hyperparameters. nthread number available threads (cores). XGBoost needs OpenMP installed system parallelize processing. Estimating GPS Estimating Exposure Rate Function Generating Synthetic Data Logging CausalGPS package logging internal activities CausalGPS.log file. file located source file location appended. Users can change logging file name (path) logging threshold. logging mechanism different thresholds (see logger package). two important thresholds INFO DEBUG levels. former, default level, logs general information process. latter, activated, logs detailed information can used debugging purposes.","code":"set.seed(422) n <- 1000 mydata <- generate_syn_data(sample_size = n) year <- sample(x=c(\"2001\", \"2002\", \"2003\", \"2004\", \"2005\"), size = n, replace = TRUE) region <- sample(x=c(\"North\", \"South\", \"East\", \"West\"),size = n, replace = TRUE) mydata$year <- as.factor(year) mydata$region <- as.factor(region) mydata$cf5 <- as.factor(mydata$cf5) pseudo_pop <- generate_pseudo_pop( mydata[, c(\"id\", \"w\")], mydata[, c(\"id\", \"cf1\", \"cf2\", \"cf3\", \"cf4\", \"cf5\", \"cf6\",\"year\",\"region\")], ci_appr = \"matching\", gps_density = \"kernel\", use_cov_transform = TRUE, transformers = list(\"pow2\", \"pow3\", \"abs\", \"scale\"), exposure_trim_qtls = c(0.01,0.99), sl_lib = c(\"m_xgboost\"), covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 4, dist_measure = \"l1\", delta_n = 1, scale = 0.5, nthread = 1) plot(pseudo_pop) data_with_gps <- estimate_gps(w, c, params = list(xgb_max_depth = c(3,4,5), xgb_rounds = c(10,20,30,40)), nthread = 1, sl_lib = c(\"m_xgboost\") ) estimate_npmetric_erf<-function(matched_Y, matched_w, matched_counter = NULL, bw_seq=seq(0.2,2,0.2), w_vals, nthread) syn_data <- generate_syn_data(sample_size=100, outcome_sd = 10, gps_spec = 1, cova_spec = 1)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"environment-setup","dir":"Articles","previous_headings":"","what":"Environment Setup","title":"Developers Guide","text":"order contribute project, better idea local copy CausalGPS Github account. steps: Navigate CausalGPS Github repository, top right corner, click Fork button. add clone project Github account. Open terminal (Gitbash Windows, Anaconda prompt, …) run following command (brackets included): already SSH key, need generate one. Read . Now, can modify codebase track modification. good idea create new branch work codebase. Read following instructions git branching.","code":"git clone git@github.com:[your user name]/CausalGPS.git"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"git-branching-model","dir":"Articles","previous_headings":"","what":"Git Branching Model","title":"Developers Guide","text":"Although, personal repository, can pick branch name, however, order keep consistency also understand working , following convention strongly recommended. project, follow convention proposed Vincent Driessen successful Git branching model post. summary branches: master: master branch hosts released software packages. project maintainers write access master branch. develop: develop branch considered main branch source code HEAD always reflects state latest delivered development changes next release. feature: start new feature branch add new features software. naming convention iss[issue_number]_short_description. example, need add unittest one functions package issue number 12, iss12_add_unittest can valid git branch name. start issue number go back take look issue details necessary. Although feature branches temporary, naming convention helps developers understand situation working codebase. working features open issue , please open issue assign . can also make comment working . hotfix: hotfix branches used fixing bug released package. fixing bug, third digit version number incremented one. example, 2.3.5 –> 2.3.6. branches prefixed hotfix followed upcoming version number (e.g., case, hotfix_2.3.6) release: Release branches support preparation new production release.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"where-to-submit-pull-requests","dir":"Articles","previous_headings":"","what":"Where to submit pull requests?","title":"Developers Guide","text":"pull requests submitted base repository: NSAPH-Software/CausalGPS base: develop branch.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"pull-request-checklist","dir":"Articles","previous_headings":"","what":"Pull request checklist","title":"Developers Guide","text":"Please run devtools::document(), devtools::load_all() final modifications. Make sure modified code passes checks tests (can run devtools::check() RStudio) PR pass CI reviews can merge . Add line(s) modification NEWS.md file. adding new features, please make sure appropriate documentation added updated. Please clean white spaces. Read .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"reporting-bugs","dir":"Articles","previous_headings":"","what":"Reporting bugs","title":"Developers Guide","text":"Please report potential bugs creating new issue sending us email. Please include following information bug report: brief description , expected happen, happened. OS using whether using personal computer HPC cluster. version package installed.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"style-guide","dir":"Articles","previous_headings":"","what":"Style Guide","title":"Developers Guide","text":"project, follow tidyverse style guide.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"names","dir":"Articles","previous_headings":"Style Guide > Summary","what":"Names","title":"Developers Guide","text":"File names snake_case ends .R (e.g., create_matching.R) variable names small letter separate _ need (e.g., delta_n) Function names follow snake_case style (e.g., generate_data) Function names follow verb+output convention (e.g., compute_resid)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"spaces-and-indentation","dir":"Articles","previous_headings":"Style Guide > Summary","what":"Spaces and Indentation","title":"Developers Guide","text":"Indentations two spaces (use tab) Place space around binary operators (e.g., x + y) Place space comma Place space # commenting avoid multiple ### put space opening closing parenthesis Place space () used , , .","code":"#Acceptable: z <- x + y #Not recommended: z<-x+y # (no space) z<- x+y z<-x +y #Acceptable: a <- matrix(c(1:100), nrow = 5) #Not recommended: a <- matrix(c(1:100),nrow = 5) # (no space after comma) a <- matrix( c(1:100), nrow = 5 ) # (extra space after and before parentheses) a<-matrix(c(1:100), nrow = 5) # (no space around unary operator <- ) #Acceptable: # This is a comment #Not recommended: #This is a comment # This is a comment (more than one space after #) ## This is a comment (multiple #) ### This is a comment (multiple # and more than one space) #Acceptable: x <- (z + y) #Not recommended: x <- ( z + y ) # (unnecessary space) x <- (z + y ) x <- ( z + y) #Acceptible if (x > 2) { print(x) } # Not recommended if(x > 2){ print(x) }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"other-notes","dir":"Articles","previous_headings":"Style Guide > Summary","what":"Other notes","title":"Developers Guide","text":"Maximum line length 80 character Use explicit returns Use explicit tags documentation (e.g., @title, @description, …)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"notes-on-superlearner","dir":"Articles","previous_headings":"","what":"Notes on SuperLearner","title":"Developers Guide","text":"package create customized wrapper SuperLearner internal libraries. Please read Notes SL Wrappers details.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Developers-Guide.html","id":"logger","dir":"Articles","previous_headings":"","what":"Logger","title":"Developers Guide","text":"Use logger investigate internal process. default level “INFO”, writes messages “CausalGPS.log” file. can use update_logger function change log file location level.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/ERF-Kernel-Smoothing.html","id":"multiplication-factor-100","dir":"Articles","previous_headings":"","what":"Multiplication factor: 100","title":"ERF Kernel Smoothing","text":"","code":"plot_list_100 <- compare_smooth_methods(100) #> Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0. #> ℹ Please use `linewidth` instead. #> This warning is displayed once every 8 hours. #> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was #> generated. #> [1] \"Max residual for bw = 5e-04 : 0.376724232844119\" #> [1] \"Max residual for bw = 0.001 : 0.34102886655536\" #> [1] \"Max residual for bw = 0.01 : 0.00885525713034725\" #> [1] \"Max residual for bw = 0.1 : 0.0015642091493715\" #> [1] \"Max residual for bw = 1 : 0.000887744632188214\" grid.arrange(grobs = plot_list_100, ncol = 2)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/ERF-Kernel-Smoothing.html","id":"multiplication-factor-1000","dir":"Articles","previous_headings":"","what":"Multiplication factor: 1000","title":"ERF Kernel Smoothing","text":"visualizations clearly illustrate significance multiplication factor diminishes bandwidth value escalates. Therefore, within package, ’ve opted utilize multiplication factor 100. caution employing multiplication factor 1000 potentially trigger memory overflow errors handling medium large datasets. require control multiplication factor, encourage open issue.","code":"plot_list_1000 <- compare_smooth_methods(1000) #> [1] \"Max residual for bw = 5e-04 : 0.37053801414259\" #> [1] \"Max residual for bw = 0.001 : 0.340214416795152\" #> [1] \"Max residual for bw = 0.01 : 0.001086480021527\" #> [1] \"Max residual for bw = 0.1 : 0.00108884634631823\" #> [1] \"Max residual for bw = 1 : 9.28881533373005e-05\" grid.arrange(grobs = plot_list_1000, ncol = 2)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Estimating-GPS.html","id":"available-superlearner-libraries","dir":"Articles","previous_headings":"","what":"Available SuperLearner Libraries","title":"Estimating GPS","text":"users can use library SuperLearner package. However, order control internal libraries generate customized wrappers. following table represents available customized wrappers well hyperparameters.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Estimating-GPS.html","id":"implementation","dir":"Articles","previous_headings":"","what":"Implementation","title":"Estimating GPS","text":"XGBoost ranger libraries developed efficient processing multiple cores. requirement making sure OpenMP installed system. User needs pass number threads (nthread) running estimate_gps function. following section, conduct several analyses test scalability performance. analyses can used rough estimate expect different data sizes computational resources.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/FAQ.html","id":"how-to-define-a-new-transformer","dir":"Articles","previous_headings":"","what":"1) How to define a new transformer?","title":"Frequently Asked Questions","text":"Transformers unary functions applied covariates. example “power 5”. can pass transformers list \"pow5\".","code":"pow5 <- function(x) {x^5}"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/FAQ.html","id":"is-the-order-of-transformers-important","dir":"Articles","previous_headings":"","what":"2) Is the order of transformers important?","title":"Frequently Asked Questions","text":"gen_pseudo_pop function tries transformers covariate balance test met previous attempt. covariate worst balance value chosen apply transformer. first transformer list selected purpose. transformer used specific covariate, next value selected.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/FAQ.html","id":"how-change-the-logger-level","dir":"Articles","previous_headings":"","what":"3) How change the logger level?","title":"Frequently Asked Questions","text":"can use set_logger function set logger_level one “TRACE”, “DEBUG”, “INFO”, “SUCCESS”, “WARN”, “ERROR”, ”FATAL”. package internal information logged INFO DEBUG level. need see new information .log file, please consider opening issue .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/FAQ.html","id":"is-there-any-trade-off-between-number-of-cpu-cores-nthread-and-memory-usage","dir":"Articles","previous_headings":"","what":"4) Is there any trade-off between number of CPU cores (nthread) and memory usage?","title":"Frequently Asked Questions","text":"using spawning mechanism multicore processing. worker processor gets copy required data libraries. case limited available memory large dataset, can reduce number CPU cores (nthread) fit processing system. Following recommendation, processing time increase; however, memory usage decrease.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/FAQ.html","id":"i-am-using-macos-however-i-cannot-see-any-performance-increase-with-increasing-number-of-threads-nthread-","dir":"Articles","previous_headings":"","what":"5) I am using macOS, however, I cannot see any performance increase with increasing number of threads (nthread).","title":"Frequently Asked Questions","text":"Many internal libraries (e.g., XGBoost) dependent OpenMP library parallel computation. Please make sure installed OpenMP library configured correctly. Please see following links details: Installing data.table macOS Installing XGBoost macOS","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/FAQ.html","id":"i-am-running-the-package-on-hpc-however-i-think-the-package-is-using-only-one-core-","dir":"Articles","previous_headings":"","what":"6) I am running the package on HPC; however, I think the package is using only one core.","title":"Frequently Asked Questions","text":"order activate OpenMP HPC, need load required modules. example, using SLURM Cannon Harvard University, need load intel module. Please read .","code":"module load intel/19.0.5-fasrc01 export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"how-to-define-a-new-transformer","dir":"Articles","previous_headings":"","what":"1) How to define a new transformer?","title":"Frequently Asked Questions","text":"Transformers unary functions applied covariates. example “power 5”. can pass transformers list \"pow5\".","code":"pow5 <- function(x) {x^5}"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"is-the-order-of-transformers-important","dir":"Articles","previous_headings":"","what":"2) Is the order of transformers important?","title":"Frequently Asked Questions","text":"gen_pseudo_pop function tries transformers covariate balance test met previous attempt. covariate worst balance value chosen apply transformer. first transformer list selected purpose. transformer used specific covariate, next value selected.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"how-change-the-logger-level","dir":"Articles","previous_headings":"","what":"3) How change the logger level?","title":"Frequently Asked Questions","text":"can use set_logger function set logger_level one “TRACE”, “DEBUG”, “INFO”, “SUCCESS”, “WARN”, “ERROR”, ”FATAL”. package internal information logged INFO DEBUG level. need see new information .log file, please consider opening issue .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"is-there-any-trade-off-between-number-of-cpu-cores-nthread-and-memory-usage","dir":"Articles","previous_headings":"","what":"4) Is there any trade-off between number of CPU cores (nthread) and memory usage?","title":"Frequently Asked Questions","text":"using spawning mechanism multicore processing. worker processor gets copy required data libraries. case limited available memory large dataset, can reduce number CPU cores (nthread) fit processing system. Following recommendation, processing time increase; however, memory usage decrease.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"i-am-using-macos-however-i-cannot-see-any-performance-increase-with-increasing-number-of-threads-nthread-","dir":"Articles","previous_headings":"","what":"5) I am using macOS, however, I cannot see any performance increase with increasing number of threads (nthread).","title":"Frequently Asked Questions","text":"Many internal libraries (e.g., XGBoost) dependent OpenMP library parallel computation. Please make sure installed OpenMP library configured correctly. Please see following links details: Installing data.table macOS Installing XGBoost macOS","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"i-am-running-the-package-on-hpc-however-i-think-the-package-is-using-only-one-core-","dir":"Articles","previous_headings":"","what":"6) I am running the package on HPC; however, I think the package is using only one core.","title":"Frequently Asked Questions","text":"order activate OpenMP HPC, need load required modules. example, using SLURM Cannon Harvard University, need load intel module. Please read .","code":"module load intel/19.0.5-fasrc01 export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"what-is-the-counter_weight-column-in-the-pseudo-population","dir":"Articles","previous_headings":"","what":"7) What is the counter_weight column in the pseudo population?","title":"Frequently Asked Questions","text":"matching weighting approaches find combination original data set pass covariate balance test. case matching, package uses different number data samples. data samples never used; hence counter_weight value 0. data samples probably far common support area, resolution w fine enough. case weighting, inverse probability getting exposure. old versions (ver0.2.9), column counter matching approach ipw weighting approach, respectively.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"is-there-a-public-data-set-that-i-can-test-my-model","dir":"Articles","previous_headings":"","what":"8) Is there a public data set that I can test my model?","title":"Frequently Asked Questions","text":"One can either generate synthetic data using generate_syn_data() function, use synthetic_us_2010 data comes package. datasets mostly L3 data shared public.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"can-a-data-sample-match-with-itself","dir":"Articles","previous_headings":"","what":"9) Can a data sample match with itself?","title":"Frequently Asked Questions","text":"question commonly asked researchers coming matching binary exposures. CausalGPS package (algorithm), exposure level data sample, generate new data sample poses requested exposure level; however, different GPS value. find closest original data (terms w GPS) generated pseudo-data sample. data matched requested exposure level, based original data sample. Therefore context CausalGPS package, correct question.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"where-can-i-get-the-code","dir":"Articles","previous_headings":"","what":"10) Where can I get the code?","title":"Frequently Asked Questions","text":"updated version NSAPH-Software/develop branch latest release NSAPH-Software/master branch.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"how-does-trimming-work","dir":"Articles","previous_headings":"","what":"11) How does trimming work?","title":"Frequently Asked Questions","text":"generate_pseudo_pop() function trims entire data based trimming quantiles. processes (e.g., estimating gps, compiling pseudo population, matching, weighting, …) use trimmed data. Trimming data open research question, many different configurations can considered.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"can-i-use-a-data-with-missing-value","dir":"Articles","previous_headings":"","what":"12) Can I use a data with missing value?","title":"Frequently Asked Questions","text":"Yes. rows missing values eliminated process.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"in-the-matching-approach-i-realized-computation-with-scale-1-is-faster-than-any-other-amount--is-that-correct","dir":"Articles","previous_headings":"","what":"13) In the matching approach, I realized computation with scale = 1 is faster than any other amount. Is that correct?","title":"Frequently Asked Questions","text":"correct. scale 1, compute distance based GPS values. case, algorithm simplified special case average time complexity \\(O(n.log(n))\\) instead \\(O(n^2)\\). Please note still use subset data within caliper boundary matching purposes. result, exposure level matched data valid range.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Frequently-Asked-Questions.html","id":"encountering-an-error-while-executing-the-non-parametric-exposure-response-function-error-in-checkforremoteerrorsval-one-node-produced-an-error-lengthxeval--maxevalpts-is-not-true-","dir":"Articles","previous_headings":"","what":"14) Encountering an error while executing the non-parametric exposure-response function: Error in checkForRemoteErrors(val) : one node produced an error: length(xeval) < .maxEvalPts is not TRUE.","title":"Frequently Asked Questions","text":"issue arises due constraint within locpol package. feasible solution circumnavigate problem install modified version locpol. deviation original package lies augmentation maximum number evaluation points (.maxEvalPts).","code":"remotes::install_github(\"NSAPH-Software/locpol\", reference=\"master\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Generating-Pseudo-Population.html","id":"usage","dir":"Articles","previous_headings":"","what":"Usage","title":"Generating Pseudo Population","text":"Input parameters: w data.frame observed continues exposure, including id w columns. c data frame matrix observed baseline covariates, also includes id column,ci_appr causal inference approach. Options “matching” “weighting”.dist_measure Distance measuring function.scale specified scale parameter control relative weight attributed distance measures exposure versus GPS estimatesdelta_n specified caliper parameter exposurecovar_bl_method specified covariate balance methodcovar_bl_trs specified covariate balance thresholdmax_attempt maximum number attempt satisfy covariate balance","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Generating-Pseudo-Population.html","id":"technical-details-for-matching","dir":"Articles","previous_headings":"","what":"Technical Details for Matching","title":"Generating Pseudo Population","text":"matching algorithm aims match observed unit \\(j\\) \\(j'\\) exposure level \\(w^{(l)}\\). specify delta_n (\\(\\delta_n\\)), caliper exposure level \\(w\\), constitutes equally sized bins, .e., \\([w-\\delta_n, w+\\delta_n]\\). Based caliper delta_n , define predetermined set \\(L\\) exposure levels \\(\\{w^{(1)}=\\min(w)+ \\delta_n,w^{(2)}=\\min(w)+3 \\delta_n,...,w^{(L)} = \\min(w)+(2L-1) \\delta_n\\}\\), \\(L = \\lfloor \\frac{\\max(w)-\\min(w)}{2\\delta_n} + \\frac{1}{2} \\rfloor\\). exposure level \\(w^{(l)}\\) midpoint equally sized bins, \\([w^{(l)}-\\delta_n, w^{(l)}+\\delta_n]\\). implement nested-loop algorithm, \\(l\\) \\(1,2,\\ldots, L\\) outer-loop, \\(j'\\) \\(1 ,\\ldots,N\\) inner-loop. algorithm outputs final product design stage, .e., matched set \\(N\\times L\\) units.\\(l = 1,2,\\ldots, L\\)   Choose one exposure level interest \\(w^{(l)} \\\\{w^{(1)}, w^{(2)}, ..., w^{(L)}\\}\\).   \\(j' = 1 ,\\ldots,N\\)   2.1 Evaluate GPS \\(\\hat{e}(w^{(l)}, \\mathbf{c}_{j'})\\) (short \\(e^{(l)}_{j'}\\)) \\(w^{(l)}\\) based fitted GPS model Step 1 unit \\(j'\\) observed covariates \\(\\mathbf{c}_{j'}\\).   2.2 Implement matching find observed unit – denoted \\(j\\) – matched \\(j'\\) respect exposure \\(w_{j}\\approx w^{(l)}\\) estimated GPS \\(\\hat{e}(w_j, \\mathbf{c}_{j}) \\approx e^{(l)}_{j'}\\) (standardized Euclidean transformation). specifically, find \\(j\\) \\[ j_{{gps}}(e^{(l)}_{j'},w^{(l)})=\\text{arg} \\ \\underset{j: w_j \\[w^{(l)}-\\delta_n,w^{(l)}+\\delta_n]}{\\text{min}} \\ \\mid\\mid( \\lambda \\hat{e}^{*}(w_j,\\mathbf{c}_j), (1-\\lambda)w^{*}_j) -(\\lambda e_{j'}^{(l)*}, (1-\\lambda) w^{(l)*})\\mid\\mid, \\] dist_measure (\\(||.||\\)) pre-specified two-dimensional metric, scale (\\(\\lambda\\)) scale parameter assigning weights corresponding two dimensions (.e., GPS exposure), \\(\\delta\\) caliper defined Step 2 allowing unit \\(j\\) observed exposure \\(w_j \\[w^{(l)}-\\delta,w^{(l)}+\\delta]\\) can get matched.   2.3 Impute \\(Y_{j'}(w^{(l)})\\) : \\(\\hat{Y}_{j'}(w^{(l)})=Y^{obs}_{j_{{gps}}(e^{(l)}_{j'},w^{(l)})}\\).   end end implementing matching algorithm, construct matched set \\(N\\times L\\) units combining \\(\\hat{Y}_{j'}(w^{(l)})\\) \\(j'=1,\\ldots,N\\) \\(w^{(l)} \\\\{w^{(1)},w^{(2)},...,w^{(L)}\\}\\).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Generating-Pseudo-Population.html","id":"technical-details-for-covariate-balance","dir":"Articles","previous_headings":"","what":"Technical Details for Covariate Balance","title":"Generating Pseudo Population","text":"introduce absolute correlation measure (covar_bl_method = “absolute”) assess covariate balance continuous exposures . absolute correlation exposure pre-exposure covariate global measure can inform whether whole matched set balanced. measures build upon work (Austin 2019) examine covariate balance conditions continuous exposures. adapt proposed matching framework. balanced pseudo population dataset, correlations exposure pre-exposure covariates close zero, \\(E [\\mathbf{c}_{}^{*} w_{}^{*} ] \\approx \\mathbf{0}.\\) calculate absolute correlation pseudo population dataset \\[\\begin{align*} \\big\\lvert \\sum_{=1}^{N\\times L} \\mathbf{c}_{}^{*} w_{}^{*} \\big\\lvert \\end{align*}\\] average absolute correlations defined average absolute correlations among covariates. Average absolute correlation: \\[\\begin{align*} \\overline{\\big\\lvert \\sum_{=1}^{N\\times L} \\mathbf{c}_{}^{*} w_{}^{*} \\big\\lvert} < \\boldsymbol{\\epsilon}_1. \\end{align*}\\] specify pre-specified threshold covar_bl_trs (\\(\\boldsymbol{\\epsilon}_1\\)), example 0.1, average absolute correlation threshold covariate balance pseudo population dataset.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Generating-Synthetic-Data.html","id":"usage","dir":"Articles","previous_headings":"","what":"Usage","title":"Generate Synthetic Data","text":"Input parameters: sample_size Number data samples seed seed R’s random number generator outcome_sd Standard deviation used generate outcome gps_spec numerical value (1-7) indicates GPS model used generate synthetic data. See following section details. cova_spec numerical value (1-2) modify covariates. See code details.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Generating-Synthetic-Data.html","id":"technical-details-for-data-generating-process","dir":"Articles","previous_headings":"","what":"Technical Details for Data Generating Process","title":"Generate Synthetic Data","text":"generate six confounders \\((C_1,C_2,...,C_6)\\), include combination continuous categorical variables, \\[\\begin{align*} C_1,\\ldots,C_4 \\sim N(0,\\boldsymbol{}_4), C_5 \\sim U\\{-2,2\\}, C_6 \\sim U(-3,3), \\end{align*}\\] generate \\(W\\) using six specifications generalized propensity score model, \\(W = 9 \\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\} +17 + N(0,5)\\) \\(W = 15\\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\} + 22 + T(2)\\) \\(W = 9 \\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\} + 3/2 C_3^2 + 15 + N(0,5)\\) \\(W = \\frac{49 \\exp(\\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\})}{1+ \\exp(\\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\})} -6 + N(0,5)\\) \\(W = \\frac{42}{1+ \\exp(\\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\})} - 18 + N(0,5)\\) \\(W = 7 \\text{log} ( \\{-0.8+ (0.1,0.1,-0.1,0.2,0.1,0.1) \\boldsymbol{C}\\}) + 13 + N(0,4)\\) generate \\(Y\\) outcome model assumed cubical function \\(W\\) additive terms confounders interactions \\(W\\) confounders \\(\\mathbf{C}\\), \\[Y | W, \\mathbf{C} \\sim N\\{\\mu(W, \\mathbf{C}),\\text{sd}^2\\}\\] \\[\\mu(W, \\mathbf{C}) = -10 - (2, 2, 3, -1,2,2)\\mathbf{C} - W(0.1 - 0.1C_1 + 0.1C_4 + 0.1C_5 + 0.1C_3^2) + 0.13^2W^3\\]","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Singularity-Image.html","id":"setting-up-the-environment","dir":"Articles","previous_headings":"","what":"Setting up the environment","title":"Singularity","text":"order build singularity image, need singularity installed system, need root privilege build image. sufficient instructions (example, ). can also use Sylab Remote Builder services.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Singularity-Image.html","id":"definition-file","dir":"Articles","previous_headings":"","what":"Definition File","title":"Singularity","text":"Definition File (CausalGPS_rstudio.def) recipe building image. Please note build upon [rocker/rstudio:4.0.4] image. details generating Definition File, please refer Singularity User Guide.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Singularity-Image.html","id":"building-singularity-image","dir":"Articles","previous_headings":"","what":"Building Singularity Image","title":"Singularity","text":"build image, download Definition File (CausalGPS_rstudio.def) run following: Running command generate Singularity image (CausalGPS_rstudio.sif). can double-check CausalGPS package version running image using following command: result following format:","code":"$ sudo singularity build CausalGPS_rstudio.sif CausalGPS_rstudio.def singularity run CausalGPS_rstudio.sif Container was created Thu 03 Feb 2022 07:54:45 PM UTC CausalGPS package installed (ver: [1] ‘0.2.6.9000’)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Singularity-Image.html","id":"run-an-r-session","dir":"Articles","previous_headings":"","what":"Run an R Session","title":"Singularity","text":"want use R console, can follow steps: Run shell command image run R. provide following results activate R. Now, can run R command. example:","code":"singularity shell CausalGPS_rstudio.sif Singularity> R R version 4.0.4 (2021-02-15) -- \"Lost Library Book\" Copyright (C) 2021 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > utils::packageVersion(\"CausalGPS\") # [1] ‘0.2.6.9000’"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Singularity-Image.html","id":"run-a-rstudio-session","dir":"Articles","previous_headings":"","what":"Run a Rstudio Session","title":"Singularity","text":"can also open RStudio session browser following steps mentioned Rocker Project (Singularity). Open browser enter URL:","code":"mkdir -p run var-lib-rstudio-server printf 'provider=sqlite\\ndirectory=/var/lib/rstudio-server\\n' > database.conf singularity exec --bind run:/run,var-lib-rstudio-server:/var/lib/rstudio-server,database.conf:/etc/rstudio/database.conf CausalGPS_rstudio.sif rserver --www-address=127.0.0.1 127.0.0.1:8787"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"load-data-and-preprocessing","dir":"Articles","previous_headings":"","what":"Load Data and Preprocessing","title":"Synthetic Medicare Data","text":"","code":"data(\"synthetic_us_2010\") data <- synthetic_us_2010 knitr::kable(head((data))) # transformers pow2 <- function(x) {x^2} pow3 <- function(x) {x^3} clog <- function(x) log(x+0.001) confounders <- names(data) confounders <- confounders[!(confounders %in% c(\"FIPS\",\"Name\",\"STATE\", \"STATE_CODE\",\"cms_mortality_pct\", \"qd_mean_pm25\"))]"},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"scenario-1","dir":"Articles","previous_headings":"Examples of Generating Pseudo Population","what":"Scenario 1","title":"Synthetic Medicare Data","text":"Causal Inference: Matching GPS model: Parametric Optimized_compile: True","code":"confounders_s1 <- c(\"cs_poverty\",\"cs_hispanic\", \"cs_black\", \"cs_ed_below_highschool\", \"cs_median_house_value\", \"cs_population_density\", \"cdc_mean_bmi\",\"cdc_pct_nvsmoker\", \"gmet_mean_summer_tmmx\", \"gmet_mean_summer_rmx\", \"gmet_mean_summer_sph\", \"cms_female_pct\", \"region\" ) study_data <- data[, c(\"qd_mean_pm25\", confounders, \"cms_mortality_pct\")] study_data$id <- seq_along(1:nrow(study_data)) study_data$region <- as.factor(study_data$region) study_data$cs_PIR <- study_data$cs_median_house_value/study_data$cs_household_income # Choose subset of data q1 <- stats::quantile(study_data$qd_mean_pm25, 0.25) q2 <- stats::quantile(study_data$qd_mean_pm25, 0.99) trimmed_data <- subset(study_data[stats::complete.cases(study_data) ,], qd_mean_pm25 <= q2 & qd_mean_pm25 >= q1) trimmed_data$gmet_mean_summer_sph <- pow2(trimmed_data$gmet_mean_summer_sph) set.seed(172) pseudo_pop_1 <- generate_pseudo_pop(trimmed_data[, c(\"id\", \"qd_mean_pm25\")], trimmed_data[, c(\"id\", confounders_s1)], ci_appr = \"matching\", gps_density = \"normal\", bin_seq = NULL, exposure_trim_qtls = c(0.0 , 1.0), use_cov_transform = TRUE, transformers = list(\"pow2\",\"pow3\",\"clog\"), sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(17), xgb_eta=c(0.28)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 0.1, scale = 1) #> mean absolute correlation: 0.150596118336646| Covariate balance threshold: 0.1 #> Loading required package: nnls #> mean absolute correlation: 0.0466272611362718| Covariate balance threshold: 0.1 #> Covariate balance condition has been met (iteration: 1/1) #> Best mean absolute correlation: 0.0466272611362718| Covariate balance threshold: 0.1 plot(pseudo_pop_1)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"scenario-2","dir":"Articles","previous_headings":"Examples of Generating Pseudo Population","what":"Scenario 2","title":"Synthetic Medicare Data","text":"Causal Inference: Matching GPS model: Parametric Optimized_compile: False","code":"set.seed(172) pseudo_pop_2 <- generate_pseudo_pop(trimmed_data[, c(\"id\", \"qd_mean_pm25\")], trimmed_data[, c(\"id\", confounders_s1)], ci_appr = \"matching\", gps_density = \"normal\", bin_seq = NULL, exposure_trim_qtls = c(0.0 , 1.0), use_cov_transform = TRUE, transformers = list(\"pow2\",\"pow3\",\"clog\"), sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(17), xgb_eta=c(0.28)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 0.1, scale = 1) #> mean absolute correlation: 0.150596118336646| Covariate balance threshold: 0.1 #> mean absolute correlation: 0.0466272611362718| Covariate balance threshold: 0.1 #> Covariate balance condition has been met (iteration: 1/1) #> Best mean absolute correlation: 0.0466272611362718| Covariate balance threshold: 0.1 plot(pseudo_pop_2) optimized_data_1 <- pseudo_pop_1$pseudo_pop[,c(\"qd_mean_pm25\",\"gps\",\"counter_weight\")] nonoptimized_data_2 <- pseudo_pop_2$pseudo_pop[,c(\"qd_mean_pm25\",\"gps\",\"counter_weight\")] print(paste(\"Number of rows of data in the optimized approach: \", nrow(optimized_data_1))) #> [1] \"Number of rows of data in the optimized approach: 2300\" print(paste(\"Number of rows of data in the non-optimized approach: \", nrow(nonoptimized_data_2))) #> [1] \"Number of rows of data in the non-optimized approach: 2300\" print(paste(\"Sum of data samples in the optimized approach: \", sum(optimized_data_1$counter_weight))) #> [1] \"Sum of data samples in the optimized approach: 140300\" print(paste(\"Number of data in the non-optimized approach: \", length(nonoptimized_data_2$qd_mean_pm25))) #> [1] \"Number of data in the non-optimized approach: 2300\" # Replicate gps values of optimized approach expanded_opt_data_1 <- optimized_data_1[rep(seq_len(nrow(optimized_data_1)), optimized_data_1$counter_weight), 1:3] exp_gps_a_1 <- expanded_opt_data_1$gps gps_b_1 <- nonoptimized_data_2$gps differences <- sort(gps_b_1) - sort(exp_gps_a_1) print(paste(\"Sum of differences in gps values between optimized and \", \"non-optimized approaches is: \", sum(differences))) #> [1] \"Sum of differences in gps values between optimized and non-optimized approaches is: 38958.9033869061\""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"scenario-3","dir":"Articles","previous_headings":"Examples of Generating Pseudo Population","what":"Scenario 3","title":"Synthetic Medicare Data","text":"Causal Inference: Matching GPS model: Non-Parametric Optimized_compile: True","code":"trimmed_data <- subset(study_data[stats::complete.cases(study_data) ,], qd_mean_pm25 <= q2 & qd_mean_pm25 >= q1) set.seed(8967) pseudo_pop_3 <- generate_pseudo_pop(trimmed_data[, c(\"id\", \"qd_mean_pm25\")], trimmed_data[, c(\"id\", confounders_s1)], ci_appr = \"matching\", gps_density = \"kernel\", bin_seq = NULL, exposure_trim_qtls = c(0.0 , 1.0), use_cov_transform = TRUE, transformers = list(\"pow2\",\"pow3\",\"clog\"), sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(12), xgb_eta=c(0.1)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 0.1, scale = 1) #> mean absolute correlation: 0.150596118336646| Covariate balance threshold: 0.1 #> mean absolute correlation: 0.0521458538948391| Covariate balance threshold: 0.1 #> Covariate balance condition has been met (iteration: 1/1) #> Best mean absolute correlation: 0.0521458538948391| Covariate balance threshold: 0.1 plot(pseudo_pop_3)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"scenario-4","dir":"Articles","previous_headings":"Examples of Generating Pseudo Population","what":"Scenario 4","title":"Synthetic Medicare Data","text":"Causal Inference: Weighting GPS model: Parametric Optimized_compile: N/","code":"trimmed_data <- subset(study_data[stats::complete.cases(study_data) ,], qd_mean_pm25 <= q2 & qd_mean_pm25 >= q1) trimmed_data$cs_poverty <- pow2(trimmed_data$cs_poverty) set.seed(672) pseudo_pop_4 <- generate_pseudo_pop(trimmed_data[, c(\"id\", \"qd_mean_pm25\")], trimmed_data[, c(\"id\", confounders_s1)], ci_appr = \"weighting\", gps_density = \"normal\", bin_seq = NULL, exposure_trim_qtls = c(0.0 , 1.0), use_cov_transform = TRUE, transformers = list(\"pow2\",\"pow3\",\"clog\"), sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(35), xgb_eta=c(0.14)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 0.1, scale = 1) #> mean absolute correlation: 0.150596118336646| Covariate balance threshold: 0.1 #> mean absolute correlation: 0.532572233294456| Covariate balance threshold: 0.1 #> Covariate balance condition has not been met. #> Best mean absolute correlation: 0.532572233294456| Covariate balance threshold: 0.1 plot(pseudo_pop_4)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"covariate-balance","dir":"Articles","previous_headings":"","what":"Covariate Balance","title":"Synthetic Medicare Data","text":"previous examples, passed specific parameters estimating GPS values. Achieving acceptable covariate balance can computed searching appropriate parameters might simple task. package uses transformers features get acceptable covariate balance. following parameters directly related searching acceptable covariate balance. covar_bl_trs: acceptable threshold stop searching. can computed either mean, median, maximal value features correlation, defined covar_bl_trs_type. params: different iterations, choose parameter random provided list. example, xgb_nrounds=seq(1,100) parameters, nround parameter xgboost trainer selected number 1 100 random, iteration. transformers: iteration, choose feature highest correlation apply transformer provided list. transformers applied feature reapplying transformer feature. max_attempt: Number test iteration. covar_bl_trs met, search stop max_attempt iteration return best found population.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Synthetic-Medicare.html","id":"scenario-5","dir":"Articles","previous_headings":"Covariate Balance","what":"Scenario 5","title":"Synthetic Medicare Data","text":"Causal Inference: Matching + searching acceptable covariate balance GPS model: Non-Parametric Optimized_compile: True Search domain: transformers: pow2, pow3, clog. nround xgboost: 10-100. eta xgboost: 0.1-0.5. max_attempt: 5. covar_bl_trs: 0.08. covar_bl_trs_type: mean example, 5 attempts, find pseudo population can satisfy covariate balance test.","code":"trimmed_data <- subset(study_data[stats::complete.cases(study_data) ,], qd_mean_pm25 <= q2 & qd_mean_pm25 >= q1) set.seed(328) pseudo_pop_5 <- generate_pseudo_pop(trimmed_data[, c(\"id\", \"qd_mean_pm25\")], trimmed_data[, c(\"id\", confounders_s1)], ci_appr = \"matching\", gps_density = \"kernel\", bin_seq = NULL, exposure_trim_qtls = c(0.0 , 1.0), use_cov_transform = TRUE, transformers = list(\"pow2\",\"pow3\",\"clog\"), sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=seq(10, 100, 1), xgb_eta=seq(0.1,0.5,0.01)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.08, covar_bl_trs_type = \"mean\", max_attempt = 5, dist_measure = \"l1\", delta_n = 0.1, scale = 1) #> mean absolute correlation: 0.150596118336646| Covariate balance threshold: 0.08 #> mean absolute correlation: 0.123983603260029| Covariate balance threshold: 0.08 #> mean absolute correlation: 0.200346741127591| Covariate balance threshold: 0.08 #> mean absolute correlation: 0.165910759386325| Covariate balance threshold: 0.08 #> mean absolute correlation: 0.160872521798462| Covariate balance threshold: 0.08 #> mean absolute correlation: 0.180468747869512| Covariate balance threshold: 0.08 #> Covariate balance condition has not been met. #> Best mean absolute correlation: 0.123983603260029| Covariate balance threshold: 0.08 plot(pseudo_pop_5)"},{"path":[]},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"installing-the-package","dir":"Articles","previous_headings":"Getting the Code","what":"Installing the Package","title":"Testing the Package","text":"Use devtools::install_github install package. specify ref, install master (main) branch. master branch hosts latest released code. latest updates committed develop branch. details please refer Git Branching Model Developers Guide section. process run smoothly. Try ?CausalGPS. open package description page help tab (assuming using RStudio).","code":"library(devtools) try(detach(\"package:CausalGPS\", unload = TRUE), silent = TRUE) # if already you have the package, detach and unload it, to have a new install. install_github(\"NSAPH-Software/CausalGPS\", ref=\"develop\") library(CausalGPS)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"cloning-the-package","dir":"Articles","previous_headings":"Getting the Code","what":"Cloning the Package","title":"Testing the Package","text":"Go package Github repository, top left (), choose branch want clone, click Code button (B), choose Download ZIP. following figure shows buttons’ location. cloning code, open one files using RStudio, change project directory project directory (Session > Set Working Directory > Project Directory).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"forking-the-package","dir":"Articles","previous_headings":"Getting the Code","what":"Forking the package","title":"Testing the Package","text":"Forking explained Contribution page.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"package-development-test-check-cycle","dir":"Articles","previous_headings":"","what":"Package development, test, check cycle","title":"Testing the Package","text":"commands need use testing debugging package. can read commands R Packages book. debugging testing, need know steps. list commands need: document() change Roxygen Skeleton (e.g., added new argument function, improved example), run documents(). make sure internal documentation updated. test() runs tests located inside tests/testthat folder. modification code followed running test() make sure breaking existing functionality. check() checks many features (e.g., whether package can installed without problem). need run check() frequently; however, suggest running get code committing make sure errors, warnings, notes. load_all() program source code different one loaded memory (read ). modify part code, need load memory takes latest modifications effect. Run load_all() modification testing. install() cases load_all() sufficient. However, sometimes links package components broken. especially happens significantly change part code, pass tests. cases, may need run install().","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"running-examples","dir":"Articles","previous_headings":"","what":"Running Examples","title":"Testing the Package","text":"can use causal inference studies data test package. database needs following attributes: Y: Output value w: Treatment C: covariate matrix package can generate synthetic data can used test different features package. current implementation, code generates synthetic numerical data; however, small innovation, one can add categorical data. following, present reproducible examples can copy build upon .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"generating-synthetic-data","dir":"Articles","previous_headings":"Running Examples","what":"Generating Synthetic Data","title":"Testing the Package","text":"","code":"library(\"CausalGPS\") mydata <- generate_syn_data(sample_size = 10000) str(mydata) #'data.frame': 10000 obs. of 8 variables: # $ Y : num -17 3.66 -45.88 -12.12 2.75 ... # $ treat: num 9.74 14.88 5.22 10.19 16.65 ... # $ cf1 : num -0.128 0.155 -1.271 0.551 0.846 ... # $ cf2 : num 0.2376 0.0466 0.8918 -1.8434 -2.4487 ... # $ cf3 : num 1.5492 -0.4453 0.0718 0.8309 0.6749 ... # $ cf4 : num 1.3738 0.8621 0.4735 0.7013 -0.0851 ... # $ cf5 : num -2 2 1 -2 0 1 1 2 -2 -1 ... # $ cf6 : num -1.794 -1.822 0.79 -0.591 2.673 ..."},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"estimating-gps-values-for-the-dataset","dir":"Articles","previous_headings":"Running Examples","what":"Estimating GPS Values for the Dataset","title":"Testing the Package","text":"following example, first, generate 10000 synthetic data samples, feed estimate_gps function estimate GPS values. Please note Y variable used inside code, provided cbind generated GPS values. can read different arguments documentation (?estimate_gps). summary, - want run code using SuperLearner (sl) prediction model. Inside SuperLearner package, want use XGBoost package. know, internally generate customized wrapper XGBoost package; thus, correct way activate passing m_xgboost, stands modified xgboost. - requested one thread (nthread = 1); can use much want; package use available one ignore rest . XGBoost uses OpenMP backend use cores. Sometimes becomes really big challenge Mac systems. using Mac see performance improvement, aware . - params, passed list parameters; function choose one list random generate customize wrapper based . want use specific value, just give list one number (e.g., xgb_max_depth = c(3)). parameters start xgb_ change XGBoost hyperparameters. Now, let’s add categorical data. Let’s say data belongs 5 different years (2000 observations per year), year data 4 different regions, including North, South, East, West.","code":"library(\"CausalGPS\") mydata <- generate_syn_data(sample_size = 10000) data_with_gps <- estimate_gps(mydata[, c(\"id\", \"Y\")], mydata[, c(\"id\", w\")], mydata[, c(\"id\", \"cf1\", \"cf2\", \"cf3\", \"cf4\",\"cf5\",\"cf6\")], params = list(xgb_max_depth = c(3,4,5), xgb_nrounds=c(10,20,30,40,50,60)), nthread = 1, sl_lib = c(\"m_xgboost\") ) library(\"CausalGPS\") mydata <- generate_syn_data(sample_size = 10000) year <- c(rep(c(\"2001\"), each=2000), rep(c(\"2002\"), each=2000), rep(c(\"2003\"), each=2000), rep(c(\"2004\"), each=2000), rep(c(\"2005\"), each=2000)) region <- rep(c(rep(\"North\",each=500), rep(\"South\",each=500), rep(\"East\",each=500), rep(\"West\",each=500)), each=5) mydata$year <- as.factor(year) mydata$region <- as.factor(region) data_with_gps <- estimate_gps(mydata[, c(\"id\", \"Y\")], mydata[, c(\"id\", \"w\")], mydata[, c(\"id\", \"cf1\", \"cf2\", \"cf3\", \"cf4\", \"cf5\", \"cf6\", \"year\", \"region\")], params = list(xgb_max_depth = c(3,4,5), xgb_nrounds=c(10,20,30,40,50,60)), nthread = 1, sl_lib = c(\"m_xgboost\") )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"generating-pseudo-population","dir":"Articles","previous_headings":"Running Examples","what":"Generating Pseudo Population","title":"Testing the Package","text":"Generating pseudo population (gen_pseudo_pop())one important parts package. internally uses estimate_gps() package. acceptable pseudo population pass covariate balance test. Users choose test threshold, many attempts. covariate balance test met, function stops trying returns generated population. However, pass test, still returns generated message user indicating population pass test. iteration, change hyperparameters modify GPS values (better worse) pass covariate balance test. estimating GPS values, need compile population. three major approaches compile pseudo population, including: Matching Adjusting (implemented) Weighting (implemented) Among different methods testing covariate balance test, absolute approach implemented. second causal inference approach weighting. example generate pseudo population using weighting approach.","code":"library(\"CausalGPS\") mydata <- generate_syn_data(sample_size = 10000) pseudo_pop <- generate_pseudo_pop(mydata[, c(\"id\", \"Y\")], mydata[, c(\"id\", \"w\")], mydata[,c(\"id\", \"cf1\", \"cf2\", \"cf3\", \"cf4\", \"cf5\", \"cf6\")], ci_appr = \"matching\", sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(10,20,30), xgb_eta=c(0.1,0.2,0.3)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type= \"mean\", max_attempt = 1, dist_measure = \"matching_fn\", delta_n = 1, scale = 0.5) mydata <- generate_syn_data(sample_size = 10000) year <- c(rep(c(\"2001\"), each=2000), rep(c(\"2002\"), each=2000), rep(c(\"2003\"), each=2000), rep(c(\"2004\"), each=2000), rep(c(\"2005\"), each=2000)) region <- rep(c(rep(\"North\",each=500), rep(\"South\",each=500), rep(\"East\",each=500), rep(\"West\",each=500)), each=5) mydata$year <- as.factor(year) mydata$region <- as.factor(region) pseudo_pop <- generate_pseudo_pop(mydata[, c(\"id\", \"Y\")], mydata[, c(\"id\", \"w\")], mydata[, c(\"id\", \"cf1\", \"cf2\", \"cf3\", \"cf4\",\"cf5\",\"cf6\", \"year\",\"region\")], ci_appr = \"weighting\", sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(10,20,30), xgb_eta=c(0.1,0.2,0.3)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", max_attempt = 1 )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"further-processing","dir":"Articles","previous_headings":"Running Examples","what":"Further Processing","title":"Testing the Package","text":"generating pseudo population, can process data different purposes. far, estimating exposure rate function (estimate_erf) implemented.","code":"# library(\"CausalGPS\") mydata <- generate_syn_data(sample_size = 10000) pseudo_pop <- generate_pseudo_pop(mydata[, c(\"id\", \"Y\")], mydata[, c(\"id\", \"w\")], mydata[, c(\"id\", \"cf1\",\"cf2\",\"cf3\",\"cf4\",\"cf5\",\"cf6\")], ci_appr = \"matching\", sl_lib = c(\"m_xgboost\"), params = list(xgb_nrounds=c(10,20,30), xgb_eta=c(0.1,0.2,0.3)), nthread = 1, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type= \"mean\", max_attempt = 1, dist_measure = \"l1\", delta_n = 1, scale = 0.5) erf_val <- estimate_npmetric_erf(pseudo_pop$pseudo_pop$Y, pseudo_pop$pseudo_pop$w, bw_seq=seq(0.2,2,0.2), w_vals = seq(2,20,0.5))"},{"path":"https://NSAPH-Software.github.io/CausalGPS/articles/Testing-the-Package.html","id":"steps-for-using-precomputed-data-during-the-test","dir":"Articles","previous_headings":"","what":"Steps for using precomputed data during the test","title":"Testing the Package","text":"package tested different data samples, generated testing, others generated just loaded. data located “R/sysdata.rda” file. add new features code, may need use external pre-computed data set test functions. following, explain steps append data “R/sysdata.rda”. Please note CRAN might reject large data sets. Step 1: Run check() make sure file -satisfies test requirements. raises error, warning, note, please address modifying data. rare cases, check() pass successfully, however, test() . sufficient changing data; however, need address submitting pull request. Step 2: Create backup data current data. Step 3: Clean Global environment Step 4: Load current data store names Step 5: Generate data (mydata) make sure add steps reproduce data comment test file. Step 6: Add new data name list_names. Please note quotes. need add data, just name. Step 7: Save data. Step 8: Run check()/test() make sure passes tests. pass tests, address problem. Step 9: successful check()/pass() remove backup file.","code":"# in terminal cp R/sysdata.rda R/sysdata_backup.rda rm(list=ls()) load(\"R/sysdata.rd\") list_names <- ls() list_names <- c(list_names, \"mydata\") save(list=list_names, file=\"R/sysdata.rda\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Naeem Khoshnevis. Author, maintainer. HUIT Xiao Wu. Author. CUMC Danielle Braun. Author. HSPH","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Khoshnevis N, Wu X, Braun D (2023). “CausalGPS: R Package Causal Inference Continuous Exposures.” doi:10.48550/arXiv.2310.00561, R package version 0.4.1, 2310.00561.","code":"@Misc{, title = {CausalGPS: An R Package for Causal Inference With Continuous Exposures}, author = {Naeem Khoshnevis and Xiao Wu and Danielle Braun}, note = {R package version 0.4.1}, year = {2023}, eprint = {2310.00561}, archiveprefix = {arXiv}, primaryclass = {stat.CO}, doi = {10.48550/arXiv.2310.00561}, }"},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/index.html","id":"summary","dir":"","previous_headings":"","what":"Summary","title":"Implementing matching, and weighting on GPS with continuous exposures.","text":"R package implementing matching, weighting generalized propensity scores continuous exposures. developed innovative approach estimating causal effects using observational data settings continuous exposures, introduce new framework GPS caliper matching jointly matches estimated GPS exposure levels fully adjust confounding bias.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/index.html","id":"estimating-gps","dir":"","previous_headings":"Features","what":"Estimating GPS","title":"Implementing matching, and weighting on GPS with continuous exposures.","text":"generalized propensity scores computed using various parametric /non-parametric models. generalized propensity scores used following causal inference approaches.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/index.html","id":"generating-pseudo-population","dir":"","previous_headings":"Features","what":"Generating Pseudo Population","title":"Implementing matching, and weighting on GPS with continuous exposures.","text":"Pseudo population dataset computed based user-defined causal inference approaches (e.g., matching weighting). covariate balance test performed pseudo population dataset. Users can specify covariate balance criteria activate adaptive approach number attempts search target pseudo population dataset meets covariate balance criteria.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/index.html","id":"outcome-models","dir":"","previous_headings":"Features","what":"Outcome Models","title":"Implementing matching, and weighting on GPS with continuous exposures.","text":"Several outcome models can achieved using generated pseudo population dataset. Users can specify non-/semi-parametric models obtain exposure-response curves parametric models obtain regression coefficients interest.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/index.html","id":"acknowledgments","dir":"","previous_headings":"Features > Outcome Models","what":"Acknowledgments","title":"Implementing matching, and weighting on GPS with continuous exposures.","text":"Funding provided Health Effects Institute grant 4953-RFA14-3/16-4, Environmental Protection Agency grant 83587201-0, National Institute Health grants R01 ES026217, R01 MD012769, R01 ES028033, 1R01 ES030616, 1R01 AG066793-01R01, 1R01 ES029950, R01 ES028033-S1, Alfred P. Sloan Foundation grant G-2020-13946.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/CausalGPS-package.html","id":null,"dir":"Reference","previous_headings":"","what":"The 'CausalGPS' package. — CausalGPS-package","title":"The 'CausalGPS' package. — CausalGPS-package","text":"R package implementing matching weighting generalized propensity scores continuous exposures.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/CausalGPS-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"The 'CausalGPS' package. — CausalGPS-package","text":"developed innovative approach estimating causal effects using observational data settings continuous exposures, introduce new framework GPS caliper matching.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/CausalGPS-package.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"The 'CausalGPS' package. — CausalGPS-package","text":"Wu, X., Mealli, F., Kioumourtzoglou, M.., Dominici, F. Braun, D., 2022. Matching generalized propensity scores continuous exposures. Journal American Statistical Association, pp.1-29. Kennedy, E.H., Ma, Z., McHugh, M.D. Small, D.S., 2017. Non-parametric methods doubly robust estimation continuous treatment effects. Journal Royal Statistical Society. Series B (Statistical Methodology), 79(4), pp.1229-1245.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/CausalGPS-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"The 'CausalGPS' package. — CausalGPS-package","text":"Naeem Khoshnevis Xiao Wu Danielle Braun","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_corr_fun.html","id":null,"dir":"Reference","previous_headings":"","what":"Check covariate balance using absolute approach — absolute_corr_fun","title":"Check covariate balance using absolute approach — absolute_corr_fun","text":"Checks covariate balance based absolute correlations given data sets.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_corr_fun.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check covariate balance using absolute approach — absolute_corr_fun","text":"","code":"absolute_corr_fun(w, c)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_corr_fun.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check covariate balance using absolute approach — absolute_corr_fun","text":"w vector observed continuous exposure variable. c data.frame observed covariates variable.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_corr_fun.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check covariate balance using absolute approach — absolute_corr_fun","text":"function returns list including: absolute_corr: absolute correlations pre-exposure covariates; mean_absolute_corr: average absolute correlations pre-exposure covariates.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_corr_fun.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Check covariate balance using absolute approach — absolute_corr_fun","text":"","code":"set.seed(291) n <- 100 mydata <- generate_syn_data(sample_size=100) year <- sample(x=c(\"2001\",\"2002\",\"2003\",\"2004\",\"2005\"),size = n, replace = TRUE) region <- sample(x=c(\"North\", \"South\", \"East\", \"West\"),size = n, replace = TRUE) mydata$year <- as.factor(year) mydata$region <- as.factor(region) mydata$cf5 <- as.factor(mydata$cf5) cor_val <- absolute_corr_fun(mydata[,2], mydata[, 3:length(mydata)]) print(cor_val$mean_absolute_corr) #> [1] 0.1760572"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_weighted_corr_fun.html","id":null,"dir":"Reference","previous_headings":"","what":"Check Weighted Covariate Balance Using Absolute Approach — absolute_weighted_corr_fun","title":"Check Weighted Covariate Balance Using Absolute Approach — absolute_weighted_corr_fun","text":"Checks covariate balance based absolute weighted correlations given data sets.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_weighted_corr_fun.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check Weighted Covariate Balance Using Absolute Approach — absolute_weighted_corr_fun","text":"","code":"absolute_weighted_corr_fun(w, vw, c)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_weighted_corr_fun.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check Weighted Covariate Balance Using Absolute Approach — absolute_weighted_corr_fun","text":"w vector observed continuous exposure variable. vw vector weights. c data.table observed covariates variable.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_weighted_corr_fun.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check Weighted Covariate Balance Using Absolute Approach — absolute_weighted_corr_fun","text":"function returns list saved measure related covariate balance absolute_corr: absolute correlations pre-exposure covairates; mean_absolute_corr: average absolute correlations pre-exposure covairates.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/absolute_weighted_corr_fun.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Check Weighted Covariate Balance Using Absolute Approach — absolute_weighted_corr_fun","text":"","code":"set.seed(639) n <- 100 mydata <- generate_syn_data(sample_size=100) year <- sample(x=c(\"2001\",\"2002\",\"2003\",\"2004\",\"2005\"),size = n, replace = TRUE) region <- sample(x=c(\"North\", \"South\", \"East\", \"West\"),size = n, replace = TRUE) mydata$year <- as.factor(year) mydata$region <- as.factor(region) mydata$cf5 <- as.factor(mydata$cf5) cor_val <- absolute_weighted_corr_fun(mydata[,2], runif(n), mydata[, 3:length(mydata)]) print(cor_val$mean_absolute_corr) #> [1] 0.1409821"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_cw.html","id":null,"dir":"Reference","previous_headings":"","what":"A helper function for cgps_cw object — autoplot.cgps_cw","title":"A helper function for cgps_cw object — autoplot.cgps_cw","text":"helper function plot cgps_cw object using ggplot2 package.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_cw.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A helper function for cgps_cw object — autoplot.cgps_cw","text":"","code":"# S3 method for cgps_cw autoplot(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_cw.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A helper function for cgps_cw object — autoplot.cgps_cw","text":"object cgps_cw object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_cw.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A helper function for cgps_cw object — autoplot.cgps_cw","text":"Returns ggplot object.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"A helper function for cgps_erf object — autoplot.cgps_erf","title":"A helper function for cgps_erf object — autoplot.cgps_erf","text":"helper function plot cgps_erf object using ggplot2 package.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A helper function for cgps_erf object — autoplot.cgps_erf","text":"","code":"# S3 method for cgps_erf autoplot(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A helper function for cgps_erf object — autoplot.cgps_erf","text":"object cgps_erf object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A helper function for cgps_erf object — autoplot.cgps_erf","text":"Returns ggplot object.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_gps.html","id":null,"dir":"Reference","previous_headings":"","what":"A helper function for cgps_gps object — autoplot.cgps_gps","title":"A helper function for cgps_gps object — autoplot.cgps_gps","text":"helper function plot cgps_gps object using ggplot2 package.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_gps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A helper function for cgps_gps object — autoplot.cgps_gps","text":"","code":"# S3 method for cgps_gps autoplot(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_gps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A helper function for cgps_gps object — autoplot.cgps_gps","text":"object cgps_gps object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_gps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A helper function for cgps_gps object — autoplot.cgps_gps","text":"Returns ggplot object.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_pspop.html","id":null,"dir":"Reference","previous_headings":"","what":"A helper function for cgps_pspop object — autoplot.cgps_pspop","title":"A helper function for cgps_pspop object — autoplot.cgps_pspop","text":"helper function plot cgps_pspop object using ggplot2 package.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_pspop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A helper function for cgps_pspop object — autoplot.cgps_pspop","text":"","code":"# S3 method for cgps_pspop autoplot(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_pspop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A helper function for cgps_pspop object — autoplot.cgps_pspop","text":"object cgps_pspop object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_pspop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A helper function for cgps_pspop object — autoplot.cgps_pspop","text":"Returns ggplot object.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"A helper function for gpsm_erf object — autoplot.gpsm_erf","title":"A helper function for gpsm_erf object — autoplot.gpsm_erf","text":"helper function plot gpsm_erf object using ggplot2 package.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A helper function for gpsm_erf object — autoplot.gpsm_erf","text":"","code":"# S3 method for gpsm_erf autoplot(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A helper function for gpsm_erf object — autoplot.gpsm_erf","text":"object gpsm_erf object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A helper function for gpsm_erf object — autoplot.gpsm_erf","text":"Returns ggplot object.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_pspop.html","id":null,"dir":"Reference","previous_headings":"","what":"A helper function for gpsm_pspop object — autoplot.gpsm_pspop","title":"A helper function for gpsm_pspop object — autoplot.gpsm_pspop","text":"helper function plot gpsm_pspop object using ggplot2 package.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_pspop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A helper function for gpsm_pspop object — autoplot.gpsm_pspop","text":"","code":"# S3 method for gpsm_pspop autoplot(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_pspop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A helper function for gpsm_pspop object — autoplot.gpsm_pspop","text":"object gpsm_pspop object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_pspop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A helper function for gpsm_pspop object — autoplot.gpsm_pspop","text":"Returns ggplot object.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args.html","id":null,"dir":"Reference","previous_headings":"","what":"Check additional arguments — check_args","title":"Check additional arguments — check_args","text":"Checks additional arguments user needs provide different prediction models.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check additional arguments — check_args","text":"","code":"check_args( ci_appr, use_cov_transform, transformers, gps_density, trim_quantiles, ... )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check additional arguments — check_args","text":"ci_appr causal inference approach. use_cov_transform logical value (TRUE/FALSE) use covariate balance transforming. transformers list transformers. ... Additional named arguments passed.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check additional arguments — check_args","text":"TRUE requirements met. Raises error otherwise.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_compile_pseudo_pop.html","id":null,"dir":"Reference","previous_headings":"","what":"Check compile_pseudo_pop function arguments — check_args_compile_pseudo_pop","title":"Check compile_pseudo_pop function arguments — check_args_compile_pseudo_pop","text":"additional arguments provided.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_compile_pseudo_pop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check compile_pseudo_pop function arguments — check_args_compile_pseudo_pop","text":"","code":"check_args_compile_pseudo_pop(ci_appr, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_compile_pseudo_pop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check compile_pseudo_pop function arguments — check_args_compile_pseudo_pop","text":"ci_appr selected causal inference approach. ... Additional arguments successfully run selected ci_appr.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_compile_pseudo_pop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check compile_pseudo_pop function arguments — check_args_compile_pseudo_pop","text":"Returns True passes checks, successfully. Otherwise raises ERROR.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_estimate_gps.html","id":null,"dir":"Reference","previous_headings":"","what":"Check estimate_gps function arguments — check_args_estimate_gps","title":"Check estimate_gps function arguments — check_args_estimate_gps","text":"Checks estimate_gps function arguments make sure required additional arguments provided.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_estimate_gps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check estimate_gps function arguments — check_args_estimate_gps","text":"","code":"check_args_estimate_gps(gps_density, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_estimate_gps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check estimate_gps function arguments — check_args_estimate_gps","text":"gps_density Model type used estimating GPS value, including normal kernel. ... Additional arguments successfully run process.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_estimate_gps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check estimate_gps function arguments — check_args_estimate_gps","text":"Returns True passes checks, successfully. Otherwise raises ERROR.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_use_cov_transformers.html","id":null,"dir":"Reference","previous_headings":"","what":"Check Covariate Balance Transformers Argument — check_args_use_cov_transformers","title":"Check Covariate Balance Transformers Argument — check_args_use_cov_transformers","text":"Checks Covariate Balance Transformers terms using available transformers.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_use_cov_transformers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check Covariate Balance Transformers Argument — check_args_use_cov_transformers","text":"","code":"check_args_use_cov_transformers(use_cov_transform, transformers)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_use_cov_transformers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check Covariate Balance Transformers Argument — check_args_use_cov_transformers","text":"use_cov_transform logical value (TRUE/FALSE) use covariate balance transforming. transformers list transformers.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_args_use_cov_transformers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check Covariate Balance Transformers Argument — check_args_use_cov_transformers","text":"TRUE passes tests.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_covar_balance.html","id":null,"dir":"Reference","previous_headings":"","what":"Check covariate balance — check_covar_balance","title":"Check covariate balance — check_covar_balance","text":"Checks covariate balance original population pseudo population.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_covar_balance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check covariate balance — check_covar_balance","text":"","code":"check_covar_balance( w, c, ci_appr, counter_weight = NULL, covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\" )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_covar_balance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check covariate balance — check_covar_balance","text":"w vector observed continuous exposure variable. c data.frame observed covariates variable. ci_appr causal inference approach. counter_weight weight vector different situations. matching approach selected, integer data.table counters. case weighting approach, weight data.table. covar_bl_method Covariate balance method. Available options: - 'absolute' covar_bl_trs Covariate balance threshold. covar_bl_trs_type Covariate balance type (mean, median, maximal).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_covar_balance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check covariate balance — check_covar_balance","text":"output object: corr_results absolute_corr mean_absolute_corr pass (TRUE,FALSE)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_covar_balance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Check covariate balance — check_covar_balance","text":"","code":"# \\donttest{ set.seed(422) n <- 100 mydata <- generate_syn_data(sample_size=n) year <- sample(x=c(\"2001\",\"2002\",\"2003\",\"2004\",\"2005\"),size = n, replace = TRUE) region <- sample(x=c(\"North\", \"South\", \"East\", \"West\"),size = n, replace = TRUE) mydata$year <- as.factor(year) mydata$region <- as.factor(region) mydata$cf5 <- as.factor(mydata$cf5) m_xgboost <- function(nthread = 1, ntrees = 35, shrinkage = 0.3, max_depth = 5, ...) {SuperLearner::SL.xgboost( nthread = nthread, ntrees = ntrees, shrinkage=shrinkage, max_depth=max_depth, ...)} data_with_gps <- estimate_gps(.data = mydata, .formula = w ~ cf1 + cf2 + cf3 + cf4 + cf5 + cf6 + year + region, sl_lib = c(\"m_xgboost\"), gps_density = \"kernel\") #> Loading required package: nnls #> Error in get(library$library$predAlgorithm[s], envir = env): object 'm_xgboost' not found cw_object_matching <- compute_counter_weight(gps_obj = data_with_gps, ci_appr = \"matching\", bin_seq = NULL, nthread = 1, delta_n = 0.1, dist_measure = \"l1\", scale = 0.5) #> Error in compute_counter_weight(gps_obj = data_with_gps, ci_appr = \"matching\", bin_seq = NULL, nthread = 1, delta_n = 0.1, dist_measure = \"l1\", scale = 0.5): object 'data_with_gps' not found pseudo_pop <- generate_pseudo_pop(.data = mydata, cw_obj = cw_object_matching, covariate_col_names = c(\"cf1\", \"cf2\", \"cf3\", \"cf4\", \"cf5\", \"cf6\", \"year\", \"region\"), covar_bl_trs = 0.1, covar_bl_trs_type = \"maximal\", covar_bl_method = \"absolute\") #> Error in generate_pseudo_pop(.data = mydata, cw_obj = cw_object_matching, covariate_col_names = c(\"cf1\", \"cf2\", \"cf3\", \"cf4\", \"cf5\", \"cf6\", \"year\", \"region\"), covar_bl_trs = 0.1, covar_bl_trs_type = \"maximal\", covar_bl_method = \"absolute\"): object 'cw_object_matching' not found adjusted_corr_obj <- check_covar_balance(w = pseudo_pop$.data[, c(\"w\")], c = pseudo_pop$.data[ , pseudo_pop$params$covariate_col_names], counter = pseudo_pop$.data[, c(\"counter_weight\")], ci_appr = \"matching\", covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\") #> Error in ci_appr %in% c(\"matching\", \"weighting\"): object 'pseudo_pop' not found # }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_kolmogorov_smirnov.html","id":null,"dir":"Reference","previous_headings":"","what":"Check Kolmogorov-Smirnov (KS) statistics — check_kolmogorov_smirnov","title":"Check Kolmogorov-Smirnov (KS) statistics — check_kolmogorov_smirnov","text":"Checks Kolmogorov-Smirnov (KS) statistics exposure confounders pseudo-population","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_kolmogorov_smirnov.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check Kolmogorov-Smirnov (KS) statistics — check_kolmogorov_smirnov","text":"","code":"check_kolmogorov_smirnov(w, c, ci_appr, counter_weight = NULL)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_kolmogorov_smirnov.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check Kolmogorov-Smirnov (KS) statistics — check_kolmogorov_smirnov","text":"w vector observed continuous exposure variable. c data.frame observed covariates variable. ci_appr causal inference approach. counter_weight weight vector different situations. matching approach selected, integer data.table counters. case weighting approach, weight data.table.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/check_kolmogorov_smirnov.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check Kolmogorov-Smirnov (KS) statistics — check_kolmogorov_smirnov","text":"output object list including: ks_stat maximal_val mean_val median_val","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compile_pseudo_pop.html","id":null,"dir":"Reference","previous_headings":"","what":"Compile pseudo population — compile_pseudo_pop","title":"Compile pseudo population — compile_pseudo_pop","text":"Compiles pseudo population based original population estimated GPS value.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compile_pseudo_pop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compile pseudo population — compile_pseudo_pop","text":"","code":"compile_pseudo_pop( data_obj, ci_appr, gps_density, exposure_col_name, nthread, ... )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compile_pseudo_pop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compile pseudo population — compile_pseudo_pop","text":"data_obj S3 object including following: Original data set + GPS values e_gps_pred e_gps_std_pred w_resid gps_mx (min max gps) w_mx (min max w). ci_appr Causal inference approach. gps_density Model type used estimating GPS value, including normal kernel. exposure_col_name Exposure data column name. nthread integer value represents number threads used internal packages. ... Additional parameters.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compile_pseudo_pop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compile pseudo population — compile_pseudo_pop","text":"compile_pseudo_pop returns pseudo population data compiled based selected causal inference approach.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compile_pseudo_pop.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compile pseudo population — compile_pseudo_pop","text":"matching approach, use extra parameter, bin_seq, sequence w (treatment) generate pseudo population. NULL passed default value used, seq(min(w)+delta_n/2,max(w), =delta_n).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compile_pseudo_pop.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compile pseudo population — compile_pseudo_pop","text":"","code":"# \\donttest{ set.seed(112) m_d <- generate_syn_data(sample_size = 100) m_xgboost <- function(nthread = 1, ntrees = 35, shrinkage = 0.3, max_depth = 5, ...) {SuperLearner::SL.xgboost( nthread = nthread, ntrees = ntrees, shrinkage=shrinkage, max_depth=max_depth, ...)} data_with_gps <- estimate_gps(.data = m_d, .formula = w ~ cf1 + cf2 + cf3 + cf4 + cf5 + cf6, gps_density = \"normal\", sl_lib = c(\"m_xgboost\") ) #> Error in get(library$library$predAlgorithm[s], envir = env): object 'm_xgboost' not found pd <- compile_pseudo_pop(data_obj = data_with_gps, ci_appr = \"matching\", gps_density = \"normal\", bin_seq = NULL, exposure_col_name = c(\"w\"), nthread = 1, dist_measure = \"l1\", covar_bl_method = 'absolute', covar_bl_trs = 0.1, covar_bl_trs_type= \"mean\", delta_n = 0.5, scale = 1) #> Error in compile_pseudo_pop(data_obj = data_with_gps, ci_appr = \"matching\", gps_density = \"normal\", bin_seq = NULL, exposure_col_name = c(\"w\"), nthread = 1, dist_measure = \"l1\", covar_bl_method = \"absolute\", covar_bl_trs = 0.1, covar_bl_trs_type = \"mean\", delta_n = 0.5, scale = 1): object 'data_with_gps' not found # }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_closest_wgps.html","id":null,"dir":"Reference","previous_headings":"","what":"Find the closest data in subset to the original data — compute_closest_wgps","title":"Find the closest data in subset to the original data — compute_closest_wgps","text":"function compute closest data subset data original data based two attributes: vector scalar (vector size one).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_closest_wgps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Find the closest data in subset to the original data — compute_closest_wgps","text":"","code":"compute_closest_wgps(a, b, c, d, sc, nthread)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_closest_wgps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Find the closest data in subset to the original data — compute_closest_wgps","text":"Vector first attribute values subset data. b Vector first attribute values data. c Vector second attribute values subset data. d Vector size one second attribute value. sc Scale parameter give weight two mentioned measurements. nthread Number available cores.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_closest_wgps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Find the closest data in subset to the original data — compute_closest_wgps","text":"function returns index subset data closest original data sample.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_counter_weight.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute counter or weight of data samples — compute_counter_weight","title":"Compute counter or weight of data samples — compute_counter_weight","text":"Computes counter (matching approach) weight (weighting) approach.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_counter_weight.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute counter or weight of data samples — compute_counter_weight","text":"","code":"compute_counter_weight(gps_obj, ci_appr, nthread = 1, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_counter_weight.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute counter or weight of data samples — compute_counter_weight","text":"gps_obj gps object generated estimate_gps function. provided, number iteration forced 1 (Default: NULL). ci_appr causal inference approach. Possible values : \"matching\": Matching GPS \"weighting\": Weighting GPS nthread integer value represents number threads used internal packages. ... Additional arguments passed different models.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_counter_weight.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute counter or weight of data samples — compute_counter_weight","text":"Returns counter_weight (cgps_cw) object includes .data params attributes. .data: includes id counter_weight columns. case matching counter_weight column integer values, represent many times provided observational data mached matching process. case weighting column double values. params: Include related parameters used process.","code":""},{"path":[]},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_counter_weight.html","id":"causal-inference-approach-ci-appr-","dir":"Reference","previous_headings":"","what":"Causal Inference Approach (ci_appr)","title":"Compute counter or weight of data samples — compute_counter_weight","text":"ci_appr = 'matching': bin_seq: sequence w (treatment) generate pseudo population. NULL passed default value used, seq(min(w)+delta_n/2,max(w), =delta_n). dist_measure: Matching function. Available options: l1: Manhattan distance matching delta_n: caliper parameter. scale: specified scale parameter control relative weight attributed distance measures exposure versus GPS.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_counter_weight.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compute counter or weight of data samples — compute_counter_weight","text":"","code":"# \\donttest{ m_d <- generate_syn_data(sample_size = 100) gps_obj <- estimate_gps(.data = m_d, .formula = w ~ cf1 + cf2 + cf3 + cf4 + cf5 + cf6, gps_density = \"normal\", sl_lib = c(\"SL.xgboost\")) cw_object <- compute_counter_weight(gps_obj = gps_obj, ci_appr = \"matching\", bin_seq = NULL, nthread = 1, delta_n = 0.1, dist_measure = \"l1\", scale = 0.5) # }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_density.html","id":null,"dir":"Reference","previous_headings":"","what":"Approximate density based on another vector — compute_density","title":"Approximate density based on another vector — compute_density","text":"function impute missing values based density estimation another vector removing missing values.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_density.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Approximate density based on another vector — compute_density","text":"","code":"compute_density(x0, x1)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_density.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Approximate density based on another vector — compute_density","text":"x0 vector x1 vector","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_density.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Approximate density based on another vector — compute_density","text":"Returns approximation density value vector x1 based vector x0.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_min_max.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute minimum and maximum — compute_min_max","title":"Compute minimum and maximum — compute_min_max","text":"Function compute minimum maximum input vector","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_min_max.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute minimum and maximum — compute_min_max","text":"","code":"compute_min_max(x)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_min_max.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute minimum and maximum — compute_min_max","text":"x vector","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_min_max.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute minimum and maximum — compute_min_max","text":"Returns vector length 2. first element min value, second element max value.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_outer.html","id":null,"dir":"Reference","previous_headings":"","what":"Computes distance on all possible combinations — compute_outer","title":"Computes distance on all possible combinations — compute_outer","text":"Computes distance combination elements two vector. vector size n, b vector size m, result, matrix size(n,m)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_outer.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Computes distance on all possible combinations — compute_outer","text":"","code":"compute_outer(a, b, op)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_outer.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Computes distance on all possible combinations — compute_outer","text":"first vector (size n) b second vector (size m) op operator (e.g., '-', '+', '/', ...)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_outer.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Computes distance on all possible combinations — compute_outer","text":"n m matrix includes abs difference elements vector b.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_resid.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute residual — compute_resid","title":"Compute residual — compute_resid","text":"Function compute residual","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_resid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute residual — compute_resid","text":"","code":"compute_resid(a, b, c)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_resid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute residual — compute_resid","text":"vector b vector c vector","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_resid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute residual — compute_resid","text":"returns residual values.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_risk.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute risk value — compute_risk","title":"Compute risk value — compute_risk","text":"Calculates cross-validated risk optimal bandwidth selection kernel smoothing approach.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_risk.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute risk value — compute_risk","text":"","code":"compute_risk(h, matched_Y, matched_w, matched_cw, x_eval, w_vals, kernel_appr)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_risk.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute risk value — compute_risk","text":"h scalar representing bandwidth value. matched_Y vector outcome variable matched set. matched_w vector continuous exposure variable matched set. matched_cw vector counter weight variable matched set. w_vals vector values want calculate values ERF . kernel_appr Internal kernel approach. Available options locpol kernsmooth.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/compute_risk.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute risk value — compute_risk","text":"returns cross-validated risk value input bandwidth","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/convert_data_into_standard_format.html","id":null,"dir":"Reference","previous_headings":"","what":"Put original data into package standard data — convert_data_into_standard_format","title":"Put original data into package standard data — convert_data_into_standard_format","text":"temporal function convert original data package standard data. function removed addressing issue #67: \"convert accessing data column index column name #67\"","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/convert_data_into_standard_format.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Put original data into package standard data — convert_data_into_standard_format","text":"","code":"convert_data_into_standard_format(Y, w, c, q1, q2, ci_appr)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/convert_data_into_standard_format.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Put original data into package standard data — convert_data_into_standard_format","text":"Y Output vector w Treatment exposure vector c Covariate matrix ci_appr Causal Inference approach","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/convert_data_into_standard_format.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Put original data into package standard data — convert_data_into_standard_format","text":"Original data place holder columns.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_matching.html","id":null,"dir":"Reference","previous_headings":"","what":"Create pseudo population using matching casual inference approach — create_matching","title":"Create pseudo population using matching casual inference approach — create_matching","text":"Generates pseudo population based matching casual inference method.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_matching.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create pseudo population using matching casual inference approach — create_matching","text":"","code":"create_matching( .data, exposure_col_name, matching_fn, dist_measure = dist_measure, gps_density = gps_density, delta_n = delta_n, scale = scale, bin_seq = NULL, nthread = 1 )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_matching.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create pseudo population using matching casual inference approach — create_matching","text":".data TBD gps_density Model type used estimating GPS value, including normal (default) kernel. bin_seq Sequence w (treatment) generate pseudo population. NULL passed default value used, seq(min(w)+delta_n/2,max(w), =delta_n). nthread Number available cores. ... Additional arguments passed function.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_matching.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create pseudo population using matching casual inference approach — create_matching","text":"Returns data.table matched set.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_weighting.html","id":null,"dir":"Reference","previous_headings":"","what":"Create pseudo population using weighting casual inference approach — create_weighting","title":"Create pseudo population using weighting casual inference approach — create_weighting","text":"Generates pseudo population based weighting casual inference method.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_weighting.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create pseudo population using weighting casual inference approach — create_weighting","text":"","code":"create_weighting(dataset, exposure_col_name)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_weighting.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create pseudo population using weighting casual inference approach — create_weighting","text":"dataset gps object data. exposure_col_name exposure column name.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/create_weighting.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create pseudo population using weighting casual inference approach — create_weighting","text":"Returns data table includes following columns: Y w gps counter row_index ipw covariates","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate Exposure Response Function — estimate_erf","title":"Estimate Exposure Response Function — estimate_erf","text":"Estimates exposure-response function (ERF) matched weighted dataset using parametric, semiparametric, nonparametric models.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate Exposure Response Function — estimate_erf","text":"","code":"estimate_erf(.data, .formula, weights_col_name, model_type, w_vals, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate Exposure Response Function — estimate_erf","text":".data data frame containing observed continuous exposure variable, weights, observed outcome variable. Includes id column future reference. .formula formula specifying relationship exposure variable outcome variable. example, Y ~ w. weights_col_name string representing weight counter column name .data. model_type string representing model type based preliminary assumptions, including parametric, semiparametric, nonparametric models. w_vals numeric vector values want calculate ERF. ... Additional arguments passed model.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate Exposure Response Function — estimate_erf","text":"Returns S3 object containing following data parameters: .data_original <- result_data_original .data_prediction <- result_data_prediction params","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_gps.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate generalized propensity score (GPS) values — estimate_gps","title":"Estimate generalized propensity score (GPS) values — estimate_gps","text":"Estimates GPS value observation using normal kernel approaches.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_gps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate generalized propensity score (GPS) values — estimate_gps","text":"","code":"estimate_gps( .data, .formula, gps_density = \"normal\", sl_lib = c(\"SL.xgboost\"), ... )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_gps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate generalized propensity score (GPS) values — estimate_gps","text":".data data frame observed continuous exposure variable observed covariates variable. Also includes id column future references. .formula formula specifying relationship exposure variable covariates. example, w ~ (cf1^2) + cf2. gps_density Model type used estimating GPS value, including normal (default) kernel. sl_lib vector prediction algorithms used SuperLearner packageg. ... Additional arguments passed model.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_gps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate generalized propensity score (GPS) values — estimate_gps","text":"function returns S3 object. Including following: .data : id, w, gps, e_gps_pred, e_gps_std_pred, w_resid params: Including following fields: gps_mx (min max gps) w_mx (min max w). .formula gps_density sl_lib fcall (function call)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_gps.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate generalized propensity score (GPS) values — estimate_gps","text":"","code":"# \\donttest{ m_d <- generate_syn_data(sample_size = 100) data_with_gps <- estimate_gps(.data = m_d, .formula = w ~ cf1 + cf2 + cf3 + cf4 + cf5 + cf6, gps_density = \"normal\", sl_lib = c(\"SL.xgboost\") ) # }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_hat_vals.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate hat (fitted) values — estimate_hat_vals","title":"Estimate hat (fitted) values — estimate_hat_vals","text":"Estimates fitted values based bandwidth value","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_hat_vals.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate hat (fitted) values — estimate_hat_vals","text":"","code":"estimate_hat_vals(bw, matched_w, w_vals)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_hat_vals.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate hat (fitted) values — estimate_hat_vals","text":"bw bandwidth value. matched_w vector continuous exposure variable matched set. w_vals vector values want calculate values ERF .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_hat_vals.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate hat (fitted) values — estimate_hat_vals","text":"Returns fitted values, prediction made model observation.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_npmetric_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","title":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","text":"Estimate smoothed exposure-response function (ERF) matched weighted data set using non-parametric models.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_npmetric_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","text":"","code":"estimate_npmetric_erf( m_Y, m_w, counter_weight, bw_seq, w_vals, nthread, kernel_appr = \"locpol\" )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_npmetric_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","text":"m_Y vector outcome variable matched set. m_w vector continuous exposure variable matched set. counter_weight vector counter weight variable matched set. bw_seq vector bandwidth values. w_vals vector values want calculate values ERF . nthread number available cores. kernel_appr Internal kernel approach. Available options locpol kernsmooth.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_npmetric_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","text":"function returns gpsm_erf object. object includes following attributes: params m_Y m_w bw_seq w_vals erf fcall","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_npmetric_erf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Estimate smoothed exposure-response function (ERF) for pseudo population — estimate_npmetric_erf","text":"Estimate Functions Using Local Polynomial kernel regression.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_pmetric_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","title":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","text":"Estimate constant effect size matched weighted data set using parametric models","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_pmetric_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","text":"","code":"estimate_pmetric_erf(formula, family, data, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_pmetric_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","text":"formula vector outcome variable matched set. family description error distribution (see ?gnm) data dataset formula build upon (Note counter_weight column data.) ... Additional parameters fine tuning gnm model.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_pmetric_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","text":"returns object class gnm","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_pmetric_erf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Estimate Parametric Exposure Response Function — estimate_pmetric_erf","text":"method uses generalized nonlinear model (gnm) gnm package.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_semipmetric_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","title":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","text":"Estimates smoothed exposure-response function using generalized additive model splines.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_semipmetric_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","text":"","code":"estimate_semipmetric_erf(formula, family, data, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_semipmetric_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","text":"formula vector outcome variable matched set. family description error distribution (see ?gam). data dataset formula build upon Note counter_weight column data.). ... Additional parameters fine tuning gam model.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_semipmetric_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","text":"returns object class gam","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/estimate_semipmetric_erf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Estimate semi-exposure-response function (semi-ERF). — estimate_semipmetric_erf","text":"approach uses Generalized Additive Model (gam) using mgcv package.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/gen_wrap_sl_lib.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate customized wrapper for SuperLearner libraries — gen_wrap_sl_lib","title":"Generate customized wrapper for SuperLearner libraries — gen_wrap_sl_lib","text":"function generates customized wrapper order access external libraries hyperparameters.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/gen_wrap_sl_lib.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate customized wrapper for SuperLearner libraries — gen_wrap_sl_lib","text":"","code":"gen_wrap_sl_lib(lib_name, params, nthread)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/gen_wrap_sl_lib.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate customized wrapper for SuperLearner libraries — gen_wrap_sl_lib","text":"lib_name library name (e.g., m_xgboost). params list includes key-values different parameters. relevant parameters extracted, others ignored. nthread Number threads available used external libraries (case can use ).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/gen_wrap_sl_lib.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate customized wrapper for SuperLearner libraries — gen_wrap_sl_lib","text":"Returns list TRUE best used parameters, modified library given library implemented; otherwise, returns list FALSE. function also called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_kernel.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate kernel function — generate_kernel","title":"Generate kernel function — generate_kernel","text":"Generates kernel function","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_kernel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate kernel function — generate_kernel","text":"","code":"generate_kernel(t)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_kernel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate kernel function — generate_kernel","text":"t standardized vector (z-score)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_kernel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate kernel function — generate_kernel","text":"probability distribution","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_pseudo_pop.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate pseudo population — generate_pseudo_pop","title":"Generate pseudo population — generate_pseudo_pop","text":"Generates pseudo population data set based user-defined causal inference approach. function uses adaptive approach satisfies covariate balance requirements. function terminates either satisfying covariate balance completing requested number iteration, whichever comes first.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_pseudo_pop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate pseudo population — generate_pseudo_pop","text":"","code":"generate_pseudo_pop( .data, cw_obj, covariate_col_names, covar_bl_trs = 0.1, covar_bl_trs_type = \"maximal\", covar_bl_method = \"absolute\" )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_pseudo_pop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate pseudo population — generate_pseudo_pop","text":".data data.frame observation data id column. cw_obj S3 object counter_weight. covariate_col_names list covariate columns. covar_bl_trs Covariate balance threshold covar_bl_trs_type Type covariance balance threshold. covar_bl_method Covariate balance method.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_pseudo_pop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate pseudo population — generate_pseudo_pop","text":"Returns pseudo population (gpsm_pspop) object generated augmented based selected causal inference approach (ci_appr). object includes following objects: params ci_appr params pseudo_pop adjusted_corr_results original_corr_results best_gps_used_params effect size generated pseudo population","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_pseudo_pop.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate pseudo population — generate_pseudo_pop","text":"","code":"# \\donttest{ set.seed(967) m_d <- generate_syn_data(sample_size = 200) m_d$id <- seq_along(1:nrow(m_d)) m_xgboost <- function(nthread = 4, ntrees = 35, shrinkage = 0.3, max_depth = 5, ...) {SuperLearner::SL.xgboost( nthread = nthread, ntrees = ntrees, shrinkage=shrinkage, max_depth=max_depth, ...)} data_with_gps_1 <- estimate_gps( .data = m_d, .formula = w ~ I(cf1^2) + cf2 + I(cf3^2) + cf4 + cf5 + cf6, sl_lib = c(\"m_xgboost\"), gps_density = \"normal\") #> Error in get(library$library$predAlgorithm[s], envir = env): object 'm_xgboost' not found cw_object_matching <- compute_counter_weight(gps_obj = data_with_gps_1, ci_appr = \"matching\", bin_seq = NULL, nthread = 1, delta_n = 0.1, dist_measure = \"l1\", scale = 0.5) #> Error in compute_counter_weight(gps_obj = data_with_gps_1, ci_appr = \"matching\", bin_seq = NULL, nthread = 1, delta_n = 0.1, dist_measure = \"l1\", scale = 0.5): object 'data_with_gps_1' not found pseudo_pop <- generate_pseudo_pop(.data = m_d, cw_obj = cw_object_matching, covariate_col_names = c(\"cf1\", \"cf2\", \"cf3\", \"cf4\", \"cf5\", \"cf6\"), covar_bl_trs = 0.1, covar_bl_trs_type = \"maximal\", covar_bl_method = \"absolute\") #> Error in generate_pseudo_pop(.data = m_d, cw_obj = cw_object_matching, covariate_col_names = c(\"cf1\", \"cf2\", \"cf3\", \"cf4\", \"cf5\", \"cf6\"), covar_bl_trs = 0.1, covar_bl_trs_type = \"maximal\", covar_bl_method = \"absolute\"): object 'cw_object_matching' not found # }"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_syn_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate synthetic data for the CausalGPS package — generate_syn_data","title":"Generate synthetic data for the CausalGPS package — generate_syn_data","text":"Generates synthetic data set based different GPS models covariates.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_syn_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate synthetic data for the CausalGPS package — generate_syn_data","text":"","code":"generate_syn_data( sample_size = 1000, outcome_sd = 10, gps_spec = 1, cova_spec = 1, vectorized_y = FALSE )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_syn_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate synthetic data for the CausalGPS package — generate_syn_data","text":"sample_size positive integer number represents number data samples. outcome_sd positive double number represents standard deviation used generate outcome synthetic data set. gps_spec numerical integer values ranging 1 7. complexity form relationship covariates treatment variables determined gps_spec. , find concise definition values: gps_spec: 1: treatment generated using normal distributionMay 24, 2023 (stats::rnorm) linear function covariates (cf1 cf6). gps_spec: 2: treatment generated using Student's t-distribution (stats::rt) linear function covariates, also truncated within specific range (-5 25). gps_spec: 3: treatment includes quadratic term third covariate. gps_spec: 4: treatment calculated using exponential function within fraction, creating logistic-like model. gps_spec: 5: treatment also uses logistic-like model different parameters. gps_spec: 6: treatment calculated using natural logarithm absolute value linear combination covariates. gps_spec: 7: treatment generated similarly gps_spec = 2, without truncation. cova_spec numerical value (1 2) modify covariates. determines covariates synthetic data set transformed. cova_spec equals 2, function applies non-linear transformation covariates, can add complexity relationships covariates outcomes synthetic data. See code details. vectorized_y Boolean value indicates Y internally generated. (Default = FALSE). parameter introduced backward compatibility. vectorized_y = TRUE performs better.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_syn_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate synthetic data for the CausalGPS package — generate_syn_data","text":"synthetic_data: function returns data.frame saved constructed synthetic data.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/generate_syn_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate synthetic data for the CausalGPS package — generate_syn_data","text":"","code":"set.seed(298) s_data <- generate_syn_data(sample_size = 100, outcome_sd = 10, gps_spec = 1, cova_spec = 1)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/get_logger.html","id":null,"dir":"Reference","previous_headings":"","what":"Get Logger Settings — get_logger","title":"Get Logger Settings — get_logger","text":"Returns current logger settings.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/get_logger.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get Logger Settings — get_logger","text":"","code":"get_logger()"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/get_logger.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get Logger Settings — get_logger","text":"Returns list includes logger_file_path logger_level.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/get_logger.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get Logger Settings — get_logger","text":"","code":"set_logger(\"mylogger.log\", \"INFO\") log_meta <- get_logger()"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/log_system_info.html","id":null,"dir":"Reference","previous_headings":"","what":"Log system information — log_system_info","title":"Log system information — log_system_info","text":"Logs system related information log file.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/log_system_info.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Log system information — log_system_info","text":"","code":"log_system_info()"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/log_system_info.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Log system information — log_system_info","text":"return value. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_fn.html","id":null,"dir":"Reference","previous_headings":"","what":"Match observations — matching_fn","title":"Match observations — matching_fn","text":"Matching function using L1 distance single exposure level w","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_fn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Match observations — matching_fn","text":"","code":"matching_fn( w, dataset, exposure_col_name, e_gps_pred, e_gps_std_pred, w_resid, gps_mx, w_mx, dist_measure = \"l1\", gps_density = \"normal\", delta_n = 1, scale = 0.5, nthread = 1 )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_fn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Match observations — matching_fn","text":"w targeted single exposure levels. dataset completed observational data frame matrix containing (Y, w, gps, counter, row_index, c). e_gps_pred vector predicted gps values obtained Machine learning methods. e_gps_std_pred vector predicted std gps obtained Machine learning methods. w_resid standardized residuals w. gps_mx vector length 2, includes min(gps), max(gps) w_mx vector length 2, includes min(w), max(w). gps_density Model type used estimating GPS value, including normal (default) kernel. delta_n specified caliper parameter exposure (Default 1). scale specified scale parameter control relative weight attributed distance measures exposure versus GPS estimates (Default 0.5). nthread Number available cores.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_fn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Match observations — matching_fn","text":"dp: function returns data.table saved matched points single exposure level w proposed GPS matching approaches.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_l1.html","id":null,"dir":"Reference","previous_headings":"","what":"Match observations — matching_l1","title":"Match observations — matching_l1","text":"Matching function using L1 distance single exposure level w","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_l1.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Match observations — matching_l1","text":"","code":"matching_l1( w, dataset, exposure_col_name, e_gps_pred, e_gps_std_pred, w_resid, gps_mx, w_mx, gps_density = \"normal\", delta_n = 1, scale = 0.5, nthread = 1 )"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_l1.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Match observations — matching_l1","text":"w targeted single exposure levels. dataset completed observational data frame matrix containing (Y, w, gps, counter, row_index, c). e_gps_pred vector predicted gps values obtained Machine learning methods. e_gps_std_pred vector predicted std gps obtained Machine learning methods. w_resid standardized residuals w. gps_mx vector length 2, includes min(gps), max(gps) w_mx vector length 2, includes min(w), max(w). gps_density Model type used estimating GPS value, including normal (default) kernel. delta_n specified caliper parameter exposure (Default 1). scale specified scale parameter control relative weight attributed distance measures exposure versus GPS estimates (Default 0.5). nthread Number available cores.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/matching_l1.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Match observations — matching_l1","text":"dp: function returns data.table saved matched points single exposure level w proposed GPS matching approaches.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_cw.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend generic plot functions for cgps_cw class — plot.cgps_cw","title":"Extend generic plot functions for cgps_cw class — plot.cgps_cw","text":"wrapper function extend generic plot functions cgps_cw class.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_cw.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend generic plot functions for cgps_cw class — plot.cgps_cw","text":"","code":"# S3 method for cgps_cw plot(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_cw.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend generic plot functions for cgps_cw class — plot.cgps_cw","text":"x cgps_cw object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_cw.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend generic plot functions for cgps_cw class — plot.cgps_cw","text":"Returns ggplot2 object, invisibly. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_cw.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Extend generic plot functions for cgps_cw class — plot.cgps_cw","text":"Additional parameters: every_n: Puts label ID every n interval (default = 10) subset_id: vector range ids included plot (default = NULL)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend generic plot functions for cgps_cw class — plot.cgps_erf","title":"Extend generic plot functions for cgps_cw class — plot.cgps_erf","text":"wrapper function extend generic plot functions cgps_cw class.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend generic plot functions for cgps_cw class — plot.cgps_erf","text":"","code":"# S3 method for cgps_erf plot(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend generic plot functions for cgps_cw class — plot.cgps_erf","text":"x cgps_erf object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend generic plot functions for cgps_cw class — plot.cgps_erf","text":"Returns ggplot2 object, invisibly. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_erf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Extend generic plot functions for cgps_cw class — plot.cgps_erf","text":"TBD","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_gps.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend generic plot functions for cgps_gps class — plot.cgps_gps","title":"Extend generic plot functions for cgps_gps class — plot.cgps_gps","text":"wrapper function extend generic plot functions cgps_gps class.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_gps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend generic plot functions for cgps_gps class — plot.cgps_gps","text":"","code":"# S3 method for cgps_gps plot(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_gps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend generic plot functions for cgps_gps class — plot.cgps_gps","text":"x cgps_gps object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_gps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend generic plot functions for cgps_gps class — plot.cgps_gps","text":"Returns ggplot2 object, invisibly. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_pspop.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend generic plot functions for cgps_pspop class — plot.cgps_pspop","title":"Extend generic plot functions for cgps_pspop class — plot.cgps_pspop","text":"wrapper function extend generic plot functions cgps_pspop class.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_pspop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend generic plot functions for cgps_pspop class — plot.cgps_pspop","text":"","code":"# S3 method for cgps_pspop plot(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_pspop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend generic plot functions for cgps_pspop class — plot.cgps_pspop","text":"x cgps_pspop object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_pspop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend generic plot functions for cgps_pspop class — plot.cgps_pspop","text":"Returns ggplot2 object, invisibly. function called side effects.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_pspop.html","id":"additional-parameters","dir":"Reference","previous_headings":"","what":"Additional parameters","title":"Extend generic plot functions for cgps_pspop class — plot.cgps_pspop","text":"include_details: set TRUE, plot include run details (Default = FALSE).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend generic plot functions for gpsm_erf class — plot.gpsm_erf","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_erf","text":"wrapper function extend generic plot functions gpsm_erf class.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_erf","text":"","code":"# S3 method for gpsm_erf plot(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_erf","text":"x gpsm_erf object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_erf","text":"Returns ggplot2 object, invisibly. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_pspop.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend generic plot functions for gpsm_erf class — plot.gpsm_pspop","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_pspop","text":"wrapper function extend generic plot functions gpsm_erf class.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_pspop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_pspop","text":"","code":"# S3 method for gpsm_pspop plot(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_pspop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_pspop","text":"x gpsm_erf object. ... Additional arguments passed customize plot.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_pspop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_pspop","text":"Returns ggplot2 object, invisibly. function called side effects.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_pspop.html","id":"additional-parameters","dir":"Reference","previous_headings":"","what":"Additional parameters","title":"Extend generic plot functions for gpsm_erf class — plot.gpsm_pspop","text":"include_details: set TRUE, plot include run details (Default = FALSE).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/preprocess_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Preprocess data — preprocess_data","title":"Preprocess data — preprocess_data","text":"Preprocess data isolate extra details","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/preprocess_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Preprocess data — preprocess_data","text":"","code":"preprocess_data(w, c, trim_quantiles, exposure_col)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/preprocess_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Preprocess data — preprocess_data","text":"w data.frame comprised two columns: one contains observed exposure variable, labeled 'id'. column outcome variable can assigned name per requirements. c data.frame includes observed covariate variables. also consist column named 'id'. exposure_col Column name used exposure.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/preprocess_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Preprocess data — preprocess_data","text":"list preprocessed original data.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_cw.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend print function for cgps_cw object — print.cgps_cw","title":"Extend print function for cgps_cw object — print.cgps_cw","text":"Extend print function cgps_cw object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_cw.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend print function for cgps_cw object — print.cgps_cw","text":"","code":"# S3 method for cgps_cw print(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_cw.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend print function for cgps_cw object — print.cgps_cw","text":"x cgps_cw object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_cw.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend print function for cgps_cw object — print.cgps_cw","text":"return value. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend print function for cgps_erf object — print.cgps_erf","title":"Extend print function for cgps_erf object — print.cgps_erf","text":"Extend print function cgps_erf object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend print function for cgps_erf object — print.cgps_erf","text":"","code":"# S3 method for cgps_erf print(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend print function for cgps_erf object — print.cgps_erf","text":"x cgps_erf object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend print function for cgps_erf object — print.cgps_erf","text":"return value. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_gps.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend print function for cgps_gps object — print.cgps_gps","title":"Extend print function for cgps_gps object — print.cgps_gps","text":"Extend print function cgps_gps object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_gps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend print function for cgps_gps object — print.cgps_gps","text":"","code":"# S3 method for cgps_gps print(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_gps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend print function for cgps_gps object — print.cgps_gps","text":"x cgps_gps object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_gps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend print function for cgps_gps object — print.cgps_gps","text":"return value. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_pspop.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend print function for cgps_pspop object — print.cgps_pspop","title":"Extend print function for cgps_pspop object — print.cgps_pspop","text":"Extend print function cgps_pspop object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_pspop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend print function for cgps_pspop object — print.cgps_pspop","text":"","code":"# S3 method for cgps_pspop print(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_pspop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend print function for cgps_pspop object — print.cgps_pspop","text":"x cgps_pspop object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_pspop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend print function for cgps_pspop object — print.cgps_pspop","text":"return value. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend print function for gpsm_erf object — print.gpsm_erf","title":"Extend print function for gpsm_erf object — print.gpsm_erf","text":"Extend print function gpsm_erf object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend print function for gpsm_erf object — print.gpsm_erf","text":"","code":"# S3 method for gpsm_erf print(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend print function for gpsm_erf object — print.gpsm_erf","text":"x gpsm_erf object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend print function for gpsm_erf object — print.gpsm_erf","text":"return value. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_pspop.html","id":null,"dir":"Reference","previous_headings":"","what":"Extend print function for gpsm_pspop object — print.gpsm_pspop","title":"Extend print function for gpsm_pspop object — print.gpsm_pspop","text":"Extend print function gpsm_pspop object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_pspop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extend print function for gpsm_pspop object — print.gpsm_pspop","text":"","code":"# S3 method for gpsm_pspop print(x, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_pspop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extend print function for gpsm_pspop object — print.gpsm_pspop","text":"x gpsm_pspop object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_pspop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extend print function for gpsm_pspop object — print.gpsm_pspop","text":"return value. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/set_logger.html","id":null,"dir":"Reference","previous_headings":"","what":"Set Logger Settings — set_logger","title":"Set Logger Settings — set_logger","text":"Updates logger settings, including log level location file.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/set_logger.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set Logger Settings — set_logger","text":"","code":"set_logger(logger_file_path = \"CausalGPS.log\", logger_level = \"INFO\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/set_logger.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set Logger Settings — set_logger","text":"logger_file_path path (including file name) log messages. (Default: CausalGPS.log) logger_level log level. Available levels include: TRACE DEBUG INFO (Default) SUCCESS WARN ERROR FATAL","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/set_logger.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set Logger Settings — set_logger","text":"return value. function called side effects.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/set_logger.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set Logger Settings — set_logger","text":"","code":"set_logger(\"Debug\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"Smooth exposure response function — smooth_erf","title":"Smooth exposure response function — smooth_erf","text":"Smooths exposure response function based bandwidth","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Smooth exposure response function — smooth_erf","text":"","code":"smooth_erf(matched_Y, bw, matched_w, matched_cw, x_eval, kernel_appr)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Smooth exposure response function — smooth_erf","text":"matched_Y vector outcome variable matched set. bw bandwidth value. matched_w vector continuous exposure variable matched set. matched_cw vector counter weight variable matched set. kernel_appr Internal kernel approach. Available options locpol kernsmooth.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Smooth exposure response function — smooth_erf","text":"Smoothed value ERF","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_kernsmooth.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute smoothed erf with kernsmooth approach — smooth_erf_kernsmooth","title":"Compute smoothed erf with kernsmooth approach — smooth_erf_kernsmooth","text":"Compute smoothed erf kernsmooth approach","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_kernsmooth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute smoothed erf with kernsmooth approach — smooth_erf_kernsmooth","text":"","code":"smooth_erf_kernsmooth(matched_Y, matched_w, matched_cw, x_eval, bw)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_kernsmooth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute smoothed erf with kernsmooth approach — smooth_erf_kernsmooth","text":"matched_Y vector outcome value. matched_w vector treatment value. matched_cw vector weight count. bw scaler number indicating bandwidth.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_kernsmooth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute smoothed erf with kernsmooth approach — smooth_erf_kernsmooth","text":"vector smoothed ERF.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_locpol.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute smoothed erf with locpol approach — smooth_erf_locpol","title":"Compute smoothed erf with locpol approach — smooth_erf_locpol","text":"Compute smoothed erf locpol approach","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_locpol.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute smoothed erf with locpol approach — smooth_erf_locpol","text":"","code":"smooth_erf_locpol(matched_Y, matched_w, matched_cw, x_eval, bw)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_locpol.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute smoothed erf with locpol approach — smooth_erf_locpol","text":"matched_Y vector outcome value. matched_w vector treatment value. matched_cw vector weight count. bw scaler number indicating bandwidth.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_locpol.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute smoothed erf with locpol approach — smooth_erf_locpol","text":"vector smoothed ERF.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_cw.html","id":null,"dir":"Reference","previous_headings":"","what":"print summary of cgps_cw object — summary.cgps_cw","title":"print summary of cgps_cw object — summary.cgps_cw","text":"print summary cgps_cw object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_cw.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"print summary of cgps_cw object — summary.cgps_cw","text":"","code":"# S3 method for cgps_cw summary(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_cw.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"print summary of cgps_cw object — summary.cgps_cw","text":"object cgps_cw object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_cw.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"print summary of cgps_cw object — summary.cgps_cw","text":"Returns summary data","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"print summary of cgps_erf object — summary.cgps_erf","title":"print summary of cgps_erf object — summary.cgps_erf","text":"print summary cgps_erf object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"print summary of cgps_erf object — summary.cgps_erf","text":"","code":"# S3 method for cgps_erf summary(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"print summary of cgps_erf object — summary.cgps_erf","text":"object cgps_erf object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"print summary of cgps_erf object — summary.cgps_erf","text":"Returns summary data","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_gps.html","id":null,"dir":"Reference","previous_headings":"","what":"print summary of cgps_gps object — summary.cgps_gps","title":"print summary of cgps_gps object — summary.cgps_gps","text":"print summary cgps_gps object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_gps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"print summary of cgps_gps object — summary.cgps_gps","text":"","code":"# S3 method for cgps_gps summary(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_gps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"print summary of cgps_gps object — summary.cgps_gps","text":"object cgps_gps object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_gps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"print summary of cgps_gps object — summary.cgps_gps","text":"Returns summary data","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_pspop.html","id":null,"dir":"Reference","previous_headings":"","what":"print summary of cgps_pspop object — summary.cgps_pspop","title":"print summary of cgps_pspop object — summary.cgps_pspop","text":"print summary cgps_pspop object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_pspop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"print summary of cgps_pspop object — summary.cgps_pspop","text":"","code":"# S3 method for cgps_pspop summary(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_pspop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"print summary of cgps_pspop object — summary.cgps_pspop","text":"object cgps_pspop object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_pspop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"print summary of cgps_pspop object — summary.cgps_pspop","text":"Returns summary data","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_erf.html","id":null,"dir":"Reference","previous_headings":"","what":"print summary of gpsm_erf object — summary.gpsm_erf","title":"print summary of gpsm_erf object — summary.gpsm_erf","text":"print summary gpsm_erf object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_erf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"print summary of gpsm_erf object — summary.gpsm_erf","text":"","code":"# S3 method for gpsm_erf summary(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_erf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"print summary of gpsm_erf object — summary.gpsm_erf","text":"object gpsm_erf object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_erf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"print summary of gpsm_erf object — summary.gpsm_erf","text":"Returns summary data","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_pspop.html","id":null,"dir":"Reference","previous_headings":"","what":"print summary of gpsm_pspop object — summary.gpsm_pspop","title":"print summary of gpsm_pspop object — summary.gpsm_pspop","text":"print summary gpsm_pspop object","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_pspop.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"print summary of gpsm_pspop object — summary.gpsm_pspop","text":"","code":"# S3 method for gpsm_pspop summary(object, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_pspop.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"print summary of gpsm_pspop object — summary.gpsm_pspop","text":"object gpsm_pspop object. ... Additional arguments passed customize results.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_pspop.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"print summary of gpsm_pspop object — summary.gpsm_pspop","text":"Returns summary data","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/synthetic_us_2010.html","id":null,"dir":"Reference","previous_headings":"","what":"Public data set for air pollution and health studies,\ncase study: 2010 county-Level data set for the contiguous United States — synthetic_us_2010","title":"Public data set for air pollution and health studies,\ncase study: 2010 county-Level data set for the contiguous United States — synthetic_us_2010","text":"dataset containing exposure, confounders, outcome causal inference studies. dataset hosted Harvard dataverse doi:10.7910/DVN/L7YF2G . dataset produced five different resources. Please see https://github.com/NSAPH-Projects/synthetic_data/ data processing pipelines. following Exposure Data exposure parameter PM2.5. Di et al. (2019) provided daily, annual PM2.5 estimates 1 km×1 km grid cells entire United States. data can downloaded Di et al. (2021). Features category starts qd_ prefix. Census Data main reference getting census data United States Census Bureau. numerous studies surveys different geographical resolutions. use 2010 county level American County Survey county level (acs5). Features category starts cs_ prefix. CDC Data Centers Disease Control Prevention (CDC), provides Behavioral Risk Factor Surveillance System (Centers Disease Control Prevention (2021)), nation’s premier system health-related telephone surveys collect state data U.S. residents regarding health-related risk behaviors. GridMET Data Climatology Lab University California, Merced, provides GridMET data (Abatzoglou (2013)). data set daily surface meteorological data covering contiguous United States. CMS Data Centers Medicare Medicaid Services(CMS) provides synthetic data county level 2008-2010 (Centers Medicare & Medicaid Services (2021)). definition variables provided . data collected 2010 aggregated county level contiguous United States.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/synthetic_us_2010.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Public data set for air pollution and health studies,\ncase study: 2010 county-Level data set for the contiguous United States — synthetic_us_2010","text":"","code":"data(synthetic_us_2010)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/synthetic_us_2010.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Public data set for air pollution and health studies,\ncase study: 2010 county-Level data set for the contiguous United States — synthetic_us_2010","text":"data frame 3109 rows 46 variables: qd_mean_pm25 Mean PM2.5 (microgram/m3) cs_poverty proportion poverty level population among 65+ years old. cs_hispanic proportion Hispanic Latino population among 65+ years old. cs_black proportion Black African American population among 65+ years old. cs_white proportion White population among 65 years . cs_native proportion American Indian Alaska native population among 65 years . cs_asian proportion Asian population among 65 years . cs_other proportion races population among 65 years . cs_ed_below_highschool proportion population high school level education among 65 years . cs_household_income Median Household income past 12 months (2010 inflation-adjusted dollars) householder 65 years . cs_median_house_value Median house value (USD) cs_total_population Total Population cs_area Area county (square miles) cs_population_density number population one square mile. cdc_mean_bmi Body Mass Index. cdc_pct_cusmoker proportion current smokers. cdc_pct_sdsmoker proportion days smokers. cdc_pct_fmsmoker proportion former smokers. cdc_pct_nvsmoker proportion never smokers. cdc_pct_nnsmoker proportion known smokers. gmet_mean_tmmn Annual mean daily minimum temperature (K) gmet_mean_summer_tmmn mean daily minimum temperature summer (K) gmet_mean_winter_tmmn mean daily minimum temperature winter (K) gmet_mean_tmmx Annual mean daily maximum temperature (K) gmet_mean_summer_tmmx mean daily maximum temperature summer (K) gmet_mean_winter_tmmx mean daily maximum temperature winter (K) gmet_mean_rmn Annual mean daily minimum relative humidity (%) gmet_mean_summer_rmn mean daily minimum relative humidity summer (%) gmet_mean_winter_rmn mean daily minimum relative humidity winter (%) gmet_mean_rmx Annual mean daily maximum relative humidity (%) gmet_mean_summer_rmx mean daily maximum relative humidity summer (%) gmet_mean_winter_rmx mean daily maximum relative humidity winter (%) gmet_mean_sph Annual mean daily mean specific humidity (kg/kg) gmet_mean_summer_sph mean daily mean specific humidity summer(kg/kg) gmet_mean_winter_sph mean daily mean specific humidity winter(kg/kg) cms_mortality_pct proportion deceased patients. cms_white_pct proportion White patients. cms_black_pct proportion Black patients. cms_hispanic_pct proportion Hispanic patients. cms_others_pct proportion patients. cms_female_pct proportion Female patients. region region county located . FIPS Federal Information Processing Standards, unique ID county. NAME County, State name. STATE State abbreviation. STATE_CODE State numerical code.","code":"NORTHEAST=(\"NY\",\"MA\",\"PA\",\"RI\",\"NH\",\"ME\",\"VT\",\"CT\",\"NJ\") SOUTH=(\"DC\",\"VA\",\"NC\",\"WV\",\"KY\",\"SC\",\"GA\",\"FL\",\"AL\",\"TN\",\"MS\",\"AR\",\"MD\",\"DE\",\"OK\",\"TX\",\"LA\") MIDWEST=c(\"OH\",\"IN\",\"MI\",\"IA\",\"MO\",\"WI\",\"MN\",\"SD\",\"ND\",\"IL\",\"KS\",\"NE\") WEST=c(\"MT\",\"CO\",\"WY\",\"ID\",\"UT\",\"NV\",\"CA\",\"OR\",\"WA\",\"AZ\",\"NM\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/synthetic_us_2010.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Public data set for air pollution and health studies,\ncase study: 2010 county-Level data set for the contiguous United States — synthetic_us_2010","text":"Abatzoglou, John T. 2013. “Development Gridded Surface Meteorological Data Ecological Applications Modelling.” International Journal Climatology 33 (1): 121–31. doi:10.1002/joc.3413 . Centers Disease Control Prevention. 2021. “Behavioral Risk Factor Surveillance System.” https://www.cdc.gov/brfss/annual_data/annual_2010.htm/. Centers Medicare & Medicaid Services. 2021. “CMS 2008-2010 Data Entrepreneurs’ Synthetic Public Use File (DE-SynPUF).” https://www.cms.gov/data-research/statistics-trends--reports/medicare-claims-synthetic-public-use-files/cms-2008-2010-data-entrepreneurs-synthetic-public-use-file-de-synpuf. Di, Qian, Heresh Amini, Liuhua Shi, Itai Kloog, Rachel Silvern, James Kelly, M Benjamin Sabath, et al. 2019. “Ensemble-Based Model Pm2. 5 Concentration Across Contiguous United States High Spatiotemporal Resolution.” Environment International 130: 104909. doi:10.1016/j.envint.2019.104909 . Di, Qian, Yaguang Wei, Alexandra Shtein, Carolynne Hultquist, Xiaoshi Xing, Heresh Amini, Liuhua Shi, et al. 2021. “Daily Annual Pm2.5 Concentrations Contiguous United States, 1-Km Grids, V1 (2000 - 2016).” NASA Socioeconomic Data; Applications Center (SEDAC). doi:10.7927/0rvr-4538 .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/train_it.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate Prediction Model — train_it","title":"Generate Prediction Model — train_it","text":"Function develop prediction model based user's preferences.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/train_it.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate Prediction Model — train_it","text":"","code":"train_it(target, input, sl_lib_internal = NULL, ...)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/train_it.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate Prediction Model — train_it","text":"target vector target data. input vector, matrix, dataframe input data. sl_lib_internal internal library used SuperLearner ... Model related parameters provided.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/train_it.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate Prediction Model — train_it","text":"prediction model","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/transform_it.html","id":null,"dir":"Reference","previous_headings":"","what":"Transform data — transform_it","title":"Transform data — transform_it","text":"Transforms data new values.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/transform_it.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Transform data — transform_it","text":"","code":"transform_it(c_name, c_val, transformer)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/transform_it.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Transform data — transform_it","text":"c_name column (attribute) name. c_val column value transformer transformer function.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/transform_it.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Transform data — transform_it","text":"Returns transformed data.frame.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_gps.html","id":null,"dir":"Reference","previous_headings":"","what":"Trim a gps object based on provided trimming quantiles — trim_gps","title":"Trim a gps object based on provided trimming quantiles — trim_gps","text":"Trims gps object based provided trimming quantiles.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_gps.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trim a gps object based on provided trimming quantiles — trim_gps","text":"","code":"trim_gps(gps_obj, trim_quantiles)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_gps.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trim a gps object based on provided trimming quantiles — trim_gps","text":"gps_obj gps S3 object. trim_quantiles vector trimming quantiles two min max values.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_gps.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trim a gps object based on provided trimming quantiles — trim_gps","text":"trimmed gps_obj","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_it.html","id":null,"dir":"Reference","previous_headings":"","what":"Trim a data frame or an S3 object — trim_it","title":"Trim a data frame or an S3 object — trim_it","text":"Trims data frame S3 object's .data attributs.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_it.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Trim a data frame or an S3 object — trim_it","text":"","code":"trim_it(data_obj, trim_quantiles, variable)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_it.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Trim a data frame or an S3 object — trim_it","text":"data_obj data frame S3 object containing data trimmed. data frame, function operates directly . S3 object, function expects .data attribute containing data. trim_quantiles numeric vector length 2 specifying lower upper quantiles used trimming data. variable name variable data trimming applied.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_it.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Trim a data frame or an S3 object — trim_it","text":"Returns trimmed data frame S3 object $.data attribute trimmed, depending input type.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/trim_it.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Trim a data frame or an S3 object — trim_it","text":"","code":"# Example usage with a data frame df <- data.frame(id = 1:10, value = rnorm(100)) trimmed_df <- trim_it(df, c(0.1, 0.9), \"value\") # Example usage with an S3 object data_obj <- list() class(data_obj) <- \"myobject\" data_obj$.data <- df trimmed_data_obj <- trim_it(data_obj, c(0.1, 0.9), \"value\")"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/w_fun.html","id":null,"dir":"Reference","previous_headings":"","what":"Helper function — w_fun","title":"Helper function — w_fun","text":"Helper function","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/w_fun.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Helper function — w_fun","text":"","code":"w_fun(bw, matched_w, w_vals)"},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/w_fun.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Helper function — w_fun","text":"bw bandwidth value matched_w vector continuous exposure variable matched set. w_vals vector values want calculate values ERF .","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/reference/w_fun.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Helper function — w_fun","text":"return value (TODO)","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-041-2023-09-29","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.4.1 (2023-09-29)","title":"CausalGPS 0.4.1 (2023-09-29)","text":"CRAN release: 2023-09-29","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-4-1","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.4.1 (2023-09-29)","text":"Extra step check consistency delta_n exposure range. Software paper examples added.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-4-1","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.4.1 (2023-09-29)","text":"Plotting pseudo population includes object details. Set include_details = TRUE. *generate_pseudo_pop take Y input.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-040-2023-05-25","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.4.0 (2023-05-25)","title":"CausalGPS 0.4.0 (2023-05-25)","text":"CRAN release: 2023-05-25","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-4-0","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.4.0 (2023-05-25)","text":"Docker image supports R 4.2.3 generate_syn_data supports vectorized_y accelerate data generation. matching_fun –> dist_measure matching_l1 –> matching_fn estimate_semipmetric_erf now takes gam models optional arguments. estimate_pmetric_erf now takes gnm models optional arguments. trim_quantiles –> exposure_trim_qtls generate_pseudo_pop function accepts gps_obj optional input. internal_use part parameters estimate_gps function. estimate_gps function returns id, w, computed gps part dataset. Now design analysis phases explicitly separated. gps_model –> gps_density. Now takes, normal kernel options instead parametric non-parametric options.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-4-0","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.4.0 (2023-05-25)","text":"estimate_npmetric_erf supports locpol KernSmooth approaches. gps_trim_qtls input parameter trim data samples based gps values. Now users can also collect original data pseudo population object.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-4-0","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.4.0 (2023-05-25)","text":"bug swapping transformed covairates original one.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-031-2023-05-15","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.3.1 (2023-05-15)","title":"CausalGPS 0.3.1 (2023-05-15)","text":"CRAN release: 2023-05-16","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-3-1","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.3.1 (2023-05-15)","text":"unit tests less accuracy overcome bug stats::density function.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-030-2023-02-15","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.3.0 (2023-02-15)","title":"CausalGPS 0.3.0 (2023-02-15)","text":"CRAN release: 2023-02-15","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-3-0","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.3.0 (2023-02-15)","text":"Unit tests support new wCorr release (#193). optimized compilation supported. previous versions, approach known optimzied_compile == TRUE.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-3-0","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.3.0 (2023-02-15)","text":"earth package part suggested packages.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-029-2022-12-16","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.2.9 (2022-12-16)","title":"CausalGPS 0.2.9 (2022-12-16)","text":"CRAN release: 2022-12-16","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-9","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.9 (2022-12-16)","text":"fixed bug based covariate balance threshold (#178, @naeemkh). estimate_npmetric_erf assigns user-defined log file.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-9","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.9 (2022-12-16)","text":"process now prints progress message based selected thresholds. matched_Y –> m_Y matched_w –> m_w matched_cw –> counter_weight estimate_npmetric_erf function, matched_cw input now mandatory. Internal kernel smoothing now uses locpol::locpol function. entire data set trimmed based trimming quantiles. earth ranger installed automatically. can installed manually needed. sysdata.rda modified reflect transition counter ipw counter_weight counter_weight used counter weight, matching weighting approaches. counter ipw dropped. sl_lib becomes required argument. package transferred NSAPH-Software Github account. Summary function gpsm_pspop S3 object returns details adjusting process.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-2-9","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.2.9 (2022-12-16)","text":"Now Kolmogorov-Smirnov(KS) statistics provided computed pseudo population. effect size generated pseudo population computed reported. Binary search approach used scale = 1. pseodo_pop also includes covariate column names. compute_closest_wgps_helper_no_sc added take care mostly used special case (scale = 1).","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"removed-0-2-9","dir":"Changelog","previous_headings":"","what":"Removed","title":"CausalGPS 0.2.9 (2022-12-16)","text":"Dropped importing KernSmooth tidyr packages. pred_model argument dropped. package predicts using SuperLearner.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-028-2022-06-22","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.2.8 (2022-06-22)","title":"CausalGPS 0.2.8 (2022-06-22)","text":"CRAN release: 2022-06-22","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-8","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.8 (2022-06-22)","text":"Message implemented methods changed reduce misunderstanding. Empty counter raise error estimating non-parametric response function.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-8","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.8 (2022-06-22)","text":"matching_l1 returns frequency table instead entire vector. Vectorized population compilation used data.table multi-thread assignment. Removed nested parallelism compiling pseudo population, results close control memory. estimate_npmetric_erf also returns optimal h risk values.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-2-8","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.2.8 (2022-06-22)","text":"estimate_gps returns optimal hyperparameters. estimate_gps returns S3 object. Internal xgboost approach support verbose parameter. Pseudo-population object now report parameters used best covariate balance.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-027-2022-02-04","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.2.7 (2022-02-04)","title":"CausalGPS 0.2.7 (2022-02-04)","text":"CRAN release: 2022-02-07","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-7","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.7 (2022-02-04)","text":"Naming covariate balance scores.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-7","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.7 (2022-02-04)","text":"Restarting adaptive approach keep trying maximum attempt.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-2-7","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.2.7 (2022-02-04)","text":"Synthetic data (synthetic_us_2010) Check defined covariate balance (absolute_corr_fun, absolute_weighted_corr_fun) Covariate balance threshold type: mean, median, maximal. Improved test coverage. Singularity definition file.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-026-2021-09-06","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.2.6 (2021-09-06)","title":"CausalGPS 0.2.6 (2021-09-06)","text":"CRAN release: 2021-09-06","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-2-6","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.2.6 (2021-09-06)","text":"added status optimized compile generate_pseudo_pop function output. compute_closest_wgps accepts number user-defined threads.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-6","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.6 (2021-09-06)","text":"Vignette file names. trim condition > < >= <=. Removed seed input generate_syn_data function. R package, setting seed value inside function recommended. Users can set seed using function. OpenMP uses user defined number cores.","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-6","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.6 (2021-09-06)","text":"Initial covariate balance weighted approach. counter column preallocated correctly. Counter value compiling. initial value set one, , however, zero correct one. Private variable issue OpenMP. Fixed OpenMP option macOS checks.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"causalgps-025-2021-07-23","dir":"Changelog","previous_headings":"","what":"CausalGPS 0.2.5 (2021-07-23)","title":"CausalGPS 0.2.5 (2021-07-23)","text":"CRAN release: 2021-07-23","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-5","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.5 (2021-07-23)","text":"User needs activate logger","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-5","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.5 (2021-07-23)","text":"CRAN package URLs canonical forms.","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-2-4","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.2.4 (2021-07-11)","text":"OpenMP Rcpp code optimized_compile log_system_info() Frequently asked questions logo","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-4","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.4 (2021-07-11)","text":"estimate_gps.Rmd estimate_semi_erf -> estimate_semipmetric_erf estimate_erf -> estimate_npmetric_erf estimate_hr -> estimate_pmetric_erf gen_pseudo_pop -> generate_pseudo_pop gen_syn_data -> generate_syn_data estimate_erf accepts counter input estimate_erf can use multiple cores generating_pseudo_population.Rmd estimate_erf function description estimate_hr function description estimate_semi_erf function description compute_risk function description return value outcome_models.Rmd generate_synthetic_data.Rmd","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-4","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.4 (2021-07-11)","text":"Rcpp parLapply worker processors arguments","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"removed-0-2-4","dir":"Changelog","previous_headings":"","what":"Removed","title":"CausalGPS 0.2.4 (2021-07-11)","text":"running_appr","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"fixed-0-2-3","dir":"Changelog","previous_headings":"","what":"Fixed","title":"CausalGPS 0.2.3 (2021-05-12)","text":"Fixed documentations","code":""},{"path":[]},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"added-0-2-2","dir":"Changelog","previous_headings":"","what":"Added","title":"CausalGPS 0.2.2 (2021-05-12)","text":"estimate_semi_erf estimate_hr","code":""},{"path":"https://NSAPH-Software.github.io/CausalGPS/news/index.html","id":"changed-0-2-2","dir":"Changelog","previous_headings":"","what":"Changed","title":"CausalGPS 0.2.2 (2021-05-12)","text":"Package name: GPSmatching –> CausalGPS","code":""}] diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 24b4fdfd..33dacf46 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -66,6 +66,18 @@ https://NSAPH-Software.github.io/CausalGPS/reference/absolute_weighted_corr_fun.html + + https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_cw.html + + + https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_erf.html + + + https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_gps.html + + + https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.cgps_pspop.html + https://NSAPH-Software.github.io/CausalGPS/reference/autoplot.gpsm_erf.html @@ -96,6 +108,9 @@ https://NSAPH-Software.github.io/CausalGPS/reference/compute_closest_wgps.html + + https://NSAPH-Software.github.io/CausalGPS/reference/compute_counter_weight.html + https://NSAPH-Software.github.io/CausalGPS/reference/compute_density.html @@ -120,6 +135,9 @@ https://NSAPH-Software.github.io/CausalGPS/reference/create_weighting.html + + https://NSAPH-Software.github.io/CausalGPS/reference/estimate_erf.html + https://NSAPH-Software.github.io/CausalGPS/reference/estimate_gps.html @@ -162,6 +180,18 @@ https://NSAPH-Software.github.io/CausalGPS/reference/matching_l1.html + + https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_cw.html + + + https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_erf.html + + + https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_gps.html + + + https://NSAPH-Software.github.io/CausalGPS/reference/plot.cgps_pspop.html + https://NSAPH-Software.github.io/CausalGPS/reference/plot.gpsm_erf.html @@ -171,6 +201,18 @@ https://NSAPH-Software.github.io/CausalGPS/reference/preprocess_data.html + + https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_cw.html + + + https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_erf.html + + + https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_gps.html + + + https://NSAPH-Software.github.io/CausalGPS/reference/print.cgps_pspop.html + https://NSAPH-Software.github.io/CausalGPS/reference/print.gpsm_erf.html @@ -189,6 +231,18 @@ https://NSAPH-Software.github.io/CausalGPS/reference/smooth_erf_locpol.html + + https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_cw.html + + + https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_erf.html + + + https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_gps.html + + + https://NSAPH-Software.github.io/CausalGPS/reference/summary.cgps_pspop.html + https://NSAPH-Software.github.io/CausalGPS/reference/summary.gpsm_erf.html @@ -207,6 +261,9 @@ https://NSAPH-Software.github.io/CausalGPS/reference/trim_gps.html + + https://NSAPH-Software.github.io/CausalGPS/reference/trim_it.html + https://NSAPH-Software.github.io/CausalGPS/reference/w_fun.html diff --git a/man/absolute_corr_fun.Rd b/man/absolute_corr_fun.Rd old mode 100755 new mode 100644 diff --git a/man/absolute_weighted_corr_fun.Rd b/man/absolute_weighted_corr_fun.Rd old mode 100755 new mode 100644 diff --git a/man/autoplot.gpsm_erf.Rd b/man/autoplot.gpsm_erf.Rd deleted file mode 100755 index e4875009..00000000 --- a/man/autoplot.gpsm_erf.Rd +++ /dev/null @@ -1,20 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plot.R -\name{autoplot.gpsm_erf} -\alias{autoplot.gpsm_erf} -\title{A helper function for gpsm_erf object} -\usage{ -\method{autoplot}{gpsm_erf}(object, ...) -} -\arguments{ -\item{object}{A gpsm_erf object.} - -\item{...}{Additional arguments passed to customize the plot.} -} -\value{ -Returns a ggplot object. -} -\description{ -A helper function to plot gpsm_erf object using ggplot2 package. -} -\keyword{internal} diff --git a/man/check_args.Rd b/man/check_args.Rd old mode 100755 new mode 100644 diff --git a/man/check_args_compile_pseudo_pop.Rd b/man/check_args_compile_pseudo_pop.Rd old mode 100755 new mode 100644 diff --git a/man/check_args_estimate_gps.Rd b/man/check_args_estimate_gps.Rd old mode 100755 new mode 100644 diff --git a/man/check_args_use_cov_transformers.Rd b/man/check_args_use_cov_transformers.Rd old mode 100755 new mode 100644 diff --git a/man/check_covar_balance.Rd b/man/check_covar_balance.Rd old mode 100755 new mode 100644 diff --git a/man/compile_pseudo_pop.Rd b/man/compile_pseudo_pop.Rd old mode 100755 new mode 100644 diff --git a/man/compute_closest_wgps.Rd b/man/compute_closest_wgps.Rd old mode 100755 new mode 100644 diff --git a/man/compute_density.Rd b/man/compute_density.Rd old mode 100755 new mode 100644 diff --git a/man/compute_min_max.Rd b/man/compute_min_max.Rd old mode 100755 new mode 100644 diff --git a/man/compute_outer.Rd b/man/compute_outer.Rd old mode 100755 new mode 100644 diff --git a/man/compute_resid.Rd b/man/compute_resid.Rd old mode 100755 new mode 100644 diff --git a/man/compute_risk.Rd b/man/compute_risk.Rd old mode 100755 new mode 100644 diff --git a/man/create_matching.Rd b/man/create_matching.Rd old mode 100755 new mode 100644 diff --git a/man/estimate_gps.Rd b/man/estimate_gps.Rd old mode 100755 new mode 100644 diff --git a/man/estimate_hat_vals.Rd b/man/estimate_hat_vals.Rd old mode 100755 new mode 100644 diff --git a/man/figures/png/process_flow.png b/man/figures/png/process_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..1da4d09763c0bf0c871895928c42c53d9154fa90 GIT binary patch literal 147161 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%0D38Aa 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 dXtZ_zh>l$t*|=8RGyHXtVlof2@9RGQe*l{;Ez