##%########################################################################%##
#                                                                            #
###         Exposure to Pseudomonas spp. increases Anopheles gambiae       ###
###            insecticide resistance in a host-dependent manner           ### 
###                                                                        ###
###     Luís M. Silva, Gwendoline Acerbi, Marine Amann, Jacob C. Koella    ###
###                                   2023                                 ### 
###                                                                        ### 
##%########################################################################%##

# R version 4.3.1, R studio version 3034.06.2+561

# libraries
library(car);packageVersion("car") # 3.1.2
library(ggplot2);packageVersion("ggplot2") # 3.4.3
library(DHARMa);packageVersion("DHARMa") # 0.4.6
library(emmeans);packageVersion("emmeans") # 1.8.8
library(scales);packageVersion("scales") # 1.2.1
library(survival);packageVersion("survival") # 3.5.7
library(lme4);packageVersion("lme4") # 1.1.34
library(dplyr);packageVersion("dplyr") # 1.1.3
library(tidyr);packageVersion("tidyr") # 1.3.0
library(purrr);packageVersion("purrr") # 1.0.2

# themes
theme.luis <- function(){
  theme_bw()+
    theme(axis.text.x = element_text(size = 14, vjust = 1, hjust = 0.5),
          axis.text.y = element_text(size = 14),
          axis.title.x = element_text(size = 14, face = "plain"),             
          axis.title.y = element_text(size = 14, face = "plain"),             
          panel.grid.major.x = element_blank(),                                          
          panel.grid.minor.x = element_blank(),
          panel.grid.minor.y = element_blank(),
          panel.grid.major.y = element_blank(),  
          plot.margin = unit(c(0.5, 0.5, 0.5, 0.5), units = , "cm"),
          plot.title = element_text(size = 20, vjust = 1, hjust = 0.5),
          legend.title = element_text(size=14),
          legend.text = element_text(size = 14),
          legend.position = "right")
}

##### 1. Developmental traits #####

sr = read.csv("Fig1_data.csv", header = TRUE, sep = ";")
sr$population <- as.factor(sr$population)
sr$treatment <- as.factor(sr$treatment)

sr_rsp = subset(sr, population == "RSP") 
sr_kis = subset(sr, population == "Kisumu")
sr_kisp <- subset(sr_kis, dead_larva == "0")
sr_rspp <- subset(sr_rsp, dead_larva == "0")
sr_kissr <- subset(sr_kisp, dead_pupa == "0")
sr_rspsr <- subset(sr_rspp, dead_pupa == "0")

# + 1ab Larvae mortality -----

table(sr$treatment, sr$population)

# Kisumu
m1a = glm(dead_larva ~ treatment, data = sr_kis, family = binomial)
sim_m1a <- simulateResiduals(fittedModel = m1a, plot = T) 
Anova(m1a, type = "II") 

# RSP
m1b = glm(dead_larva ~ treatment, data = sr_rsp, family = binomial)
sim_m1b <- simulateResiduals(fittedModel = m1b, plot = T) 
Anova(m1b, type = "II") 
mc_ms2b <-emmeans(m1b, "treatment")
pairs(mc_m1b, simple = "treatment") 
plot(mc_m1b, comparisons = T)

# + 1cd Pupae mortality -----

table(sr_kisp$treatment)
table(sr_rspp$treatment)

# Kisumu
m1c = glm(dead_pupa ~ treatment, data = sr_kisp, family = binomial)
sim_m1c <- simulateResiduals(fittedModel = m1c, plot = T) 
Anova(m1c, type = "II") 

# RSP
m1d = glm(dead_pupa ~ treatment, data = sr_rspp, family = binomial)
sim_m1d <- simulateResiduals(fittedModel = m1d, plot = T) 
Anova(m1d, type = "II") 

# + 1ef Sex ratio -----

table(sr_kissr$treatment)
table(sr_rspsr$treatment)

# Kisumu
m1e = glm(female ~ treatment, data = sr_kissr, family = binomial)
sim_m1e <- simulateResiduals(fittedModel = m1e, plot = T) 
Anova(m1e, type = "II") 

# RSP
m1f = glm(female ~ treatment, data = sr_rspsr, family = binomial)
sim_m1f <- simulateResiduals(fittedModel = m1f, plot = T) 
Anova(m1f, type = "II") 

##### 2. Bacterial persistence #####

bp = read.csv("Fig2_data.csv", header = TRUE, sep = ";")
bp$treatment = as.factor(bp$treatment)
bp$dpe = as.factor(bp$dpe)

bp_a = subset(bp, alive == "1")
bp_d = subset(bp, alive == "0")
bp_dkis = subset(bp_d, populatin == "Kisumu")
bp_drsp = subset(bp_d, populatin == "RSP")

# + 2a BL in alive individuals -----

table(bp_a$treatment, bp_a$dpe)

m2a = lm(log(cfu+1) ~ treatment * dpe, data = bp_a)
sim_m2a <- simulateResiduals(fittedModel = m2a, plot = T) 
Anova(m2a, type = "II") # ns
anova(m2a, test = "Chisq") # ns

xtick <- c("3","10","3","10","3","10","3","10")
ggplot(bp_a, aes(y = cfu+1, x = interaction(dpe, treatment), color = treatment, fill = treatment)) +
  labs(x = "Days post emergence", y = "Bacterial load (Mean CFU ± SEM)")+
  geom_dotplot(binaxis = "y", binwidth = 0.1, stackdir = "center", show.legend = F, alpha = 1)+
  stat_summary(fun = mean, geom = "crossbar", color = "black", show.legend = F, size = 0.3, width = 0.3) + 
  stat_summary(fun.data = mean_se, geom = "errorbar",  color = "black", width = 0.5)+
  scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x),limits = c(1, 1e10),labels = trans_format("log10", math_format(10^.x)))+
  scale_colour_manual(values = c("#fecc5c", "#a1dab4", "#41b6c4", "#225ea8"))+
  scale_fill_manual(values = c("#fecc5c", "#a1dab4", "#41b6c4", "#225ea8"))+
  scale_x_discrete(labels = xtick)+
  theme.luis()+
  theme(axis.line = element_line(colour = "black"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

# + 2bc BL in dead individuals -----

table(bp_d$treatment, bp_d$populatin)

# Kisumu
m2b = lm(log(cfu+1) ~ treatment, data = bp_dkis)
sim_mb <- simulateResiduals(fittedModel = m2b, plot = T) 
Anova(m2.2b, type = "II") 
anova(m2.2b, test = "Chisq") 

mc_m2b <-emmeans(m1b, "treatment")
pairs(mc_m2b, simple = "treatment") 
plot(mc_m2b, comparisons = T)

xtick <- c("PA","PE","PF1","PF2")
ggplot(bp_dkis, aes(y = cfu+1,x = treatment, color = treatment, fill = treatment)) +
  labs(x = "Treatment", y = "Bacterial load (Mean CFU ± SEM)")+
  geom_dotplot(binaxis = "y", binwidth = 0.1, stackdir = "center", show.legend = F, alpha = 1)+
  stat_summary(fun = mean, geom ="crossbar", color="black", show.legend = F, size = 0.3, width = 0.3) + 
  stat_summary(fun.data = mean_se, geom = "errorbar",  color = "black", width = 0.5, size = 0.3)+
  scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x),limits = c(1,1e10),labels = trans_format("log10", math_format(10^.x)))+
  scale_colour_manual(values = c("#fecc5c", "#a1dab4", "#41b6c4", "#225ea8"))+
  scale_fill_manual(values = c("#fecc5c", "#a1dab4", "#41b6c4", "#225ea8"))+
  scale_x_discrete(labels = xtick)+
  theme.luis()+
  theme(axis.line = element_line(colour = "black"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

# RSP
m2c = lm(log(cfu+1) ~ treatment, data = bp_drsp)
sim_m2c <- simulateResiduals(fittedModel = m2c, plot = T) 
anova(m2c, test = "Chisq") 

xtick <- c("PA","PE","PF1","PF2")
ggplot(bp_drsp, aes(y = cfu+1,x = treatment, color = treatment, fill = treatment)) +
  labs(x = "Treatment", y = "Bacterial load (Mean CFU ± SEM)")+
  geom_dotplot(binaxis = "y", binwidth = 0.1, stackdir = "center", show.legend = F, alpha = 1)+
  stat_summary(fun = mean, geom ="crossbar", color="black", show.legend = F, size = 0.3, width = 0.3) + 
  stat_summary(fun.data = mean_se, geom = "errorbar",  color = "black", width = 0.5, size = 0.3)+
  scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x),limits = c(1,1e10),labels = trans_format("log10", math_format(10^.x)))+
  scale_colour_manual(values = c("#fecc5c", "#a1dab4", "#41b6c4", "#225ea8"))+
  scale_fill_manual(values = c("#fecc5c", "#a1dab4", "#41b6c4", "#225ea8"))+
  scale_x_discrete(labels = xtick)+
  theme.luis()+
  theme(axis.line = element_line(colour = "black"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

##### 3. Longevity #####

s = read.csv("Fig3_data.csv", header = TRUE, sep = ",")
s$treatment = as.factor(s$treatment)

s_kis = subset(s, population == "Kisumu")
s_rsp = subset(s, population == "RSP")

table(s$treatment, s$population)

# Kisumu
m3a = coxph(formula = Surv(age, censor) ~  treatment, data = s_kis)
summary(m3a)
Anova(m3a, test = "Wald")

plot (survfit (Surv (s_kis$age, s_kis$censor) ~ s_kis$treatment), lty = (c(1)),lwd = 3, col = (c("darkgrey","#fecc5c", "#a1dab4", "#41b6c4", "#225ea8")),
      ylab = "Proportion of individuals alive", xlab="Days after adult emergence", xlim = c(0, 40))+
  legend(23, 1, c("Control", "PA", "PE", "PF1", "PF2"), lty = (c(1)), box.lty = 0, lwd = 2,col = (c("darkgrey", "#fecc5c", "#a1dab4", "#41b6c4", "#225ea8")))+
  theme.luis +
  theme(axis.line = element_line(colour = "black"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

# RSP
m3b = coxph(formula = Surv(age, censor) ~  treatment, data = s_rsp)
summary(m3b)
Anova(m3b, test = "Wald")

plot (survfit (Surv (s_rsp$age, s_rsp$censor) ~ s_rsp$treatment), lty = (c(1)),lwd = 3, col = (c("darkgrey","#fecc5c", "#a1dab4", "#41b6c4", "#225ea8")),
      ylab = "Proportion of individuals alive", xlab="Days after adult emergence", xlim = c(0, 40))+
  legend(23, 1, c("Control", "PA", "PE", "PF1", "PF2"), lty = (c(1)), box.lty = 0, lwd = 2,col = (c("darkgrey", "#fecc5c", "#a1dab4", "#41b6c4", "#225ea8")))+
  theme.luis +
  theme(axis.line = element_line(colour = "black"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

##### 4. Insecticide resistance #####

ir = read.csv("Fig4_data.csv", header = TRUE, sep = ";")
ir$population = as.factor(ir$population)
ir$treatment = as.factor(ir$treatment)
ir$infection = as.factor(ir$infection)
ir$tube = as.factor(ir$tube)

ir_rsp = subset(ir, population == "RSP") 
ir_kis = subset(ir, population == "Kisumu")

table(ir$treatment, ir$population)

# Kisumu
m4a = glmer(dead ~ treatment + (1|tube), data = ir_kis, family = binomial) 
sim_m4a = simulateResiduals(fittedModel = m4a, plot = T) 
Anova(m4a, type = "II") 
mc_m4a <-emmeans(m3kis, "treatment")
pairs(mc_m4a, simple = "treatment") 
plot(mc_m4a, comparisons = T)

dead_kis = 
  ir_kis %>% 
  group_by(treatment, tube, dead) %>% 
  nest() %>% 
  filter(dead == '1') %>%
  mutate(dead_yes = map_dbl(data, ~ nrow(.x))) %>%
  ungroup() %>%
  dplyr::select(-data, -dead) 

alive_kis = 
  ir_kis %>% 
  group_by(treatment, tube, dead) %>% 
  nest() %>% 
  filter(dead == '0') %>%
  mutate(alive_yes = map_dbl(data, ~ nrow(.x))) %>%
  ungroup() %>%
  dplyr::select(-data, -dead)

ins_res_kis = 
  left_join(dead_kis, alive_kis) %>% 
  mutate(prop_alive = alive_yes/(dead_yes + alive_yes)) 

ins_res_kis 
str(ins_res_kis)

ggplot(ins_res_kis, aes(x = treatment, y = prop_alive, color = treatment, fill = treatment)) +
  labs(x = "Treatment", y = "Proportion of alive females (Mean ± SEM)")+
  stat_summary(fun = mean, geom = "bar", color = "black", show.legend = F) +
  stat_summary(fun.data = mean_se, geom = "errorbar",  color = "black", width = 0.5)+
  scale_y_continuous(limits = c(0,1), breaks = c(0, 0.2, 0.4, 0.6, 0.8, 1.0), labels = c("0", "0.2", "0.4", "0.6", "0.8", "1.0")) +
  scale_colour_manual(values = c( "darkgrey", "#fecc5c", "#a1dab4", "#41b6c4", "#225ea8"))+
  scale_fill_manual(values = c( "darkgrey", "#fecc5c", "#a1dab4", "#41b6c4", "#225ea8"))+
  theme.luis()+
  theme(axis.line = element_line(colour = "black"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

# RSP
m4b = glmer(dead ~ treatment + (1|tube), data = ir_rsp, family = binomial) 
sim_m4b = simulateResiduals(fittedModel = m4b, plot = T) 
Anova(m4b, type = "II") 
mc_m4b <-emmeans(m4b, "treatment")
pairs(mc_m4b, simple = "treatment") 
plot(mc_m4b, comparisons = T)

dead_rsp = 
  ir_rsp %>% 
  group_by(treatment, tube, dead) %>% 
  nest() %>% 
  filter(dead == '1') %>%
  mutate(dead_yes = map_dbl(data, ~ nrow(.x))) %>%
  ungroup() %>%
  dplyr::select(-data, -dead) 

alive_rsp = 
  ir_rsp %>% 
  group_by(treatment, tube, dead) %>% 
  nest() %>% 
  filter(dead == '0') %>%
  mutate(alive_yes = map_dbl(data, ~ nrow(.x))) %>%
  ungroup() %>%
  dplyr::select(-data, -dead)

ins_res_rsp = 
  left_join(dead_rsp, alive_rsp) %>% 
  mutate(prop_alive = alive_yes/(dead_yes + alive_yes)) 

ins_res_rsp 
str(ins_res_rsp)

ggplot(ins_res_rsp, aes(x = treatment, y = prop_alive, color = treatment, fill = treatment)) +
  labs(x = "Treatment", y = "Proportion of alive females (Mean ± SEM)")+
  stat_summary(fun = mean, geom = "bar", color = "black", show.legend = F) +
  stat_summary(fun.data = mean_se, geom = "errorbar",  color = "black", width = 0.5)+
  scale_y_continuous(limits = c(0,1), breaks=c(0, 0.2, 0.4, 0.6, 0.8, 1.0), labels = c("0", "0.2", "0.4", "0.6", "0.8", "1.0")) +
  scale_colour_manual(values = c( "darkgrey", "#fecc5c", "#a1dab4", "#41b6c4", "#225ea8"))+
  scale_fill_manual(values = c( "darkgrey", "#fecc5c", "#a1dab4", "#41b6c4", "#225ea8"))+
  theme.luis()+
  theme(axis.line = element_line(colour = "black"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

##### S1. Infection success #####

s1 = read.csv("FigS1_data.csv", header = TRUE, sep = ";")
s1$treatment = as.factor(s1$treatment)
s1$dose2 = as.factor(s1$dose2)

s1 = subset(s1, treatment != "Control")

ms1 = glm(cfu_bin ~ treatment * dose2, family = binomial, data = s1)
sim_ms1 = simulateResiduals(fittedModel = ms1, plot = T) 
Anova(ms1, type = "II") 

s1_error <- s1 %>%
  group_by(treatment, dose2) %>%
  summarise(n = n(), mean = mean(cfu_bin, na.rm = TRUE),
            sd = sd(cfu_bin, na.rm = TRUE)) %>%
  mutate(se = sd / sqrt(n),
         lci = mean - qt(1 - (0.05 / 2), n - 1) * se,
         uci = mean + qt(1 - (0.05 / 2), n - 1) * se)
View(s1_error)

s1_error$lsem = c(0.4992,1,1,1,1,1,1,1,1,1,1)
s1_error$usem = c(0.9008,0.8545,1,1,1,1,1,0.8545,0.8545,1,1)

xtick <- c("10e2", "10e4","10e6", "10e2", "10e4","10e2", "10e4","10e6","10e2", "10e4","10e6")
ggplot(s1_error, aes(x = interaction(dose2, treatment), y = mean, fill = treatment)) +
  labs(x = "Treatment", y = "Proportion of females with bacteria (Mean ± SEM)")+
  stat_summary(fun = mean, geom = "bar", color = "black") +
  geom_errorbar(aes(x = interaction(dose2,treatment), ymin = lsem, ymax = usem), width = 0.3, size = 0.5, position=position_dodge(width=1), color ="black") +
  scale_y_continuous(limits = c(0,1), breaks=c(0, 0.25, 0.5, 0.75, 1), labels = c("0","0.25", "0.5", "0.75","1")) +
  scale_colour_manual(values = c("#fecc5c", "#a1dab4", "#41b6c4", "#225ea8"))+
  scale_fill_manual(values = c("#fecc5c", "#a1dab4", "#41b6c4", "#225ea8"))+
  scale_x_discrete(labels = xtick)+
  theme.luis()+
  theme(axis.line = element_line(colour = "black"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

