Created
May 15, 2020 16:19
-
-
Save tmellan/3cb7449c6c151349a7cd916a77ba7aa3 to your computer and use it in GitHub Desktop.
code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| library(rstan) | |
| library(matrixStats) | |
| library(data.table) | |
| library(lubridate) | |
| library(gdata) | |
| library(dplyr) | |
| library(tidyr) | |
| library(EnvStats) | |
| library(scales) | |
| library(tidyverse) | |
| library(dplyr) | |
| library(abind) | |
| library(xtable) | |
| library(ggplot2) | |
| library(gridExtra) | |
| library(ggpubr) | |
| library(bayesplot) | |
| library(cowplot) | |
| #library(svglite) | |
| library(openxlsx) | |
| source("geom-stepribbon.r") | |
| source("gammaAlt.r") | |
| source("Brazil/xlsx_preprocessing_subnation_brazil.R") | |
| weight_fatality<-read.csv(paste0("Brazil/IFRS_all.csv"))[c("X","State","IFR_Peru_poorer")] | |
| # weight_fatality<-read.csv(paste0("Brazil/IFRS_all.csv"))[c("State","IFR_UK_poorer")] | |
| # weight_fatality<-read.csv(paste0("Brazil/IFRS_all.csv"))[c("State","IFR_Peru")] | |
| # weight_fatality<-read.csv(paste0("Brazil/IFRS_all.csv"))[c("State","IFR_UK")] | |
| cfr.by.country<-weight_fatality | |
| colnames(cfr.by.country)<-c(" ","region","weighted_fatality") | |
| cfr.by.country | |
| for (scene_i in 1:1){ | |
| #################################################################### | |
| #### Parameters to input: | |
| scenario = scene_i | |
| DEBUG=TRUE | |
| #DEBUG=FALSE | |
| START_TIME=as.Date("2020-02-19") | |
| END_TIME=as.Date("2020-05-30") | |
| RANGE_TIME=seq(START_TIME,END_TIME,by = '1 day') | |
| countries <- c("RJ","SP","PE","CE","AM","BA","ES","MA","MG","PR","PA","RN","RS","SC","AL","PB") | |
| #countries <- c("RJ","SP") | |
| #FULL set countries | |
| # countries <- c('MS','MT','TO','RR','SE','DF','RO','AC','PI','GO','SC','AP','RN','RS','PR','MG', | |
| # 'PB','AL','ES','BA','MA','PA','AM','PE','CE','RJ','SP') | |
| #countries <- c("RJ","SP") | |
| models = c("base-general-half") | |
| ONSET_to_DEATH=18.8 | |
| # countries <- c("RJ","SP","PE","CE","AM") | |
| # countries <- c("RJ","SP","PE","CE","AM","BA") | |
| #countries <- c("RJ","SP") | |
| # conterfactual_rate = c(0.75,1,1.25) | |
| conterfactual_rate = c(1) | |
| # models = c("base-general-half","base-general-full",'base-general-half-underreport-25', | |
| # 'base-general-half-underreport-50',"base-general-half-underreport-100","base-general-half-underreport-200") | |
| # models = c("base-general-half","base-general-full",'base-general-half-underreport-25pc','base-general-half-underreport-50pc', | |
| # "base-general-half-underreport-100pc","base-general-half-underreport-200pc") | |
| #models = c("base-general-half","base-general-full") | |
| # models = c("base-general-full",'base-general-half-underreport-25pc','base-general-half-underreport-50pc', | |
| # "base-general-half-underreport-100pc","base-general-half-underreport-200pc") | |
| #models = c("base-general-half") | |
| #models = c("base-general-half","base-general-full",'base-general-half-underreport-25pc','base-general-half-underreport-50pc', | |
| # "base-general-half-underreport-100pc","base-general-half-underreport-200pc") | |
| # ONSET_to_DEATH=16.9 | |
| #ONSET_to_DEATH=20.7 | |
| ####################################################################A | |
| pars = expand.grid(conterfactual_rate,models) | |
| pars | |
| conterfactual_rate = pars$Var1[scenario] | |
| StanModel = as.character(pars$Var2[scenario]) | |
| #Function to fill missings in mobility | |
| f1 <- function(dat) { | |
| N <- length(dat) | |
| na.pos <- which(is.na(dat)) | |
| if (length(na.pos) %in% c(0, N)) { | |
| return(dat) | |
| } | |
| non.na.pos <- which(!is.na(dat)) | |
| intervals <- findInterval(na.pos, non.na.pos, | |
| all.inside = TRUE) | |
| left.pos <- non.na.pos[pmax(1, intervals)] | |
| right.pos <- non.na.pos[pmin(N, intervals+1)] | |
| left.dist <- na.pos - left.pos | |
| right.dist <- right.pos - na.pos | |
| dat[na.pos] <- ifelse(left.dist <= right.dist, | |
| dat[left.pos], dat[right.pos]) | |
| return(dat) | |
| } | |
| #Run from base directory | |
| d<-df | |
| #Set model manually to run in notebook | |
| print(sprintf("Running %s",StanModel)) | |
| serial.interval = read.csv("data/serial_interval.csv") | |
| # using covariates as dates we want - currently not used | |
| interventions <- read.csv2(paste0(path,"/brazil_interventions.csv"), sep=";") | |
| interventions[,2] <- dmy(as.character(interventions[,2])) | |
| interventions[,3] <- dmy(as.character(interventions[,3])) | |
| interventions[,4] <- dmy(as.character(interventions[,4])) | |
| interventions[,5] <- dmy(as.character(interventions[,5])) | |
| colnames(interventions) = c("region","Emergency","Retail and Service","Transport","School Closing") | |
| if(DEBUG == FALSE) { | |
| N2 = length(RANGE_TIME) | |
| } else { | |
| N2 = length(RANGE_TIME) | |
| } | |
| dates = list() | |
| reported_cases = list() | |
| # stan_data = list(M=length(countries),N=NULL,covariate1=NULL,covariate2=NULL,covariate3=NULL,covariate4=NULL,covariate5=NULL,covariate6=NULL,covariate7=NULL,deaths=NULL,f=NULL, | |
| # N0=6,cases=NULL,SI=serial.interval$fit[1:N2], | |
| # EpidemicStart = NULL, pop = NULL) # N0 = 6 to make it consistent with Rayleigh | |
| stan_data = list(M=length(countries),N=NULL,covariate1=NULL,covariate2=NULL,covariate3=NULL,covariate4=NULL,deaths=NULL,f=NULL, | |
| N0=6,cases=NULL,SI=serial.interval$fit[1:N2], | |
| EpidemicStart = NULL, pop = NULL) # N0 = 6 to make it consistent with Rayleigh | |
| deaths_by_country = list() | |
| # various distributions required for modeling | |
| mean1 = 5.1; cv1 = 0.86; # infection to onset | |
| mean2 = ONSET_to_DEATH; cv2 = 0.45 # onset to death | |
| x1 = rgammaAlt(1e6,mean1,cv1) # infection-to-onset distribution | |
| x2 = rgammaAlt(1e6,mean2,cv2) # onset-to-death distribution | |
| ecdf.saved = ecdf(x1+x2) | |
| aux.epidemicStart = NULL | |
| for(Country in countries) { | |
| IFR=cfr.by.country$weighted_fatality[which(cfr.by.country$region == Country)] | |
| #IFR<-IFR[!is.na(IFR)] | |
| d1=d[d$region==Country,] | |
| d1_pop = df_pop[df_pop$region==Country,] | |
| aux.dates = seq.Date(from=as.Date("2020-01-01"),d1$DateRep[1],by="1 d") | |
| mat.aux = cbind.data.frame(rep(Country,length(aux.dates)),aux.dates, rep(d1_pop$population[1],length(aux.dates)), | |
| rep(0,length(aux.dates)),rep(0,length(aux.dates)),rep(0,length(aux.dates)),rep(0,length(aux.dates))) | |
| colnames(mat.aux) = colnames(d1) | |
| d1 = rbind.data.frame(d1,mat.aux) | |
| d1 = d1[order(d1$DateRep),] | |
| mobility1=mobility[mobility$region==Country,] | |
| mobility1 = mobility1[order(as.Date(mobility1$date)),] # ensure date ordering | |
| mobility1$date = as.Date(mobility1$date) | |
| # merge d1 and mobility - repeating the ones without data | |
| aux = left_join(d1,mobility1,by=c("DateRep" = "date")) | |
| # input missing fisrt column | |
| aux$region.y = f1(as.character(aux$region.y)) | |
| # input missing mobility | |
| idx = which(colnames(aux) %in% c("grocery_pharmacy","parks","residential","retail_recreation","transitstations","workplace")) | |
| aux[,idx] = apply(aux[,idx], 2, function(x) f1(x)) | |
| mobility1 = aux[,c("region.x","DateRep","grocery_pharmacy","parks","residential","retail_recreation","transitstations","workplace")] | |
| colnames(mobility1)[1:2] = c("county","date") | |
| mobility1 = mobility1[order(as.Date(mobility1$date)),] | |
| ## adding interventions to d1 | |
| aux.int = interventions[interventions$region==Country,] | |
| d1$Emergency = rep(0,nrow(d1)) | |
| d1$Retail = rep(0,nrow(d1)) | |
| d1$Transport = rep(0,nrow(d1)) | |
| d1$Schools = rep(0,nrow(d1)) | |
| ## check if the intervention happened or not | |
| ifelse(!is.na(aux.int$Emergency),d1$Emergency[which(as.Date(d1$DateRep)==as.Date(aux.int$Emergency)):nrow(d1)] <- 1, | |
| d1$Emergency<-0) | |
| ifelse(!is.na(aux.int$`Retail and Service`),d1$Retail[which(as.Date(d1$DateRep)==as.Date(aux.int$`Retail and Service`)):nrow(d1)] <- 1, | |
| d1$Retail<-0) | |
| ifelse(!is.na(aux.int$Transport),d1$Transport[which(as.Date(d1$DateRep)==as.Date(aux.int$Transport)):nrow(d1)] <- 1, | |
| d1$Transport<-0) | |
| ifelse(!is.na(aux.int$`School Closing`),d1$Schools[which(as.Date(d1$DateRep)==as.Date(aux.int$`School Closing`)):nrow(d1)] <- 1, | |
| d1$Schools <- 0) | |
| index = which(d1$Cases>0)[1] | |
| index1 = which(cumsum(d1$Deaths)>=10)[1] # also 5 | |
| index2 = index1-30 | |
| print(sprintf("First non-zero cases is on day %d, and 30 days before 10 deaths is day %d",index,index2)) | |
| d1=d1[index2:nrow(d1),] | |
| aux.epidemicStart = c(aux.epidemicStart,d1$DateRep[index1+1-index2]) | |
| stan_data$EpidemicStart = c(stan_data$EpidemicStart,index1+1-index2) | |
| stan_data$pop = c(stan_data$pop, d1_pop$population) | |
| mobility1 = mobility1[index2:nrow(mobility1),] | |
| dates[[Country]] = d1$DateRep | |
| # hazard estimation | |
| N = length(d1$Cases) | |
| N0=N | |
| print(sprintf("%s has %d days of data",Country,N)) | |
| forecast = N2 - N | |
| if(forecast < 0) { | |
| print(sprintf("%s: %d", Country, N)) | |
| print("ERROR!!!! increasing N2") | |
| N2 = N | |
| forecast = N2 - N | |
| } | |
| # IFR is the overall probability of dying given infection | |
| convolution = function(u) (IFR * ecdf.saved(u)) | |
| f = rep(0,N2) # f is the probability of dying on day i given infection | |
| f[1] = (convolution(1.5) - convolution(0)) | |
| for(i in 2:N2) { | |
| f[i] = (convolution(i+.5) - convolution(i-.5)) | |
| } | |
| reported_cases[[Country]] = as.vector(as.numeric(d1$Cases)) | |
| deaths=c(as.vector(as.numeric(d1$Deaths)),rep(-1,forecast)) | |
| cases=c(as.vector(as.numeric(d1$Cases)),rep(-1,forecast)) | |
| deaths_by_country[[Country]] = as.vector(as.numeric(d1$Deaths)) | |
| library(forecast) | |
| #covariate for mobility now being passed | |
| covariates2 <- as.data.frame(mobility1[, c("grocery_pharmacy","parks","residential","retail_recreation","transitstations","workplace")]) | |
| models = apply(covariates2, 2, function(x) auto.arima(x, seasonal = T)) | |
| mat.forecast = lapply(models, function(x) forecast(x,length((N+1):(N+forecast)))$mean) | |
| covariates2[(N+1):(N+forecast),] <- conterfactual_rate*cbind(mat.forecast$grocery_pharmacy,mat.forecast$parks,mat.forecast$residential,mat.forecast$retail_recreation, | |
| mat.forecast$transitstations,mat.forecast$workplace) | |
| #covariates2[(N+1):(N+forecast),] <- conterfactual_rate*covariates2[N,] | |
| average <- (covariates2[,1] + covariates2[,4]+ covariates2[,6])/3 | |
| stan_data$covariate1 = cbind(stan_data$covariate1,covariates2[,3]) #Residential | |
| stan_data$covariate2 = cbind(stan_data$covariate2,covariates2[,5]) #Transitstations | |
| stan_data$covariate3 = cbind(stan_data$covariate3,average) #Mean of Grocery, Retail, workplace | |
| stan_data$covariate4 = cbind(stan_data$covariate4,covariates2[,2]) #Parks | |
| # covariates for interventions and week effects | |
| #covariates3 <- as.data.frame(d1[,c("Emergency","Retail","Transport","Schools","Week","Weekend")]) | |
| # covariates3 <- as.data.frame(d1[,c("Emergency","Retail","Transport","Schools")]) | |
| # covariates3[N:(N+forecast),] <- covariates3[N,] | |
| # stan_data$covariate4 = cbind(stan_data$covariate4,covariates3[,1]) | |
| # stan_data$covariate5 = cbind(stan_data$covariate5,covariates3[,2]) | |
| # stan_data$covariate6 = cbind(stan_data$covariate6,covariates3[,3]) | |
| # stan_data$covariate7 = cbind(stan_data$covariate7,covariates3[,4]) | |
| # stan_data$covariate8 = cbind(stan_data$covariate8,covariates3[,5]) | |
| # stan_data$covariate9 = cbind(stan_data$covariate9,covariates3[,6]) | |
| stan_data$N = c(stan_data$N,N) | |
| stan_data$f = cbind(stan_data$f,f) | |
| stan_data$deaths = cbind(stan_data$deaths,deaths) | |
| stan_data$cases = cbind(stan_data$cases,cases) | |
| stan_data$N2=N2 | |
| stan_data$x=1:N2 | |
| if(length(stan_data$N) == 1) { | |
| stan_data$N = as.array(stan_data$N) | |
| } | |
| } | |
| options(mc.cores = parallel::detectCores()) | |
| rstan_options(auto_write = TRUE) | |
| m = stan_model(paste0('Brazil/stan-models/',StanModel,'.stan')) | |
| ## Adding everything to the X matrix as General is doing | |
| # stan_data$X = list(stan_data$covariate1,stan_data$covariate2,stan_data$covariate3,stan_data$covariate4,stan_data$covariate5, | |
| # stan_data$covariate6,stan_data$covariate7) | |
| stan_data$X = list(stan_data$covariate1,stan_data$covariate2,stan_data$covariate3,stan_data$covariate4) | |
| stan_data$P = length(stan_data$X) | |
| if(DEBUG) { | |
| fit = sampling(m,data=stan_data,iter=20,warmup=10,chains=3) | |
| } else { | |
| fit = sampling(m,data=stan_data,iter=1500,warmup=500,chains=8,thin=1, control = list(adapt_delta = 0.95, max_treedepth = 15)) | |
| } | |
| out = rstan::extract(fit) | |
| prediction = out$prediction | |
| estimated.deaths = out$E_deaths | |
| estimated.deaths.cf = out$E_deaths0 | |
| JOBID = Sys.getenv("PBS_JOBID") | |
| if(JOBID == "") | |
| JOBID = as.character(abs(round(rnorm(1) * 1000000))) | |
| print(sprintf("Jobid = %s",JOBID)) | |
| filename <- paste0(StanModel,'-',JOBID) | |
| save.image(paste0('Brazil/results/',StanModel,'-',filename,"counterfactual_",conterfactual_rate,".Rdata")) | |
| table_paper = NULL | |
| for(i in 1:length(countries)){ | |
| print(i) | |
| N <- length(dates[[i]]) | |
| country <- countries[[i]] | |
| predicted_cases <- colMeans(prediction[,1:N,i]) | |
| predicted_cases_li <- colQuantiles(prediction[,1:N,i], probs=.025) | |
| predicted_cases_ui <- colQuantiles(prediction[,1:N,i], probs=.975) | |
| predicted_cases_li2 <- colQuantiles(prediction[,1:N,i], probs=.25) | |
| predicted_cases_ui2 <- colQuantiles(prediction[,1:N,i], probs=.75) | |
| estimated_deaths <- colMeans(estimated.deaths[,1:N,i]) | |
| estimated_deaths_li <- colQuantiles(estimated.deaths[,1:N,i], probs=.025) | |
| estimated_deaths_ui <- colQuantiles(estimated.deaths[,1:N,i], probs=.975) | |
| estimated_deaths_li2 <- colQuantiles(estimated.deaths[,1:N,i], probs=.25) | |
| estimated_deaths_ui2 <- colQuantiles(estimated.deaths[,1:N,i], probs=.75) | |
| rt <- colMeans(out$Rt_adj[,1:N,i]) | |
| rt_li <- colQuantiles(out$Rt_adj[,1:N,i],probs=.025) | |
| rt_ui <- colQuantiles(out$Rt_adj[,1:N,i],probs=.975) | |
| rt_li2 <- colQuantiles(out$Rt_adj[,1:N,i],probs=.25) | |
| rt_ui2 <- colQuantiles(out$Rt_adj[,1:N,i],probs=.75) | |
| data_country <- data.frame("time" = as_date(as.character(dates[[i]])), | |
| "country" = rep(country, length(dates[[i]])), | |
| "reported_cases" = reported_cases[[i]], | |
| "reported_cases_c" = cumsum(reported_cases[[i]]), | |
| "predicted_cases_c" = cumsum(predicted_cases), | |
| "predicted_min_c" = cumsum(predicted_cases_li), | |
| "predicted_max_c" = cumsum(predicted_cases_ui), | |
| "predicted_cases" = predicted_cases, | |
| "predicted_min" = predicted_cases_li, | |
| "predicted_max" = predicted_cases_ui, | |
| "predicted_min2" = predicted_cases_li2, | |
| "predicted_max2" = predicted_cases_ui2, | |
| "deaths" = deaths_by_country[[i]], | |
| "deaths_c" = cumsum(deaths_by_country[[i]]), | |
| "estimated_deaths_c" = cumsum(estimated_deaths), | |
| "death_min_c" = cumsum(estimated_deaths_li), | |
| "death_max_c"= cumsum(estimated_deaths_ui), | |
| "estimated_deaths" = estimated_deaths, | |
| "death_min" = estimated_deaths_li, | |
| "death_max"= estimated_deaths_ui, | |
| "death_min2" = estimated_deaths_li2, | |
| "death_max2"= estimated_deaths_ui2, | |
| "rt" = rt, | |
| "rt_min" = rt_li, | |
| "rt_max" = rt_ui, | |
| "rt_min2" = rt_li2, | |
| "rt_max2" = rt_ui2) | |
| aux = data_country[,c("reported_cases","predicted_cases","predicted_min2","predicted_max2","deaths","death_min2","death_max2")] | |
| aux2 = data.frame(as.character(country), | |
| tail(apply(aux, 2, cumsum),1), | |
| (df_pop[which(df_pop$region==country),2]) | |
| ) | |
| table_paper = rbind.data.frame(table_paper,aux2) | |
| # aux_a = data_country[,c("reported_cases","predicted_cases","predicted_min2","predicted_max2")] | |
| # aux_a2 = data.frame(as.character(country), | |
| # tail(apply(aux_a, 2, cumsum),1), | |
| # df_pop[which(df_pop$region==country),2] | |
| # ) | |
| # table_paper_cases = rbind.data.frame(table_paper_cases,aux_a2) | |
| data_cases_95 <- data.frame(data_country$time, data_country$predicted_min, | |
| data_country$predicted_max) | |
| names(data_cases_95) <- c("time", "cases_min", "cases_max") | |
| data_cases_95$key <- rep("nintyfive", length(data_cases_95$time)) | |
| data_cases_50 <- data.frame(data_country$time, data_country$predicted_min2, | |
| data_country$predicted_max2) | |
| names(data_cases_50) <- c("time", "cases_min", "cases_max") | |
| data_cases_50$key <- rep("fifty", length(data_cases_50$time)) | |
| data_cases <- rbind(data_cases_95, data_cases_50) | |
| levels(data_cases$key) <- c("ninetyfive", "fifty") | |
| p1 <- ggplot(data_country) + | |
| geom_bar(data = data_country, aes(x = time, y = reported_cases), | |
| fill = "coral4", stat='identity', alpha=0.5) + | |
| geom_ribbon(data = data_cases, | |
| aes(x = time, ymin = cases_min, ymax = cases_max, fill = key)) + | |
| xlab("") + | |
| ylab("Daily number of infections\n") + | |
| scale_x_date(date_breaks = "2 weeks", labels = date_format("%e %b")) + | |
| scale_y_continuous(expand = c(0, 0), labels = comma) + | |
| scale_fill_manual(name = "", labels = c("50%", "95%"), | |
| values = c(alpha("deepskyblue4", 0.55), | |
| alpha("deepskyblue4", 0.45))) + | |
| theme_pubr() + | |
| theme(axis.text.x = element_text(angle = 45, hjust = 1), | |
| legend.position = "None") + ggtitle(df_region_codes[which(df_region_codes[,1]==country),2]) + | |
| guides(fill=guide_legend(ncol=1)) | |
| data_deaths_95 <- data.frame(data_country$time, data_country$death_min, | |
| data_country$death_max) | |
| names(data_deaths_95) <- c("time", "death_min", "death_max") | |
| data_deaths_95$key <- rep("nintyfive", length(data_deaths_95$time)) | |
| data_deaths_50 <- data.frame(data_country$time, data_country$death_min2, | |
| data_country$death_max2) | |
| names(data_deaths_50) <- c("time", "death_min", "death_max") | |
| data_deaths_50$key <- rep("fifty", length(data_deaths_50$time)) | |
| data_deaths <- rbind(data_deaths_95, data_deaths_50) | |
| levels(data_deaths$key) <- c("ninetyfive", "fifty")+ coord_fixed(ratio = 10) | |
| p2 <- ggplot(data_country, aes(x = time)) + | |
| geom_bar(data = data_country, aes(y = deaths, fill = "reported"), | |
| fill = "coral4", stat='identity', alpha=0.5) + | |
| geom_ribbon( | |
| data = data_deaths, | |
| aes(ymin = death_min, ymax = death_max, fill = key)) + | |
| scale_x_date(date_breaks = "2 weeks", labels = date_format("%e %b")) + | |
| scale_y_continuous(expand = c(0, 0), labels = comma) + | |
| scale_fill_manual(name = "", labels = c("50%", "95%"), | |
| values = c(alpha("deepskyblue4", 0.55), | |
| alpha("deepskyblue4", 0.45))) + | |
| ylab("Daily number of deaths\n") + | |
| xlab("") + | |
| theme_pubr() + | |
| theme(axis.text.x = element_text(angle = 45, hjust = 1), | |
| legend.position = "None") + | |
| guides(fill=guide_legend(ncol=1)) | |
| # Plotting interventions | |
| data_rt_95 <- data.frame(data_country$time, | |
| data_country$rt_min, data_country$rt_max) | |
| names(data_rt_95) <- c("time", "rt_min", "rt_max") | |
| data_rt_95$key <- rep("nintyfive", length(data_rt_95$time)) | |
| data_rt_50 <- data.frame(data_country$time, data_country$rt_min2, | |
| data_country$rt_max2) | |
| names(data_rt_50) <- c("time", "rt_min", "rt_max") | |
| data_rt_50$key <- rep("fifty", length(data_rt_50$time)) | |
| data_rt <- rbind(data_rt_95, data_rt_50) | |
| levels(data_rt$key) <- c("ninetyfive", "fifth") | |
| # interventions | |
| # # delete these 2 lines | |
| covariates_country <- interventions[which(interventions$region == country),-1] | |
| covariates_country_long <- gather(covariates_country, key = "key", | |
| value = "value") | |
| covariates_country_long$x <- rep(NULL, length(covariates_country_long$key)) | |
| un_dates <- unique(covariates_country_long$value) | |
| for (k in 1:length(un_dates)){ | |
| idxs <- which(covariates_country_long$value == un_dates[k]) | |
| max_val <- round(max(rt_ui)) + 0.3 | |
| for (j in idxs){ | |
| covariates_country_long$x[j] <- max_val | |
| max_val <- max_val - 0.3 | |
| } | |
| } | |
| covariates_country_long$value <- as_date(covariates_country_long$value) | |
| covariates_country_long$country <- rep(country, | |
| length(covariates_country_long$value)) | |
| # plot_labels <- c("Emergency","Retail and Service","Transport","School Closing") | |
| plot_labels <- c("Emergency","Retail and Service","School Closing","Transport") | |
| p3 <- ggplot(data_country) + | |
| geom_ribbon(data = data_rt, aes(x = time, ymin = rt_min, ymax = rt_max, | |
| group = key, | |
| fill = key)) + | |
| geom_hline(yintercept = 1, color = 'black', size = 0.1) + | |
| geom_segment(data = covariates_country_long, | |
| aes(x = value, y = 0, xend = value, yend = max(x)), | |
| linetype = "dashed", colour = "grey", alpha = 0.75) + | |
| geom_point(data = covariates_country_long, aes(x = value, | |
| y = x, | |
| group = key, | |
| shape = key, | |
| col = key), size = 2) + | |
| xlab("") + | |
| ylab(expression(R[t])) + | |
| scale_fill_manual(name = "", labels = c("50%", "95%"), | |
| values = c(alpha("seagreen", 0.75), alpha("seagreen", 0.5))) + | |
| scale_shape_manual(name = "Interventions", labels = plot_labels, | |
| values = c(21, 22, 23, 24, 25, 12)) + | |
| scale_colour_discrete(name = "Interventions", labels = plot_labels) + | |
| scale_x_date(date_breaks = "weeks", labels = date_format("%e %b"), | |
| limits = c(data_country$time[1], | |
| data_country$time[length(data_country$time)])) + | |
| scale_y_continuous(expand = expansion(mult=c(0,0.1))) + | |
| theme_pubr() + | |
| theme(axis.text.x = element_text(angle = 45, hjust = 1)) + | |
| theme(legend.position="right") | |
| ptmp <- plot_grid(p1, p2, p3, ncol = 3, rel_widths = c(0.75, 0.75, 1)) | |
| print(ptmp) | |
| #save_plot(filename = paste0("Brazil/figures/", country, "_three_pannel_", filename2, ".png"), p, base_width = 14) | |
| #ggsave(ptmp, file=paste0("Brazil/figures/", country, "_three_pannel_", JOBID,'-',filename2, ".png"), width = 14) | |
| ggsave(ptmp, | |
| file=paste0("Brazil/figures/",country, "counterfactual_",conterfactual_rate,",_three_pannel_", JOBID,'-',StanModel, ".pdf"), width = 14, height = 5) | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment