Disclaimer!

This script below attempts to automate the Weekly Maternal and Perinatal Deaths Surveillance .

This part of the ongoing R4Health efforts in Uganda.

This is still in development phase.

WEEK 5 KEY HIGHLIGHTS

Maternal Deaths

Perinatal Deaths

knitr::opts_chunk$set(echo = FALSE,message = FALSE,warning = FALSE)
library(tidyverse)
library(readxl)
library("sf")
library(gridExtra)
library(geojsonio)
library("here")
library(reactable)
library(reactablefmtr)
library(tmap)
library(RColorBrewer)
library(rmapshaper)
library(knitr)
library(reactable)
library(tidyverse)
library(viridis)
library(magrittr)
library(lubridate)
data1 <-  read_excel("data.xls")
# head(data,4)

data1 %<>% dplyr::select(c(1,3,4,6,7,8,9)) 

names(data1) <-  c("period","region","district","MD","FSB","END","MSB")

data <-  data1 %>%
  separate(period, c("epi_week","year"),sep = " ",remove = FALSE) %>%
  rowwise() %>%
  mutate( PND = sum(FSB,END,MSB,na.rm = TRUE),
          wk = as.integer(substring(epi_week,2)),
          yr = as.integer(year)) 

summary <- data %>% filter( yr > 2021) %>%
  group_by(wk,region) %>%
  summarise(across())

## lOAD SHAPE FILES 

uganda <- read_sf("~/R/Maternal and Child Health/Shape files 2020/uganda_districts_2019-wgs84")

water <- read_sf("~/R/Maternal and Child Health/Shape files 2020/UGA_wat")



heading  <- function(year, week){
  ## Martenal Deaths 
  cummulative <- data %>% filter( yr == year) %>%
    group_by(yr) %>%
    summarise(cum = sum(MD,na.rm = TRUE)) 
  
 weekly  <- data %>% filter( wk == week & yr == year) %>%
    group_by(wk) %>%
    summarise(wek = sum(MD,na.rm = TRUE))
 
 weekly_1 <- data %>% filter( wk == (week - 1)  & yr == year) %>%
    group_by(wk) %>%
    summarise(wek = sum(MD,na.rm = TRUE))
 
   change <- round(((weekly$wek - weekly_1$wek)/weekly$wek)*100,1)
   
   ### Perinatal Deaths 
     
  cummulative_pnd <- data %>% filter( yr == year) %>%
    group_by(yr) %>%
    summarise(cum = sum(PND,na.rm = TRUE)) 
  
 weekly_pnd  <- data %>% filter( wk == week & yr == year) %>%
    group_by(wk) %>%
    summarise(wek = sum(PND,na.rm = TRUE))
 
 weekly_1_pnd <- data %>% filter( wk == (week - 1)  & yr == year) %>%
    group_by(wk) %>%
    summarise(wek = sum(PND,na.rm = TRUE))
 
   change_pnd <- round(((weekly_pnd$wek - weekly_1_pnd$wek)/weekly_pnd$wek)*100,1)
   
   list <- data.frame( Deaths = c("Maternal Deaths 21-22","Maternal Deaths 2022","Maternal Deaths - wk 5 ","change from last week ",
                                 "Perinatal Deaths - 21-22","Perinatal Deaths 2022","Perinatal Deaths - wk 5","change from last week "),
                       values = c(cummulative$cum, weekly$wek, change,
                                  cummulative_pnd$cum, weekly_pnd$wek, change_pnd))
  
   reactable(list, defaultColDef = colDef(
    align = "center", 
    cell = icon_sets(list, icon_position = "left")))
   
  
}

heading(2022,11)
 
water_m <- tm_shape(water) +
  tm_fill( col = "#2596be")

data_map <-  data %>% dplyr::select(c(5:12)) %>%
            separate(district,c("District","t"), sep = " ",remove = TRUE) %>%
            filter(wk == 9 & yr == 2022)
  
 
data_map$District <- toupper(data_map$District)

data_map2 <- merge( x = uganda, y = data_map, by.x = "DName2019", by.y = "District")


map_MD <- tm_shape(data_map2) +
  tm_polygons( col = "MD", palette = "-viridis" , breaks=c(0,1,2,3))+
  water_m +
  tm_layout(title = "Maternal Deaths week 5  ", bg.color = "#eeeee4")

 
map_PND <- tm_shape(data_map2) +
  tm_polygons( col = "PND", palette = "-viridis",breaks = c(0,5,20,40,60)) + 
  water_m +
  tm_layout(title = "Perinatal Deaths week 5", bg.color = "#eeeee4")



## Pie chart for this Week 

tr <- summary %>% pivot_longer( cols = FSB:MSB,names_to = "PNA")%>%
  filter( wk == 10 & yr == 2022)%>%
  group_by(wk,PNA) %>%
  summarise( values = sum(value,na.rm = TRUE))


# Compute percentages
tr$fraction = tr$values / sum(tr$values)

# Compute the cumulative percentages (top of each rectangle)
tr$ymax = cumsum(tr$fraction)

# Compute the bottom of each rectangle
tr$ymin = c(0, head(tr$ymax, n=-1))


# Compute label position
tr$labelPosition <- (tr$ymax + tr$ymin) / 2

# Compute a good label
tr$label <- paste0(tr$PNA, "\n value: ", tr$values)
 
# Make the plot
 Pie_chart <- ggplot(tr, aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill=PNA)) +
     geom_rect() +
     geom_label(x = 3.5,aes(y = labelPosition,label=label,size = 6)) +
   scale_fill_brewer(palette = 4) +
     coord_polar(theta="y") + 
     xlim(c(2, 4)) +
      theme_void() +
      theme(legend.position = "none")+ 
    labs(title = " Perinatal Deaths Week 5")
 
 
 ## Pie chart for this year 
 
  tr2<- summary %>% pivot_longer(cols = FSB:MSB,names_to = "Peri",values_to = "Peri_v")  %>%
  filter(yr == 2022) %>%
  group_by(yr,Peri) %>%
  summarise(en=sum(Peri_v,na.rm = TRUE)) 
 
# Compute percentages
tr2$fraction = tr2$en / sum(tr2$en)

# Compute the cumulative percentages (top of each rectangle)
tr2$ymax = cumsum(tr2$fraction)

# Compute the bottom of each rectangle
tr2$ymin = c(0, head(tr$ymax, n=-1))


# Compute label position
tr2$labelPosition <- (tr2$ymax + tr2$ymin) / 2

# Compute a good label
tr2$label <- paste0(tr2$Peri, "\n value: ", tr2$en)
 
# Make the plot
 Pie_chart2 <- ggplot(tr2, aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill=Peri)) +
     geom_rect() +
     geom_label(x = 3.5,aes(y = labelPosition,label=label,size = 6)) +
   scale_fill_brewer(palette = 4) +
     coord_polar(theta="y") + 
     xlim(c(2, 4)) +
      theme_void() +
      theme(legend.position = "none")+ 
    labs(title = " Perinatal Deaths 2022")

#summarise and pivot wider 
cum <- data  %>%
  filter(yr == 2022) %>%
  group_by(district) %>%
  summarise(en=sum(MD,na.rm = TRUE),end = sum(PND,na.rm = TRUE)) %>%
  separate(district,c("District","t"), sep = " ",remove = TRUE)

cum$District <- toupper(cum$District)

cum_data <- merge( x = uganda, y = cum, by.x = "DName2019", by.y = "District")


cum_MD <- tm_shape(cum_data) +
  tm_polygons( col = "en", palette = "viridis" , breaks=c(0,4,8,12,32))+
  water_m +
  tm_layout(title = " Cummulative Maternal Deaths 2022  ", bg.color = "#eeeee4")



cum_PND <- tm_shape(cum_data) +
  tm_polygons( col = "end", palette = "viridis" , breaks=c(0,20,40,60,100,600))+
  water_m +
  tm_layout(title = " Cummulative Perinatal  Deaths 2022  ", bg.color = "#eeeee4")


tmap_mode("view")

map_MD
tmap_mode("plot")

sum <- data  %>%
  filter(yr == 2022 & wk == 5) %>%
  group_by(district) %>%
  summarise(Number=sum(MD,na.rm = TRUE),number = sum(PND,na.rm = TRUE)) %>%
  separate(district,c("District","t"), sep = " ",remove = TRUE)


sum2 = sum[order(sum[,"Number"], decreasing = TRUE),]

sum3 <- sum2 %>% dplyr:: select(c(1,3))

    reactable(head(sum3), defaultColDef = colDef(
      align = "center", 
      cell = icon_sets(head(sum3), icon_position = "left")))
    
cum_MD
cum <- data  %>%
  filter(yr == 2022) %>%
  group_by(district) %>%
  summarise(Number=sum(MD,na.rm = TRUE),number = sum(PND,na.rm = TRUE)) %>%
  separate(district,c("District","t"), sep = " ",remove = TRUE)

cum1 = cum[order(cum[,"Number"], decreasing = TRUE),]

cum12 <- cum1 %>% dplyr:: select(c(1,3))

    reactable(head(cum12), defaultColDef = colDef(
      align = "center", 
      cell = icon_sets(head(cum12), icon_position = "left")))
    


tmap_mode("view")

map_PND

tmap_mode("plot")


Pie_chart

sum4 = sum[order(sum[,"number"], decreasing = TRUE),]

sum5 <- sum4 %>% dplyr:: select(c(1,4))

    reactable(head(sum5), defaultColDef = colDef(
      align = "center", 
      cell = icon_sets(head(sum5), icon_position = "left")))



cum_PND

Pie_chart2

cum6 = cum[order(cum[,"number"], decreasing = TRUE),]

cum7 <- cum6 %>% dplyr:: select(c(1,4))

    reactable(head(cum7), defaultColDef = colDef(
      align = "center", 
      cell = icon_sets(head(cum7), icon_position = "left")))