Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 18 additions & 12 deletions R/assertions.R
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ assert_valid_sex <- function(sex) {

assert_valid_age_in_days <- function(age_in_days) {
if (!is.numeric(age_in_days)) {
stop("Parameter `age_in_days` must be integer values",
stop(
"Parameter `age_in_days` must be integer values",
" or values that can be coerced to integers",
call. = FALSE
)
Expand Down Expand Up @@ -51,26 +52,27 @@ deparse_chr <- function(expr) {
}

assert_logical <- function(x) {
assert_type(is.logical, "logical", x,
param_name = deparse_chr(substitute(x))
)
assert_type(is.logical, "logical", x, param_name = deparse_chr(substitute(x)))
}

assert_numeric <- function(x) {
assert_type(is.numeric, "numeric", x,
param_name = deparse_chr(substitute(x))
)
assert_type(is.numeric, "numeric", x, param_name = deparse_chr(substitute(x)))
}

assert_character <- function(x) {
assert_type(is.character, "character", x,
assert_type(
is.character,
"character",
x,
param_name = deparse_chr(substitute(x))
)
}

assert_character_or_numeric <- function(x) {
assert_type(function(y) is.character(y) || is.numeric(y),
"character or numeric", x,
assert_type(
function(y) is.character(y) || is.numeric(y),
"character or numeric",
x,
param_name = deparse_chr(substitute(x))
)
}
Expand All @@ -86,8 +88,12 @@ assert_type <- function(type_fun, type_name, x, param_name) {
assert_values_in_set <- function(x, allowed) {
param_name <- as.character(substitute(x))
if (length(allowed) > 0L && any(!(x %in% allowed))) {
stop("Some values in ", param_name, " are not valid.",
" Accepted values are ", paste0(allowed, collapse = ", "),
stop(
"Some values in ",
param_name,
" are not valid.",
" Accepted values are ",
paste0(allowed, collapse = ", "),
call. = FALSE
)
}
Expand Down
15 changes: 11 additions & 4 deletions R/prevalence-compute-api.R
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,30 @@ NULL
#' Computes the sample size by indicator and subset
#' @noRd
compute_prevalence_sample_size_by <- function(
data, indicator, subset_col_name
data,
indicator,
subset_col_name
) {
UseMethod("compute_prevalence_sample_size_by")
}

#' Computes prevalence of rates for a given indicator, subset and cutoff
#' @noRd
compute_prevalence_estimates_for_column_by <- function(
data, indicator_name, subset_col_name, prev_col_name
){
data,
indicator_name,
subset_col_name,
prev_col_name
) {
UseMethod("compute_prevalence_estimates_for_column_by")
}

#' Computes prevalence of zscores by indicator and subset
#' @noRd
compute_prevalence_zscore_summaries_by <- function(
data, indicator, subset_col_name
data,
indicator,
subset_col_name
) {
UseMethod("compute_prevalence_zscore_summaries_by")
}
Expand Down
25 changes: 20 additions & 5 deletions R/prevalence-simple.R
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ column_values.simple_design <- function(x, col) {

#' @export
compute_prevalence_zscore_summaries_by.simple_design <- function(
data, indicator, subset_col_name) {
data,
indicator,
subset_col_name
) {
zscore_col_name <- prev_zscore_value_column(indicator)
compute_and_aggregate(
data,
Expand All @@ -42,7 +45,11 @@ compute_prevalence_zscore_summaries_by.simple_design <- function(

#' @export
compute_prevalence_estimates_for_column_by.simple_design <- function(
data, indicator_name, subset_col_name, prev_col_name) {
data,
indicator_name,
subset_col_name,
prev_col_name
) {
compute_and_aggregate(
data,
prev_col_name,
Expand All @@ -59,7 +66,10 @@ compute_prevalence_estimates_for_column_by.simple_design <- function(

#' @export
compute_prevalence_sample_size_by.simple_design <- function(
data, indicator, subset_col_name) {
data,
indicator,
subset_col_name
) {
column_name <- prev_prevalence_column_name(indicator)
compute_and_aggregate(
data,
Expand All @@ -75,7 +85,12 @@ compute_prevalence_sample_size_by.simple_design <- function(

#' @importFrom stats aggregate
compute_and_aggregate <- function(
data, value_column, subset_column, compute, empty_data_prototype) {
data,
value_column,
subset_column,
compute,
empty_data_prototype
) {
col_values <- column_values(data, value_column)
N <- length(col_values)
grouping <- column_values(data, subset_column)
Expand Down Expand Up @@ -164,5 +179,5 @@ sample_size <- function(x, N, empty_data_prototype) {
sample_se <- function(x, x_mean, n, N) {
scale <- N / (N - 1)
x_deviation <- x - x_mean
sqrt(scale)/n * sqrt(sum(x_deviation * x_deviation))
sqrt(scale) / n * sqrt(sum(x_deviation * x_deviation))
}
19 changes: 15 additions & 4 deletions R/prevalence-survey.R
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ column_names.survey_design <- function(x) {

#' @export
compute_prevalence_zscore_summaries_by.survey_design <- function(
data, indicator, subset_col_name) {
data,
indicator,
subset_col_name
) {
zscore_col_name <- prev_zscore_value_column(indicator)
zscore_formula <- as.formula(paste0("~", zscore_col_name))
subset_formula <- as.formula(paste0("~", subset_col_name))
Expand Down Expand Up @@ -68,7 +71,10 @@ compute_prevalence_zscore_summaries_by.survey_design <- function(

#' @export
compute_prevalence_sample_size_by.survey_design <- function(
data, indicator, subset_col_name) {
data,
indicator,
subset_col_name
) {
expr_name <- paste0("I(!is.na(", prev_prevalence_column_name(indicator), "))")
prev_formula <- as.formula(paste0("~", expr_name))
subset_formula <- as.formula(paste0("~", subset_col_name))
Expand All @@ -93,7 +99,8 @@ compute_prevalence_sample_size_by.survey_design <- function(
pop_weighted[is.na(pop_weighted)] <- 0
pop_unweighted[is.na(pop_unweighted)] <- 0

stopifnot( # check that subsets come in the right order
stopifnot(
# check that subsets come in the right order
all(prev[[subset_col_name]] == unweighted_prev[[subset_col_name]])
)
data.frame(
Expand All @@ -107,7 +114,11 @@ compute_prevalence_sample_size_by.survey_design <- function(

#' @export
compute_prevalence_estimates_for_column_by.survey_design <- function(
data, indicator_name, subset_col_name, prev_col_name) {
data,
indicator_name,
subset_col_name,
prev_col_name
) {
subset_formula <- as.formula(paste0("~", subset_col_name))
prev_col_formula <- as.formula(paste0("~", prev_col_name))
mean_est_prev <- svyby(
Expand Down
Loading