R/score_stat.r

#' Score HIV Status Indicators
#'
#' @param df site MSD file
#'
#' @importFrom magrittr %>%
#' @export


score_stat <- function(df){

  #1. OVC Known Status
  if(all((c("OVC_HIVSTAT", "OVC_SERV") %in% unique(df$indicator))) == TRUE){
    stat_ovc <- df %>%
      dplyr::filter(indicator %in% c("OVC_HIVSTAT", "OVC_SERV"),
             (standardizeddisaggregate == "Total Numerator" |
                (standardizeddisaggregate == "ReportedStatus" & otherdisaggregate ==  "No HIV Status"))) %>%
      ICPIutilities::add_cumulative() %>%
      dplyr::mutate(standardizeddisaggregate = stringr::str_remove(standardizeddisaggregate, " ")) %>%
      tidyr::unite(ind, indicator, standardizeddisaggregate) %>%
      dplyr::group_by(operatingunit, psnu, sitename, orgunituid, ind) %>%
      dplyr::summarise_at(dplyr::vars(fy2018cum), ~ sum(., na.rm = TRUE)) %>%
      dplyr::ungroup() %>%
      tidyr::spread(ind, fy2018cum) %>%
      dplyr::filter_at(dplyr::vars(dplyr::contains("OVC")), dplyr::any_vars(!is.na(.) & .!=0)) %>%
      dplyr::mutate(knownstatus = round(1-(OVC_HIVSTAT_ReportedStatus/OVC_HIVSTAT_TotalNumerator), 2)) %>%
      dplyr::select(operatingunit, psnu, sitename, orgunituid, ovc_serv = OVC_SERV_TotalNumerator, knownstatus)

    stat_ovc <- stat_ovc %>%
      dplyr::mutate(stat.ovc.score =
                      dplyr::case_when(ovc_serv > median(ovc_serv, na.rm = TRUE) &
                                       knownstatus < median(knownstatus, na.rm = TRUE)     ~ 2,
                                       knownstatus < median(knownstatus, na.rm = TRUE)     ~ 1,
                                       TRUE                                                ~ 0)) %>%
      dplyr::rename(stat.ovc.value = knownstatus) %>%
      dplyr::select(-ovc_serv)
  }

  valcheck <- df %>%
    dplyr::filter(indicator %in% c("PMTCT_STAT", "TB_STAT"),
                  stringr::str_detect(standardizeddisaggregate, "Total")) %>%
    ICPIutilities::add_cumulative() %>%
    dplyr::summarise_at(dplyr::vars(fy2018cum), sum, na.rm = TRUE)

  if(valcheck != 0 && any((c("PMTCT_STAT", "TB_STAT") %in% unique(df$indicator))) == TRUE){
  #2. & 3. PMTCT & TB Known Status
    stat_oth <- df %>%
      dplyr::filter(indicator %in% c("PMTCT_STAT", "TB_STAT"),
                    stringr::str_detect(standardizeddisaggregate, "Total")) %>%
      ICPIutilities::add_cumulative() %>%
      dplyr::group_by(operatingunit, psnu, sitename, orgunituid, indicator, numeratordenom) %>%
      dplyr::summarise_at(dplyr::vars(fy2018cum), sum, na.rm = TRUE) %>%
      dplyr::ungroup() %>%
      dplyr::filter(fy2018cum != 0) %>%
      tidyr::spread(numeratordenom, fy2018cum) %>%
      dplyr::mutate(knownstatus = round(N / D, 2)) %>%
      dplyr::select(-N)

    stat_oth <- stat_oth %>%
      dplyr::mutate(score =
                      dplyr::case_when(D > median(D, na.rm = TRUE) &
                                       knownstatus < median(knownstatus, na.rm = TRUE)     ~ 2,
                                       knownstatus < median(knownstatus, na.rm = TRUE)     ~ 1,
                                       TRUE                                                ~ 0)) %>%
      dplyr::rename(value = knownstatus) %>%
      dplyr::select(-D) %>%
      dplyr::mutate(indicator = stringr::str_extract(indicator, "(PMTCT|TB)") %>% paste0("stat.", .) %>% tolower()) %>%
      tidyr::gather(type, val, value, score) %>%
      tidyr::unite(ind, indicator, type, sep = ".") %>%
      tidyr::spread(ind, val)
  }

  #join together
  if(all(exists(c("stat_ovc", "stat_oth")))){
    stat <- dplyr::full_join(stat_ovc, stat_oth, by = c("operatingunit", "psnu", "sitename", "orgunituid"))
  }


  #return
  if(exists("stat")) {
    return(stat)
  } else if(exists("stat_ovc")) {
    stat <- stat_ovc
    return(stat)
  } else if(exists("stat_oth")) {
    stat <- stat_oth
    return(stat)
  } else {
    stat <- tibble::tibble(operatingunit = as.character(NA),
                           psnu = as.character(NA),
                           sitename = as.character(NA),
                           orgunituid = as.character(NA))
    return(stat)
  }

}
USAID-OHA-SI/asSIMSble documentation built on May 30, 2019, 2:07 p.m.