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"
proceed <- !is.null(params$baseline_data)
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

\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

start_date <- params$start_date
end_date <- params$end_date
baseline_data <- params$baseline_data
cdsa_data <- params$cdsa_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))
}
all <- data.frame(baseline_data)
all$yg_infant <- ifelse(all$yg_infant == 0, "2-59m", "0-2m")
all <- data.frame(baseline_data)
descriptive_statistics <- list(
  "Summary" = list(
    "Exact DoB known" = ~qwraps2::n_perc(dob_knwn == 1, prec),
    "Only 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)
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)
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(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

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),
    "Consistently +" = ~qwraps2::n_perc(danger_signs == 1 & dx_severe == 1, prec, na_rm = TRUE),
    "Consistently -" = ~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"),
                  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,
                  linesep = "") %>% 
  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 = "",
                  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)
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),
    "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 = "",
                  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 (nrow(baseline_data) > 0) {

  if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') {
    cat(paste0("### 1 - 59 jours\n\n"))
  } else {
    cat(paste0("### 1 - 59 days\n\n"))
  }

  all <- data.frame(baseline_data) %>% 
    dplyr::filter(yg_infant == 1)

  pox_statistics <- list(
    "Facility" = list(
      "Reported" = ~qwraps2::n_perc(spo2 == 1, prec)
      )
  )
  out <- format_summary_table(all, pox_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::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) {

  if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') {
    cat(paste0("### 2-59 months\n\n"))
  } else {
    cat(paste0("### 2-59 months\n\n"))
  }

  all <- data.frame(baseline_data) %>% 
    dplyr::filter(yg_infant == 0)

  pox_statistics <- list(
    "Facility" = list(
      "Reported" = ~qwraps2::n_perc(spo2 == 1, prec)
      )
  )
  pox_values <- split(all$spo2_meas1, all$facility_name)
  out <- format_summary_table(all, pox_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::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 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 (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') {
  cat(paste0("### Rapporté par l'accompagnant à la sortie de la consultation\n\n"))
} else {
  cat(paste0("### Reported by the caregiver at the consultation exit\n\n"))
}
if (nrow(baseline_data) > 0) {
  summary_statistics <- list(
    "Facility" = list(
      "Yes" = ~qwraps2::n_perc(referral_cg == 1, prec),
      "No" = ~qwraps2::n_perc(referral_cg == 0, prec),
      "Unknown" = ~qwraps2::n_perc(referral_cg == 98, prec),
      "Declined" = ~qwraps2::n_perc(referral_cg == 97, prec),
      "Lost at exit" = ~qwraps2::n_perc(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::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 (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') {
  cat(paste0("### Rapporté dans le registre du poste\n\n"))
} else {
  cat(paste0("### Reported in the facility registry\n\n"))
}
if (nrow(baseline_data) > 0) {
  summary_statistics <- list(
    "Facility" = list(
      "Yes" = ~qwraps2::n_perc(referral_hf == 1, prec),
      "No" = ~qwraps2::n_perc(referral_hf == 0, 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::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 \listoftables

\clearpage \listoffigures




Thaliehln/timci documentation built on April 8, 2024, 3:38 p.m.