library(magrittr) library(readxl) library(ggplot2) library(lubridate) library(gridExtra) library(knitr) library(kableExtra) knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE, fig.pos = '!H') options(qwraps2_markup = 'rmarkdown') options(knitr.table.format = "latex") # Qwraps2 parameters prec <- 1 #kableExtra table parameters table_fs <- 7 figsize <- 3 total_row_ft <- "gray" total_row_ft2 <- "white" striped_row_bg <- "gray!10" total_row_bg2 <- "gray"
is_india <- Sys.getenv('TIMCI_COUNTRY') == 'India' is_tanzania <- Sys.getenv('TIMCI_COUNTRY') == 'Tanzania' is_kenya <- Sys.getenv('TIMCI_COUNTRY') == 'Kenya' is_senegal <- Sys.getenv('TIMCI_COUNTRY') == 'Senegal' is_rct <- is_tanzania | is_india is_ls <- is_kenya | is_senegal
if (is_india) { hospit_value <- 13 } else{ hospit_value <- 1 } day7_wmin <- 7 day7_wmax <- 10 day28_wmin <- 28 day28_wmax <- 32
\fancypagestyle{plain}{\pagestyle{fancy}} \pagestyle{fancy} \fancyhf{} \setlength{\headheight}{32pt} \renewcommand{\headrulewidth}{0pt} \fancyhead[C]{\includegraphics[width=10cm]{banner.png}} \fancyfoot[R]{Page \thepage\ of \pageref{LastPage}} \fancyfoot[L]{TIMCI Data Monitoring Report v1.0}
\setcounter{tocdepth}{2} \tableofcontents
\clearpage
r notice_str
r intro_str
start_date <- params$start_date end_date <- params$end_date sample_target <- params$sample_target if (!is.null(params$facility_data)) { facility_data <- params$facility_data raw_day7fu_data <- params$raw_day7fu_data raw_hospit_data <- params$raw_hospit_data raw_day28fu_data <- params$raw_day28fu_data raw_withdrawal_data <- params$raw_withdrawal_data wfa_data <- params$wfa_data is_pilot <- params$is_pilot }
if (nrow(facility_data) > 0) { week_nb <- ceiling(difftime(as.Date(end_date), as.Date(start_date) - 1, units = "weeks")) days_nb <- sum(!lubridate::wday(seq(as.Date(start_date), as.Date(end_date), "days")) %in% c("7", "1")) if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') { date_boundary_str <- paste0("Ce rapport couvre la période du **", start_date, "** (début de l'étude) au **", end_date, "** (semaine **", week_nb, "** de l'étude) pour le **Sénégal**.") } else { date_boundary_str <- paste0("This report covers the period from **", start_date, "** (study start) to **", end_date, "** (week **", week_nb,"** of the study) for **", Sys.getenv('TIMCI_COUNTRY'), "**.") } cat(date_boundary_str) }
\clearpage
r h1_general
r h2_global_indicators
if (Sys.getenv('TIMCI_COUNTRY') == "Senegal") { day_target <- enrolment_target * facility_nb } else if (Sys.getenv('TIMCI_COUNTRY') == "Tanzania" | Sys.getenv('TIMCI_COUNTRY') == "Kenya") { cat(paste0("Daily enrolment target: ", dispensary_enrolment_target, " (dispensaries) and ", hc_enrolment_target, " (health centres), with ", enrolment_target, " as an average target if the facility type is not taken into account")) } else if (Sys.getenv('TIMCI_COUNTRY') == "India") { cat(paste0("Daily enrolment target: ", ceiling(dispensary_enrolment_target), " (PHCs) and ", ceiling(hc_enrolment_target), " (CHCs), with ", enrolment_target, " as an average target if the facility type is not taken into account")) }
ind1 <- timci::plot_numeric_indicator(val = days_nb, lbl = wdays_str) ind2 <- timci::plot_numeric_indicator(val = sample_target, lbl = sample_size_str) ind3 <- timci::plot_numeric_indicator(val = enrolment_target, lbl = enrolment_target_str) gridExtra::grid.arrange(ind1, ind2, ind3, ncol = 3, nrow = 1, widths = grid::unit(c(5,5,5), c("cm", "cm", "cm")))
plot0 <- timci::plot_gauge(n_enrolled/sample_target, plot0_str, 100, 50, 80, scale = 0.4) if (Sys.getenv('TIMCI_COUNTRY') == "India") { plot1 <- timci::plot_gauge(n_enrolled28/(min(24, days_nb) * day_target), plot1_str, 100, 50, 80, scale = 0.4) plot2 <- timci::plot_gauge(n_enrolled7/(min(6, days_nb) * day_target), plot2_str, 100, 50, 80, scale = 0.4) } else { plot1 <- timci::plot_gauge(n_enrolled28/(min(20, days_nb) * day_target), plot1_str, 100, 50, 80, scale = 0.4) plot2 <- timci::plot_gauge(n_enrolled7/(min(5, days_nb) * day_target), plot2_str, 100, 50, 80, scale = 0.4) } plot3 <- timci::plot_gauge(n_enrolled/(n_screened - n_repeat), plot3_str, 100, 50, 80, scale = 0.4)
write(n_completed_day7fu,stderr()) write(n_due_day7fu, stderr())
if (n_due_day7fu > 0) { n_day7fu_rate <- n_completed_day7fu/n_due_day7fu n_day7fu_rate100 <- round(100 * n_day7fu_rate, prec) plot4 <- timci::plot_gauge(n_day7fu_rate, plot4_str, 100, 50, 80, scale = 0.4) plot5 <- timci::plot_gauge(n_valid_day7fu/n_due_day7fu, plot5_str, 100, 50, 80, scale = 0.4) }
if (Sys.getenv('TIMCI_COUNTRY') == "Tanzania" || Sys.getenv('TIMCI_COUNTRY') == "India") { day28fu_data <- NULL if (!is.null(raw_day28fu_data)) { if (nrow(raw_day28fu_data) > 1) { day28fu_data_list <- timci::format_day28_data(raw_day28fu_data) # Extract and clean all Day 28 follow-up data day28fu_data <- day28fu_data_list[[3]] day28fu_data <- day28fu_data[day28fu_data$child_id %in% baseline_data$child_id, ] # Extract and clean successful Day 28 follow-up data succ_day28fu_data <- day28fu_data_list[[1]] succ_day28fu_data <- clean_followup_for_rate_estimation(baseline_data, succ_day28fu_data) # Extract and clean all Day 28 follow-up attempts attempts_day28fu_data <- day28fu_data[day28fu_data$child_id %in% baseline_data$child_id, ] %>% dplyr::mutate(attempted_day28 = 1) %>% dplyr::distinct_at(dplyr::vars(child_id), .keep_all = TRUE) n_completed_day28fu <- sum((as.Date(succ_day28fu_data$date_day0, "%Y-%m-%d") + day28_wmin) <= Sys.Date(), na.rm = TRUE) n_valid_day28fu <- sum(((as.Date(succ_day28fu_data$date_day0, "%Y-%m-%d") + day28_wmin) <= Sys.Date()) & (succ_day28fu_data$days >= day28_wmin) & (succ_day28fu_data$days <= day28_wmax), na.rm = TRUE) } else { n_completed_day28fu <- 0 n_valid_day28fu <- 0 } } else { n_completed_day28fu <- 0 n_valid_day28fu <- 0 } n_due_day28fu <- sum((as.Date(demog_data$date_visit, "%Y-%m-%d") + day28_wmin) <= Sys.Date()) }
if (n_due_day28fu > 0) { plot7 <- timci::plot_gauge(n_completed_day28fu/n_due_day28fu, "Day 28 follow-up rate", 100, 50, 80, scale = 0.4) plot8 <- timci::plot_gauge(n_valid_day28fu/n_due_day28fu, "Day 28 follow-up rate\nwithin the time window", 100, 50, 80, scale = 0.4) }
write(n_completed_day28fu,stderr()) write(n_due_day28fu, stderr())
n_completed_hospitfu <- 0 hospit_data <- NULL if (nrow(raw_hospit_data) > 0) { hospit_data <- format_hospital_data(raw_hospit_data) %>% dplyr::distinct_at(dplyr::vars(child_id), .keep_all = TRUE) hospit_data <- hospit_data[hospit_data$child_id %in% baseline_data$child_id, ] n_completed_hospitfu <- sum(hospit_data$hospit == 1, na.rm = TRUE) } plot9 <- timci::plot_gauge(n_completed_hospitfu/n_due_hospitfu, "Documented hospitalisation rate", 100, 50, 80, scale = 0.4)
write(paste0("completed = ", n_completed_hospitfu), stderr()) write(paste0("due = ",n_due_hospitfu), stderr())
if (n_due_day7fu > 0) { if (Sys.getenv('TIMCI_COUNTRY') == "Tanzania" || Sys.getenv('TIMCI_COUNTRY') == "India") { if (n_due_day28fu > 0){ gridExtra::grid.arrange(plot0, plot1, plot2, plot3, plot4, plot5, plot7, plot8, plot9, ncol = 3, nrow = 3, widths = grid::unit(c(6,6,6), c("cm", "cm", "cm")), heights = grid::unit(c(4,4,4), c("cm", "cm", "cm"))) } else{ gridExtra::grid.arrange(plot0, plot1, plot2, plot3, plot4, plot5, plot9, ncol = 3, nrow = 3, widths = grid::unit(c(6,6,6), c("cm", "cm", "cm")), heights = grid::unit(c(4,4,4), c("cm", "cm", "cm"))) } } else{ gridExtra::grid.arrange(plot0, plot1, plot2, plot3, plot4, plot5, plot9, ncol = 3, nrow = 3, widths = grid::unit(c(6,6,6), c("cm", "cm", "cm")), heights = grid::unit(c(4,4,4), c("cm", "cm", "cm"))) } } else{ gridExtra::grid.arrange(plot0, plot1, plot2, plot3, ncol = 3, nrow = 3, widths = grid::unit(c(6,6,6), c("cm", "cm", "cm")), heights = grid::unit(c(4,4,4), c("cm", "cm", "cm"))) }
visit_names <- c(all_str, visit_names) submissions <- c(n_total, submissions) out <- data.frame(visit_names, submissions) out %>% kableExtra::kbl(booktabs = TRUE, linesep = "", col.names = c("Submission", "N"), align = c("l", "c"), caption = submission_table_cap, escape = FALSE) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) %>% kableExtra::footnote(number = c("Day 0 visit (enrolment on the same day as the screening).", "All other visits that occur during the enrolment period."), escape = FALSE)
r h2_completion_status
r h3_completion_status_overall
For the purposes of this report, full completion is defined as \begin{itemize} \item [India, Tanzania] "the participant has completed the Day 7 and the Day 28 follow-ups visit" \item [Kenya, Senegal] "the participant has completed the Day 7 follow-ups visit" \end{itemize}
In India and Tanzania, partial completion is defined as "the participant has completed either the Day 7 or the Day 28 follow-ups visit".
selected_variables <- c("child_id", "facility_name", "date_visit", "district", "referral_cg", "referral_hf") if (is_tanzania) { selected_variables <- c(selected_variables)#, "location_lvl1") } all <- baseline_data[, selected_variables] if (!is.null(day7fu_data)) { if (nrow(day7fu_data) > 0) { all <- all %>% merge(y = succ_day7fu_data[, c("child_id", "proceed_day7", "hf_visit_type", "status_day7", "admission", "date_call")], by = 'child_id', all.x = TRUE) %>% merge(y = attempts_day7fu_data[, c("child_id", "attempted_day7")], by = 'child_id', all.x = TRUE) } } # Create an empty column if Day 7 follow-up has not started yet all["proceed_day7"[!("proceed_day7" %in% colnames(all))]] <- 0 all["attempted_day7"[!("attempted_day7" %in% colnames(all))]] <- 0 all["hf_visit_type"[!("hf_visit_type" %in% colnames(all))]] <- 0 all["status_day7"[!("status_day7" %in% colnames(all))]] <- 0 all["admission"[!("admission" %in% colnames(all))]] <- 0 all$due_day7 <- (as.Date(all$date_visit, "%Y-%m-%d") + day7_wmin) <= Sys.Date() all$attempted_day7[is.na(all$attempted_day7)] <- 0 all$proceed_day7[is.na(all$proceed_day7)] <- 0 all$lost_day7 <- ((as.Date(all$date_visit, "%Y-%m-%d") + day7_wmax) <= Sys.Date()) & (all$proceed_day7 == 0)
if (!is.null(hospit_data)) { if (nrow(hospit_data) > 0) { all <- all %>% merge(y = hospit_data[, c("child_id", "found", "hospit")], by = 'child_id', all.x = TRUE) } } # Create an empty column if hospital follow-up has not started yet all["found"[!("found" %in% colnames(all))]] <- 96 all$found[is.na(all$found)] <- 96 all$hospit_visit <- (all$status_day7 == 2) | (all$hf_visit_type == hospit_value) all$hospit_visit[is.na(all$hospit_visit)] <- 0 all$reported_hospit <- (all$status_day7 == 2) | (all$admission == 1) all$reported_hospit[is.na(all$all$reported_hospit)] <- 0 all$hospit[is.na(all$hospit)] <- 96
if (!is.null(day28fu_data)) { if (nrow(day28fu_data) > 0) { all <- all %>% merge(y = succ_day28fu_data[, c("child_id", "proceed_day28")], by = 'child_id', all.x = TRUE) %>% merge(y = attempts_day28fu_data[, c("child_id", "attempted_day28")], by = 'child_id', all.x = TRUE) } } # Create an empty column if Day 28 follow-up has not started yet all["proceed_day28"[!("proceed_day28" %in% colnames(all))]] <- 0 all["attempted_day28"[!("attempted_day28" %in% colnames(all))]] <- 0 all$due_day28 <- (as.Date(all$date_visit, "%Y-%m-%d") + day28_wmin) <= Sys.Date() all$attempted_day28[is.na(all$attempted_day28)] <- 0 all$proceed_day28[is.na(all$proceed_day28)] <- 0 all$lost_day28 <- ((as.Date(all$date_visit, "%Y-%m-%d") + day28_wmax) <= Sys.Date()) & (all$proceed_day28 == 0)
fu_var_cpy <- all
completion_summary <- list( "Summary" = list( "Day 7 and Day 28" = ~qwraps2::n_perc(proceed_day7 == 1 & proceed_day28 == 1, prec), "Day 7 or Day 28" = ~qwraps2::n_perc(proceed_day7 == 1 | proceed_day28 == 1, prec), "None" = ~qwraps2::n_perc(proceed_day7 == 0 & proceed_day28 == 0, prec) ) ) out <- format_summary_table(all, completion_summary, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c"), caption = tcap_all_completion) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
r h3_completion_status_day7
completion_summary <- list( "Summary" = list( "Due" = ~qwraps2::n_perc(due_day7 == 1, prec) ) ) out <- format_summary_table(all, completion_summary, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c"), caption = tcap_day7fu_due) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- fu_var_cpy %>% dplyr::filter(due_day7 == 1) completion_summary <- list( "Summary" = list( "Attempted" = ~qwraps2::n_perc(attempted_day7 == 1, prec), "Completed" = ~qwraps2::n_perc(proceed_day7 == 1, prec), "Lost" = ~qwraps2::n_perc(lost_day7 == 1, prec) ) ) out <- format_summary_table(all, completion_summary, district) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c"), caption = tcap_due_day7fu_completion_by_district) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- fu_var_cpy %>% dplyr::filter(due_day7 == 1) completion_summary <- list( "Summary" = list( "Attempted" = ~qwraps2::n_perc(attempted_day7 == 1, prec), "Completed" = ~qwraps2::n_perc(proceed_day7 == 1, prec), "Lost" = ~qwraps2::n_perc(lost_day7 == 1, prec) ) ) out <- format_summary_table(all, completion_summary, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c"), caption = tcap_due_day7fu_completion) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- fu_var_cpy %>% dplyr::filter(due_day7 == 1)# %>% #dplyr::mutate(location_levels = ifelse(!is.na(location_lvl1), location_lvl1, location_lvl2)) %>% #dplyr::filter(!is.na(location_lvl1)) completion_summary <- list( "Summary" = list( "Attempted" = ~qwraps2::n_perc(attempted_day7 == 1, prec), "Completed" = ~qwraps2::n_perc(proceed_day7 == 1, prec), "Lost" = ~qwraps2::n_perc(lost_day7 == 1, prec) ) ) out <- format_summary_table(all, completion_summary, location_lvl1) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c"), caption = tcap_due_day7fu_completion) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
cat(h3_completion_status_day28)
all <- fu_var_cpy completion_summary <- list( "Summary" = list( "Due" = ~qwraps2::n_perc(due_day28 == 1, prec) ) ) out <- format_summary_table(all, completion_summary, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c"), caption = tcap_day28fu_completion) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- fu_var_cpy %>% dplyr::filter(due_day28 == 1) completion_summary <- list( "Summary" = list( "Attempted" = ~qwraps2::n_perc(attempted_day28 == 1, prec), "Completed" = ~qwraps2::n_perc(proceed_day28 == 1, prec), "Lost" = ~qwraps2::n_perc(lost_day28 == 1, prec) ) ) out <- format_summary_table(all, completion_summary, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c"), caption = tcap_day28fu_completion) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
r h3_completion_status_hospital
visit_all <- fu_var_cpy %>% dplyr::filter(hospit_visit == 1) completion_summary <- list( "Summary" = list( "Attempted" = ~qwraps2::n_perc(found == 0 | found == 1, prec), "Completed" = ~qwraps2::n_perc(found == 1, prec), "Admitted" = ~qwraps2::n_perc(hospit == 1, prec), "Lost" = ~qwraps2::n_perc(found == 0, prec) ) ) if (nrow(visit_all) > 0) { out <- format_summary_table(visit_all, completion_summary, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c"), caption = tcap_hospit_visit_completion) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) }
hospitalisation_all <- fu_var_cpy %>% dplyr::filter(reported_hospit == 1) completion_summary <- list( "Summary" = list( "Attempted" = ~qwraps2::n_perc(found == 0 | found == 1, prec), "Completed" = ~qwraps2::n_perc(found == 1, prec), "Admitted" = ~qwraps2::n_perc(hospit == 1, prec), "Non admitted" = ~qwraps2::n_perc(hospit == 0, prec), "Lost" = ~qwraps2::n_perc(found == 0, prec) ) ) if (nrow(hospitalisation_all) > 0) { out <- format_summary_table(hospitalisation_all, completion_summary, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c", "c", "c"), caption = tcap_hospitalisation_completion) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) }
\clearpage
r h1_participants
r weekly_enrolment_hdr2
if (!is.null(baseline_data)){ if (length(baseline_data) > 0 & nrow(baseline_data) > 0) { if (Sys.getenv('TIMCI_COUNTRY') == "India") { val <- day_target * 6 } else { val <- day_target * 5 } p <- timci::generate_week_bar_plot(date_vec = baseline_data$date_visit, date_min = as.Date(start_date), date_max = as.Date(as.Date(end_date) + 7), ylbl = paste0(enrolment_str), rref = val, relative = FALSE) plot(p) } }
if (!is.null(baseline_data)){ if (length(baseline_data) > 0 & nrow(baseline_data) > 0) { baseline_data %>% dplyr::mutate(Week = lubridate::floor_date(as.Date(date_visit), "week", week_start = getOption("lubridate.week.start", 1))) %>% dplyr::count(Week) %>% dplyr::mutate(csum = cumsum(n)) %>% dplyr::rename('Weekly recruitment' = 'n') %>% dplyr::rename('Cumulative recruitment' = 'csum') %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("l", "c", "c"), caption = tcap_weekly_enrolment) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(baseline_data)/2) * 2, background = striped_row_bg) } }
if (!is.null(baseline_data)){ if (length(baseline_data) > 0 & nrow(baseline_data) > 0) { baseline_data <- baseline_data %>% merge(y = facilities[,c("facility_id", "training_date", "rollout_date")], by.x = 'fid', by.y = 'facility_id', all.x = TRUE) pre_intervention_data <- baseline_data %>% dplyr::filter(is.na(training_date) | as.Date(date_visit) < as.Date(training_date)) post_intervention_data <- baseline_data %>% dplyr::filter(!is.na(rollout_date) & as.Date(date_visit) >= as.Date(rollout_date)) } }
if (!is.null(pre_intervention_data)){ if (length(pre_intervention_data) > 0 & nrow(pre_intervention_data) > 0) { pre_intervention_data %>% dplyr::mutate(Week = lubridate::floor_date(as.Date(date_visit), "week", week_start = getOption("lubridate.week.start", 1))) %>% dplyr::count(Week) %>% dplyr::mutate(csum = cumsum(n)) %>% dplyr::rename('Weekly recruitment' = 'n') %>% dplyr::rename('Cumulative recruitment' = 'csum') %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("l", "c", "c"), caption = tcap_weekly_enrolment_pre) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(pre_intervention_data)/2) * 2, background = striped_row_bg) } }
if (!is.null(post_intervention_data)){ if (length(post_intervention_data) > 0 & nrow(post_intervention_data) > 0) { post_intervention_data %>% dplyr::mutate(Week = lubridate::floor_date(as.Date(date_visit), "week", week_start = getOption("lubridate.week.start", 1))) %>% dplyr::count(Week) %>% dplyr::mutate(csum = cumsum(n)) %>% dplyr::rename('Weekly recruitment' = 'n') %>% dplyr::rename('Cumulative recruitment' = 'csum') %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("l", "c", "c"), caption = tcap_weekly_enrolment_post) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(post_intervention_data)/2) * 2, background = striped_row_bg) } }
if (!is.null(baseline_data)){ if (length(baseline_data) > 0 & nrow(baseline_data) > 0) { baseline_data %>% dplyr::mutate(Month = format.Date(as.Date(date_visit), "%Y-%m")) %>% dplyr::count(Month) %>% dplyr::mutate(csum = cumsum(n)) %>% dplyr::rename('Monthly recruitment' = 'n') %>% dplyr::rename('Cumulative recruitment' = 'csum') %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("l", "c", "c"), caption = tcap_monthly_enrolment) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(baseline_data)/2) * 2, background = striped_row_bg) } }
if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') { cat("## Fréquentation hebdomadaire des postes\n\n") } else { cat("## Clinic weekly attendance\n\n") }
# if (!is.null(wfa_data)) { # if (length(wfa_data) > 0 & nrow(wfa_data) > 0) { # p <- timci::generate_week_bar_plot2(date_vec = wfa_data$date_week, # values = wfa_data$u5_attendance_last_week, # date_min = as.Date(start_date), # date_max = as.Date(as.Date(end_date) + 7), # ylbl = "Under 5 attendance") # plot(p) # } # }
if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') { cat("## Nombre de soumissions au cours des 30 derniers jours\n\n") } else { cat("## Number of submissions during the last 30 days\n\n") }
w <- 29 if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') { cat(paste0("### Recrutement quotidien\n\n")) } else { cat(paste0("### Daily enrolment\n\n")) } if (nrow(baseline_data) > 0) { timci::generate_day_bar_plot(date_vec = baseline_data$date_visit, date_min = as.Date(end_date - w), date_max = as.Date(end_date + 1), ylbl = enrolment_str, rref = day_target) }
if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') { cat(paste0("### Visites primaires et secondaires\n\n")) } else { cat(paste0("### Baseline and repeat visits\n\n")) } # Frequency if (nrow(baseline_data) > 0) { timci::generate_day_cumbar_plot(list(noneligible$date_visit, baseline_data$date_visit, repeat_data$date_visit), c("Non-eligible", baseline_str, repeat_str), as.Date(end_date - w), as.Date(end_date + 1), ylbl = submission_str) } else{ cat('N/A\n\n') }
if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') { cat("## Cartes thermiques calendaires\n\n") cat("### Screening\n\n") } else { cat("## Calendar heatmaps\n\n") cat("### Screening\n\n") } timci::generate_calendar_heatmap2(facility_data, date_visit, legendtitle = "Number of screenings")
cat(baseline_visit_title_str) if (nrow(baseline_data) > 0) { timci::generate_calendar_heatmap2(baseline_data, date_visit, legendtitle = "Number of enrolments") }
if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') { cat("## Heure de début du screening\n\n") } else { cat("## Screening start times\n\n") }
timci::heatmap_wday_hourofday(facility_data, 'start')
\clearpage
r eligibility_title
r eligibility_str
all <- data.frame(facility_data) all$yg_infant <- ifelse(all$yg_infant == 0, "2-59m", "0-2m")
age_statistics <- list( "Facility" = list( "First day of life" = ~qwraps2::n_perc(age_excl == 1, prec), "1 - 59 days" = ~qwraps2::n_perc(age_excl == 0 & age_incl == 1 & yg_infant == "0-2m", prec), "2 - 59 months" = ~qwraps2::n_perc(age_incl == 1 & yg_infant == "2-59m", prec), "Above 59 months" = ~qwraps2::n_perc(age_incl == 0, prec) ) ) out <- format_summary_table(all, age_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c", "c"), caption = age_eligibility_table_cap) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::column_spec(5, color = ifelse(grepl(pattern = "(0.0%)", x = out[, 4], fixed = TRUE), "red", "black")) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) %>% kableExtra::footnote(general = c(age_eligibility_table_gfn), footnote_as_chunk = TRUE)
all <- all %>% dplyr::filter(age_incl == 1 & age_excl == 0) all$sickness[is.na(all$sickness)] <- 0 sickness_statistics <- list( "Facility" = list( "Sick" = ~qwraps2::n_perc(sickness == 1, prec), "Not sick" = ~qwraps2::n_perc(sickness == 0, prec) ) ) out <- format_summary_table(all, sickness_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c"), caption = sick_cap) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::column_spec(3, color = ifelse(grepl(pattern = "(0.0%)", x = out[, 2], fixed = TRUE), "red", "black")) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
sick <- all %>% dplyr::filter(sickness == 1) nonsick <- all %>% dplyr::filter(sickness == 0) all <- sick all$consult_reason[is.na(all$consult_reason)] <- 0 sick_reason_statistics <- list( "Facility" = list( "Sickness" = ~qwraps2::n_perc(consult_reason == 1, prec), "Trauma" = ~qwraps2::n_perc(consult_reason == 2 & sickness == 1, prec), "Immunisation" = ~qwraps2::n_perc(consult_reason == 3 & sickness == 1, prec), "Monitoring" = ~qwraps2::n_perc(consult_reason == 4 & sickness == 1, prec) ) ) out <- format_summary_table(all, sick_reason_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c", "c"), caption = consultion_sick_cap) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- nonsick all$inpatient[is.na(all$inpatient)] <- 0 all$consult_reason[is.na(all$consult_reason)] <- 0 reason_statistics <- list( "Facility" = list( "Trauma" = ~qwraps2::n_perc(consult_reason == 2 & sickness == 0, prec), "Immunisation" = ~qwraps2::n_perc(consult_reason == 3 & sickness == 0, prec), "Monitoring" = ~qwraps2::n_perc(consult_reason == 4 & sickness == 0, prec), "Inpatient admission" = ~qwraps2::n_perc(inpatient == 1, prec) ) ) if (!is.null(all) & length(all) > 0 & nrow(all) > 0) { out <- format_summary_table(all, reason_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c", "c"), caption = consultation_nonsick_cap) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) }
all <- sick all$cg_eligibility[is.na(all$cg_eligibility)] <- 0 if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') { cg_age_eligibility_table_cap <- "Âge de l'accompagnant principal" } else { cg_age_eligibility_table_cap <- "Caregiver's age" } caregiver_statistics <- list( "Facility" = list( "Mother < 18" = ~qwraps2::n_perc(cg_eligibility == 0 & main_cg == 1, prec, na_rm = TRUE), "Other < 18" = ~qwraps2::n_perc(cg_eligibility == 0 & main_cg != 1, prec, na_rm = TRUE), ">= 18" = ~qwraps2::n_perc(cg_eligibility == 1, prec) ) ) out <- format_summary_table(all, caregiver_statistics, facility_name) out <- gsub("%", "\\\\%", out) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, align = c("c", "c", "c"), linesep = "", caption = cg_age_eligibility_table_cap, col.names = c("Mother < 18", "Other < 18", "$\\bm{\\geq 18}$"), escape = FALSE) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- sick %>% dplyr::filter(main_cg != 1 & !is.na(underaged_mother)) if (nrow(all) > 0) { mother_statistics <- list( "Summary" = list( "< 18" = ~qwraps2::n_perc(underaged_mother == 1, prec, na_rm = TRUE), ">= 18" = ~qwraps2::n_perc(underaged_mother == 0, prec, na_rm = TRUE) ) ) out <- format_summary_table(all, mother_statistics, facility_name) out <- gsub("%", "\\\\%", out) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, align = c("c", "c"), linesep = "", caption = u18_mother_cap, col.names = c("< 18", "$\\bm{\\geq 18}$"), escape = FALSE) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) }
all <- sick %>% dplyr::filter(cg_eligibility == 1) all$prev_enrl[is.na(all$prev_enrl)] <- 0 all$repeat_consult[is.na(all$repeat_consult)] <- 0 summary_statistics <- list( "Summary" = list( "First" = ~qwraps2::n_perc(prev_enrl == 3 | prev_enrl == 98, prec), "Previous" = ~qwraps2::n_perc(prev_enrl == 1 | prev_enrl == 2, prec), "Last <= 28 days" = ~qwraps2::n_perc(repeat_consult == 1, prec), "Last > 28 days" = ~qwraps2::n_perc((prev_enrl == 1 | prev_enrl == 2) & repeat_consult == 0, prec) ) ) out <- format_summary_table(all, summary_statistics, facility_name) out <- gsub("%", "\\\\%", out) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, align = c("c", "c", "c", "c"), linesep = "", caption = multi_rec_cap, col.names = c("First", "Previous", "Last $\\bm{\\leq 28}$ days", "Last > 28 days"), escape = FALSE) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- all %>% dplyr::filter((prev_enrl == 3 | prev_enrl == 98) | ((prev_enrl == 1 | prev_enrl == 2) & repeat_consult == 0)) consent_statistics <- list( "Facility" = list( "Consented" = ~qwraps2::n_perc(consent == 1, prec), "Not consented" = ~qwraps2::n_perc(consent == 0, prec) ) ) out <- format_summary_table(all, consent_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c"), caption = consent_cap) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::column_spec(2, color = ifelse(grepl(pattern = "(100.0%)", x = out[, 1], fixed = TRUE), "red", "black")) %>% kableExtra::column_spec(3, color = ifelse(grepl(pattern = "(0.0%)", x = out[, 2], fixed = TRUE), "red", "black")) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
non_enrolment_causes <- timci::count_screening(facility_data) nec_pie_chart <- timci::generate_pie_chart(non_enrolment_causes) plot(nec_pie_chart)
non_eligibility_causes <- timci::count_noneligibility(facility_data) plot(timci::generate_pie_chart(non_eligibility_causes))
\clearpage
r h1_day0_visit
all <- data.frame(baseline_data)
descriptive_statistics <- list( "Summary" = list( "Exact DoB known" = ~qwraps2::n_perc(dob_knwn == 1, prec), "MoB known" = ~qwraps2::n_perc(dob_knwn == 2, prec), "Only YoB known" = ~qwraps2::n_perc(dob_knwn == 3, prec), "DoB not known" = ~qwraps2::n_perc(dob_knwn == 98, prec) ) ) out <- format_summary_table(all, descriptive_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c"), caption = tcap_age_category) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
r h2_research_operations
descriptive_statistics <- list( "Summary" = list( "Scanned entries" = ~qwraps2::n_perc(child_id_scan == 1, prec), "Manual entries" = ~qwraps2::n_perc(child_id_manual == 1, prec) ) ) out <- format_summary_table(all, descriptive_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c"), caption = tcap_scanned_manual) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
out <- data.frame(baseline_data) %>% mutate(scanned_child_id = ifelse(child_id_scan == 1, child_id, NA)) %>% group_by(facility_name) %>% summarise("Max ID scanned" = max(scanned_child_id, na.rm=TRUE)) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c"), caption = "Max ID that has been scanned for each facility") %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
if (!is.null(pii)) { if (nrow(pii) > 0) { all <- data.frame(pii) all$phone_nb[!is.na(all$phone_nb)] <- 1 all$phone_nb[is.na(all$phone_nb)] <- 0 all$phone_nb2[!is.na(all$phone_nb2)] <- 1 all$phone_nb2[is.na(all$phone_nb2)] <- 0 phone_stats <- list( "Facility" = list( "0 phone numbers" = ~qwraps2::n_perc(phone_nb == 0, prec), "1 phone number" = ~qwraps2::n_perc(phone_nb == 1, prec), "2 phone numbers" = ~qwraps2::n_perc((phone_nb == 1) & (phone_nb2 == 1), prec) ) ) out <- format_summary_table(all, phone_stats, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, align = c("c", "c", "c"), linesep = "", caption = tcap_phone_numbers) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) } }
if (!is.null(pii)) { if (nrow(pii) > 0) { phone_data <- data.frame(pii) %>% dplyr::filter(!is.na(phone_nb)) %>% dplyr::filter(prev_enrl == 3) %>% dplyr::group_by(facility_name) out1 <- phone_data %>% dplyr::summarise(All = dplyr::n()) out2 <- phone_data %>% dplyr::summarise(Unique = dplyr::n_distinct(phone_nb)) out <- merge (out1, out2, by = 0, all.x = TRUE) %>% dplyr::mutate(Perc = round(100*Unique/All, digits = 1)) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", caption = "Number and percentage of unique phone numbers in first enrolments by facility") %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) } }
if (!is.null(pii)) { if (nrow(pii) > 0) { all <- all %>% dplyr::filter(all$phone_nb == 0) all$location[all$location != '' & all$location != ' ' & all$location != 'Outside the region'] <- 1 all$location[all$location == '' | all$location == ' ' | all$location == 'Outside the region'] <- 0 contact_details_stats <- list( "Summary" = list( "No community contact" = ~qwraps2::n_perc(cmty_contact_avail == 0, prec), "No residence info" = ~qwraps2::n_perc(location == 0, prec) ) ) out <- format_summary_table(all, contact_details_stats, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c"), caption = "Number of participants without a community contact or residence information among those participants who do not have a phone number .") %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) } }
all <- data.frame(baseline_data) all$sx_vomit_evthing[is.na(all$sx_vomit_evthing)] <- 0 all$sx_unable_feed[is.na(all$sx_unable_feed)] <- 0 all$referral_cg <- ifelse(!is.na(all$referral_cg), all$referral_cg, 100) all$referral_hf <- ifelse(!is.na(all$referral_hf), all$referral_hf, 100) all["dx_severe"[!("dx_severe" %in% colnames(all))]] <- NA all <- all %>% dplyr::mutate(danger_signs = ifelse(sx_convulsions == 1 | sx_lethargy == 1 | sx_vomit_evthing == 1 | sx_unable_feed == 1, 1, 0)) %>% dplyr::mutate(missing_clinical_presentation = ifelse(danger_signs == 0 & (sx_vomit == 0 | sx_vomit == 98) & (sx_less_feed == 0 | sx_less_feed == 98) & (sx_cough == 0 | sx_cough == 98) & (sx_difficulty_breath == 0 | sx_difficulty_breath == 98) & (sx_diarrhoea == 0 | sx_diarrhoea == 98) & (sx_fever == 0 | sx_fever == 98) & sx_var == 96, 1, 0)) %>% dplyr::mutate(missing_referral_cg = ifelse(referral_cg == 98 | referral_cg == 97 | referral_cg == 100, 1, 0)) %>% dplyr::mutate(missing_diagnosis = ifelse((dx == 999 & is.na(dx_oth)), 1, 0)) all <- all %>% dplyr::rowwise() %>% dplyr::mutate(cold = ifelse(2 %in% as.integer(unlist(strsplit(sx_var, split = ";"))), 1, 0)) all <- all %>% dplyr::rowwise() %>% dplyr::mutate(ear = ifelse(3 %in% as.integer(unlist(strsplit(sx_var, split = ";"))), 1, 0)) all <- all %>% dplyr::rowwise() %>% dplyr::mutate(eye = ifelse(4 %in% as.integer(unlist(strsplit(sx_var, split = ";"))), 1, 0)) all <- all %>% dplyr::rowwise() %>% dplyr::mutate(skin = ifelse(5 %in% as.integer(unlist(strsplit(sx_var, split = ";"))), 1, 0)) all <- all %>% dplyr::rowwise() %>% dplyr::mutate(other_symptoms = ifelse(99 %in% as.integer(unlist(strsplit(sx_var, split = ";"))), 1, 0))
clinical_presentation_statistics <- list( "Summary" = list( "Missing clinical presentation" = ~qwraps2::n_perc(missing_clinical_presentation == 1, prec), "Missing referral (caregiver)" = ~qwraps2::n_perc(missing_referral_cg == 1, prec), "Missing diagnosis" = ~qwraps2::n_perc(missing_diagnosis == 1, prec, na_rm = TRUE) ) ) out <- format_summary_table(all, clinical_presentation_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c"), caption = tcap_missing_symptoms) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
\clearpage
descriptive_statistics <- list( "Summary" = list( "0-59 days" = ~qwraps2::n_perc(yg_infant == 1, prec), "2-59 months" = ~qwraps2::n_perc(yg_infant == 0, prec) ) ) out <- format_summary_table(all, descriptive_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c"), caption = tcap_age_category) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
\clearpage
r h2_clinical_presentation
summary_statistics <- list( "Summary" = list( "Convulsions" = ~qwraps2::n_perc(sx_convulsions == 1, prec), "Lethargy" = ~qwraps2::n_perc(sx_lethargy == 1, prec), "Vomit everything" = ~qwraps2::n_perc(sx_vomit_evthing == 1, prec), "Unable to feed" = ~qwraps2::n_perc(sx_unable_feed == 1, prec) ) ) out <- format_summary_table(all, summary_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c", "c"), caption = tcap_danger_signs) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
summary_statistics <- list( "Summary" = list( "From caregiver" = ~qwraps2::n_perc(danger_signs == 1, prec), "From registry" = ~qwraps2::n_perc(dx_severe == 1, prec, na_rm = TRUE), "Presence agreement" = ~qwraps2::n_perc(danger_signs == 1 & dx_severe == 1, prec, na_rm = TRUE), "Absence agreement -" = ~qwraps2::n_perc(danger_signs == 0 & dx_severe == 0, prec, na_rm = TRUE) ) ) out <- format_summary_table(all, summary_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c", "c"), caption = tcap_danger_signs) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
summary_statistics <- list( "Summary" = list( "Respiratory problem" = ~qwraps2::n_perc(sx_cough == 1 | sx_difficulty_breath == 1, prec), "Cough" = ~qwraps2::n_perc(sx_cough == 1, prec), "Diff. breathing" = ~qwraps2::n_perc(sx_difficulty_breath == 1, prec), "Both" = ~qwraps2::n_perc(sx_cough == 1 & sx_difficulty_breath == 1, prec) ) ) out <- format_summary_table(all, summary_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, align = c("c", "c", "c", "c"), linesep = "", caption = "Respiratory symptoms") %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
summary_statistics <- list( "Summary" = list( "Vomit" = ~qwraps2::n_perc(sx_vomit == 1, prec), "Difficult feeding" = ~qwraps2::n_perc(sx_less_feed == 1, prec), "Diarrhoea" = ~qwraps2::n_perc(sx_diarrhoea == 1, prec), "Fever" = ~qwraps2::n_perc(sx_fever == 1, prec), "Other" = ~qwraps2::n_perc(sx_var != 96, prec) ) ) out <- format_summary_table(all, summary_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c", "c", "c"), caption = "Non-respiratory major symptoms") %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
summary_statistics <- list( "Summary" = list( "Runny nose/cold" = ~qwraps2::n_perc(cold == 1, prec), "Ear" = ~qwraps2::n_perc(ear == 1, prec), "Eye" = ~qwraps2::n_perc(eye == 1, prec), "Skin" = ~qwraps2::n_perc(skin == 1, prec), "Other" = ~qwraps2::n_perc(other_symptoms == 1, prec) ) ) out <- format_summary_table(all, summary_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("c", "c", "c", "c", "c"), caption = "Other symptoms") %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
\clearpage
r pox_title_str
if (is_senegal) { cat(paste0("Les données affichées dans cette sous-section concernent uniquement la période d'intervention.\n\n")) } else if (is_kenya) { cat(paste0("Data displayed in this subsection refer to the intervention period only.\n\n")) }
all <- data.frame(post_intervention_data)
all <- data.frame(baseline_data)
all <- all %>% dplyr::mutate(spo2_yg_infant = ifelse(yg_infant == 1, spo2, NA)) %>% dplyr::mutate(spo2_older_children = ifelse(yg_infant == 0, spo2, NA))
all <- all %>% merge(y = facilities[,c("facility_id", "intervention")], by.x = 'fid', by.y = 'facility_id', all.x = TRUE) %>% dplyr::filter(intervention == 1 | intervention == 2)
pox_statistics <- list( "Facility" = list( "SpO2 (1-59 days)" = ~qwraps2::n_perc(spo2_yg_infant == 1, prec, na_rm = TRUE), "SpO2 (2-59 months)" = ~qwraps2::n_perc(spo2_older_children == 1, prec, na_rm = TRUE), "Temperature" = ~qwraps2::n_perc(temp == 1, prec, na_rm = TRUE) ) ) out <- format_summary_table(all, pox_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", caption = "Pulse oximetry uptake") %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
pox_statistics <- list( "Facility" = list( "Recorded" = ~qwraps2::n_perc(spo2 == 1, prec, na_rm = TRUE), "Reported by caregiver" = ~qwraps2::n_perc(spo2_cg == 1, prec, na_rm = TRUE) ) ) out <- format_summary_table(all, pox_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", caption = "Pulse oximetry uptake") %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
pox_values <- split(all$spo2_meas1, all$facility_name)
\clearpage
r referral_title_str
all <- data.frame(baseline_data) #all$yg_infant <- ifelse(all$yg_infant == 0, "2-59 months", "2-59 days") all$referral_cg <- ifelse(!is.na(all$referral_cg), all$referral_cg, 100) all$referral_hf <- ifelse(!is.na(all$referral_hf), all$referral_hf, 100)
if (nrow(baseline_data) > 0) { summary_statistics <- list( "Facility" = list( "Caregiver" = ~qwraps2::n_perc(referral_cg == 1, prec), "Registry" = ~qwraps2::n_perc(referral_hf == 1, prec), "Either" = ~qwraps2::n_perc((referral_cg == 1) | (referral_hf == 1), prec), "Both" = ~qwraps2::n_perc((referral_cg == 1) & (referral_hf == 1), prec), "Unknown (caregiver)" = ~qwraps2::n_perc(referral_cg == 98 | referral_cg == 97 | referral_cg == 100, prec) ) ) out <- format_summary_table(all, summary_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "") %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::column_spec(2, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10, "red", "black")) %>% kableExtra::column_spec(3, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10, "red", "black")) %>% kableExtra::column_spec(4, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10, "red", "black")) %>% kableExtra::column_spec(5, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10, "red", "black")) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) }
if (nrow(baseline_data) > 0) { referral_data <- timci::extract_referrals(baseline_data) n_referrals <- nrow(referral_data) referral_pie_chart <- timci::generate_pie_chart(data.frame(group = c("Referred at Day 0", "Not referred at Day 0"), value = c(n_referrals, n_enrolled - n_referrals))) plot(referral_pie_chart) }
\clearpage
r h2_diagnoses
r h3_pneumonia
if (nrow(baseline_data) > 0) { all <- data.frame(baseline_data) all$'has_severe_pneumonia' <- NA all$'has_nonsevere_pneumonia' <- NA all$'has_no_pneumonia' <- NA allcols <- colnames(all) if ("dx_pneumonia" %in% allcols){ all$'has_severe_pneumonia' <- ifelse((all$dx_pneumonia == 1) & (all$dx_pneumonia_severity == 1), 1, 0) all$'has_nonsevere_pneumonia' <- ifelse((all$dx_pneumonia == 1) & (all$dx_pneumonia_severity > 1), 1, 0) all$'has_no_pneumonia' <- ifelse((all$dx_pneumonia == 0) | (all$dx_pneumonia_severity == 0), 1, 0) } if ("dx" %in% allcols){ all$'has_severe_pneumonia' <- ifelse(is.na(all$'has_severe_pneumonia'), ifelse(23 %in% as.integer(unlist(strsplit(all$dx, split = ";"))), 1, 0), all$'has_severe_pneumonia') all$'has_nonsevere_pneumonia' <- ifelse(is.na(all$'has_nonsevere_pneumonia'), ifelse(24 %in% as.integer(unlist(strsplit(all$dx, split = ";"))), 1, 0), all$'has_nonsevere_pneumonia') all$'has_no_pneumonia' <- ifelse(is.na(all$'has_no_pneumonia'), ifelse((all$'has_severe_pneumonia' == 0) & (all$'has_nonsevere_pneumonia' == 0), 1, 0), all$'has_no_pneumonia') } summary_statistics <- list( "Summary" = list( "Severe pneumonia" = ~qwraps2::n_perc(has_severe_pneumonia == 1, prec), "Other pneumonia" = ~qwraps2::n_perc(has_nonsevere_pneumonia == 1, prec), "No pneumonia" = ~qwraps2::n_perc(has_no_pneumonia == 1, prec) ) ) out <- format_summary_table(all, summary_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", caption = tcap_pneumonia) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) }
\clearpage
all <- data.frame(baseline_data) %>% dplyr::filter(yg_infant == 1) all$referral_cg <- ifelse(!is.na(all$referral_cg), all$referral_cg, 100) all$referral_hf <- ifelse(!is.na(all$referral_hf), all$referral_hf, 100)
if (nrow(baseline_data) > 0) { summary_statistics <- list( "Facility" = list( "Caregiver" = ~qwraps2::n_perc(referral_cg == 1, prec), "Registry" = ~qwraps2::n_perc(referral_hf == 1, prec), "Either" = ~qwraps2::n_perc((referral_cg == 1) | (referral_hf == 1), prec), "Both" = ~qwraps2::n_perc((referral_cg == 1) & (referral_hf == 1), prec), "Unknown (caregiver)" = ~qwraps2::n_perc(referral_cg == 98 | referral_cg == 97 | referral_cg == 100, prec) ) ) out <- format_summary_table(all, summary_statistics, facility_name) out %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "") %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::column_spec(2, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10, "red", "black")) %>% kableExtra::column_spec(3, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10, "red", "black")) %>% kableExtra::column_spec(4, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10, "red", "black")) %>% kableExtra::column_spec(5, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10, "red", "black")) %>% kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) }
\clearpage
r appendix_title
Weekly data from Thursday to Wednesday
if (!is.null(baseline_data)) { if (length(baseline_data) > 0 & nrow(baseline_data) > 0) { baseline_data %>% dplyr::mutate(Week = lubridate::floor_date(as.Date(date_visit), "week", week_start = getOption("lubridate.week.start", 4))) %>% dplyr::count(Week) %>% dplyr::mutate(csum = cumsum(n)) %>% dplyr::rename('Weekly recruitment' = 'n') %>% dplyr::rename('Cumulative recruitment' = 'csum') %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("l", "c", "c"), caption = tcap_weekly_enrolment) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(baseline_data)/2) * 2, background = striped_row_bg) } }
if (!is.null(fu_var_cpy)) { if (length(fu_var_cpy) > 0 & nrow(fu_var_cpy) > 0) { fu_var_cpy %>% dplyr::filter(proceed_day7 == 1) %>% dplyr::mutate(Week = lubridate::floor_date(as.Date(date_call), "week", week_start = getOption("lubridate.week.start", 4))) %>% dplyr::count(Week) %>% dplyr::mutate(csum = cumsum(n)) %>% dplyr::rename('Weekly follow-up' = 'n') %>% dplyr::rename('Cumulative follow-up' = 'csum') %>% kableExtra::kbl(booktabs = TRUE, longtable = TRUE, linesep = "", align = c("l", "c", "c"), caption = tcap_weekly_day7fu) %>% kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>% kableExtra::row_spec(0, bold = TRUE) %>% kableExtra::row_spec(1:(nrow(baseline_data)/2) * 2, background = striped_row_bg) } }
facility_details <- TRUE
out <- lapply(1:nrow(facilities), function(i) { knitr::knit_child('rct_monitoring_report_facility_sub.Rmd', envir = environment(), quiet = TRUE) }) cat(unlist(out), sep = '\n')
\clearpage \listoftables
\clearpage \listoffigures
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.