Non-extreme events effects on BW, LBW and PTB


In this script, we create figures to summarise the non-extreme events effects of the BW, LBW, and PTB models. These figures are related to Figure 4 and Extended Data Figure 7 of our paper.

Load packages, read data and source custom scripts

rm(list = ls())
library(bamlss)
#> Loading required package: coda
#> Loading required package: colorspace
#> Loading required package: mgcv
#> Loading required package: nlme
#> This is mgcv 1.8-31. For overview type 'help("mgcv-package")'.
#> 
#> Attaching package: 'bamlss'
#> The following object is masked from 'package:mgcv':
#> 
#>     smooth.construct
library(gamlss.dist)
#> Loading required package: MASS
library(ggplot2)
library(patchwork)
#> 
#> Attaching package: 'patchwork'
#> The following object is masked from 'package:MASS':
#> 
#>     area
path_proj <- day2day::git_path()
path_data <- file.path(path_proj, "data")
path_processed <- file.path(path_data, "processed")
path_modelled <- file.path(path_data, "modelled")
path_summarised <- file.path(path_data, "summarised")

source(file.path(path_proj, "src", "51-bamlss.R"))
source(file.path(path_proj, "src", "57-bamlss-vis-paper.R"))
source(file.path(path_proj, "src", "53-vis-bw-lbw.R"))

bwdata_file <- file.path(path_processed, "bwdata_41_model.fst")
path_model_bw_full <- file.path(path_modelled, "bw-10-full-re-t-burned.rds")
path_model_bw_growth <- file.path(path_modelled, "bw-20-growth-re-t-burned.rds")
path_model_lbw_full <- file.path(path_modelled, "lbw-10-full-re-burned.rds")
path_model_lbw_growth <- file.path(path_modelled, "lbw-20-growth-re-burned.rds")
path_model_pre <- file.path(path_modelled, "pre-11-full-re-burned.rds")

bwdata_model <- fst::read_fst(bwdata_file)
model_bw_full <- readRDS(path_model_bw_full)
model_bw_growth <- readRDS(path_model_bw_growth)
model_lbw_full <- readRDS(path_model_lbw_full)
model_lbw_growth <- readRDS(path_model_lbw_growth)
model_pre <- readRDS(path_model_pre)

data_points <- readRDS(file.path(path_processed, "exposure-reference-points.rds"))[[2]]

Create set of figures for BW, LBW and PTB

labs_lbw <- c("Prenatal exposure to extreme rainfall events", "Odds ratio of low birthweight")
labs_pre <- c("Prenatal exposure to extreme rainfall events", "Odds ratio of prematurity")
fun_mu <- function (x) c95_expression(x, prefix = paste0('(', letters[1:3], ') '))
fun_pi <- function (x) c95_expression(exp(x), 'odds')
baseline <- TRUE
grid <- 50
term <- "s(neg_mckee_mean_8wk,pos_mckee_mean_8wk)"
non_extreme_labs <- c('Exposure to non-extreme deficient rainfall',
                      'Exposure to non-extreme intense rainfall')
non_extreme_labs_weeks <- c('Weeks exposed to non-extreme deficient rainfall',
                            'Weeks exposed to non-extreme intense rainfall')

gg_bw_full <- gg_rain(
    model_bw_full, 'mu', term, grid = grid, data_points = data_points,
    binwidth = 5, skip = 0, FUN = fun_mu, model.frame = bwdata_model, baseline = baseline,
    labs = non_extreme_labs, labs_weeks = non_extreme_labs_weeks)

gg_bw_growth <- gg_rain(
    model_bw_growth, 'mu', term, grid = grid, data_points = data_points,
    binwidth = 5, skip = 0, FUN = fun_mu, model.frame = bwdata_model, baseline = baseline,
    labs = non_extreme_labs, labs_weeks = non_extreme_labs_weeks)

gg_lbw_full <- gg_rain(
    model_lbw_full, 'pi', term, grid = grid, data_points = data_points,
    skip = 0, binwidth = 0.1, FUN = fun_pi, trans = 'log', rev = TRUE,
    model.frame = bwdata_model, reference = 1, baseline = TRUE,
    labs = non_extreme_labs, labs_weeks = non_extreme_labs_weeks, labs_ci = labs_lbw)

gg_lbw_growth <- gg_rain(
    model_lbw_growth, 'pi', term, grid = grid, data_points = data_points,
    skip = 0, binwidth = 0.02, FUN = fun_pi, trans = 'log', rev = TRUE,
    model.frame = bwdata_model, reference = 1, baseline = TRUE,
    labs = non_extreme_labs, labs_weeks = non_extreme_labs_weeks, labs_ci = labs_lbw)

gg_pre <- gg_rain(
    model_pre, 'pi', term, grid = grid, data_points = data_points,
    skip = 0, binwidth = 0.5, FUN = fun_pi, trans = 'log', rev = TRUE,
    model.frame = bwdata_model, reference = 1, baseline = TRUE,
    labs = non_extreme_labs, labs_weeks = non_extreme_labs_weeks, labs_ci = labs_pre)

Main effects

gg <-
    (gg_bw_full$quantiles +
     labs(x = NULL, y = NULL, subtitle = "1) Full birthweight model")) +
    (gg_bw_growth$quantiles +
     labs(x = NULL, y = NULL, subtitle = "2) Growth birthweight model")) +
    (gg_lbw_full$quantiles +
     labs(x = NULL, subtitle = "3) Full low birthweight model") +
     theme(axis.title.y = element_text(hjust = 0))) +
    (gg_lbw_growth$quantiles +
     labs(x = NULL, y = NULL, subtitle = "4) Growth low birthweight model")) +
    (gg_pre$quantiles +
     labs(y = NULL, subtitle = "5) Prematurity model")) +
    plot_layout(ncol = 1)
ggsave(file.path(path_summarised, "mod-eff-rain-non-extremes.pdf"), gg ,
       width = 20, height = 32, units = "cm")

print(gg)

Main significant effects

gg <-
    (gg_bw_full$significant +
     labs(x = NULL, subtitle = "1) Full birthweight model")) +
    (gg_bw_growth$significant +
     labs(x = NULL, y = NULL, subtitle = "2) Growth birthweight model")) +
    (gg_lbw_full$significant +
     labs(x = NULL, subtitle = "3) Full low birthweight model")) +
    (gg_lbw_growth$significant +
     labs(x = NULL, y = NULL, subtitle = "4) Growth low birthweight model")) +
    (gg_pre$significant + labs(subtitle = "5) Prematurity model")) +
    plot_layout(ncol = 2, nrow = 3)
ggsave(file.path(path_summarised, "mod-eff-rain-non-extremes-significant.pdf"), gg ,
       width = 21, height = 25, units = "cm")

print(gg)

Credible intervals for reference points

gg <-
    (gg_bw_full$ci +
     labs(x = NULL, subtitle = "1) Full birthweight model")) +
    (gg_bw_growth$ci +
     labs(x = NULL, y = NULL, subtitle = "2) Growth birthweight model")) +
    (gg_lbw_full$ci +
     labs(x = NULL, subtitle = "3) Full low birthweight model")) +
    (gg_lbw_growth$ci +
     labs(x = NULL, y = NULL, subtitle = "4) Growth low birthweight model")) +
    (gg_pre$ci + labs(subtitle = "5) Prematurity model")) +
    plot_layout(ncol = 2, nrow = 3)
ggsave(file.path(path_summarised, "mod-eff-rain-non-extremes-ci.pdf"),
       gg, width = 27, height = 21, units = "cm")

print(gg)

Main effects (weeks approximation)

gg <-
    (gg_bw_full$quantiles_weeks +
     labs(x = NULL, y = NULL, subtitle = "1) Full birthweight model")) +
    (gg_bw_growth$quantiles_weeks +
     labs(x = NULL, y = NULL, subtitle = "2) Growth birthweight model")) +
    (gg_lbw_full$quantiles_weeks +
     labs(x = NULL, subtitle = "3) Full low birthweight model") +
     theme(axis.title.y = element_text(hjust = 0))) +
    (gg_lbw_growth$quantiles_weeks +
     labs(x = NULL, y = NULL, subtitle = "4) Growth low birthweight model")) +
    (gg_pre$quantiles_weeks +
     labs(y = NULL, subtitle = "5) Prematurity model")) +
    plot_layout(ncol = 1)
ggsave(file.path(path_summarised, "mod-eff-rain-non-extremes-weeks.pdf"), gg ,
       width = 20, height = 32, units = "cm")

print(gg)

Main significant effects (weeks approximation)

gg <-
    (gg_bw_full$significant_weeks +
     labs(x = NULL, y = NULL, subtitle = "1) Full birthweight model")) +
    (gg_bw_growth$significant_weeks +
     labs(x = NULL, y = NULL, subtitle = "2) Growth birthweight model")) +
    (gg_lbw_full$significant_weeks +
     labs(x = NULL, subtitle = "3) Full low birthweight model") +
     theme(axis.title.y = element_text(hjust = 0))) +
    (gg_lbw_growth$significant_weeks +
     labs(x = NULL, y = NULL, subtitle = "4) Growth low birthweight model")) +
    (gg_pre$significant_weeks +
     labs(y = NULL, subtitle = "5) Prematurity model")) +
    plot_layout(ncol = 2, nrow = 3)
ggsave(file.path(path_summarised, "mod-eff-rain-non-extremes-significant-weeks.pdf"),
       gg, width = 21, height = 25, units = "cm")

print(gg)

Time to execute the task

Only useful when executed with Rscript.

proc.time()
#>    user  system elapsed 
#> 152.826   3.552 156.251