# This is code to replicate the analyses and figures from the article entitled # "Impact of sunlight exposure at two larval development stages on the residual efficacy of biolarvicides Bacillus thuringiensis israelensis and Bacillus sphaericus against the main malaria vector Anopheles gambiae s.s." by : # Barnabas Mahugnon ZOGO; Bertin N’Cho Tchiekoi; Alphonsine A. Koffi; # Amal Dahounto; Ludovic P. Ahoua Alou; Lamine Baba-Moussa; # Nicolas Moiroux; Cédric Pennetier (2018) # Code developed by Nicolas Moiroux: nicolas.moiroux@ird.fr # library(dplyr) library(tidyr) library(coxme) path <- "C:/Users/.../" # to modify according to the directory where files have been saved BTBSWAXexp1 <- read.delim(paste0(path,"BTBSWAXexp1.txt")) # Experiment 1 data (with L2 larvae) BTBSWAXexp2 <- read.delim(paste0(path,"BTBSWAXexp2.txt")) # Experiment 2 data (with L1 larvae) # data preparation BTBSWAXexp1$d_cohort <- as.numeric(substr(BTBSWAXexp1$Days_contact,2,2)) # extract a numeric value of the number of day since larvae have been released in the plot BTBSWAXexp1$Cohort <- as.factor(BTBSWAXexp1$Cohort) BTBSWAXexp1$Container<- as.factor(BTBSWAXexp1$Container) BTBSWAXexp1$N_noEm <- 0 BTBSWAXexp1$Dosage <- relevel(relevel(BTBSWAXexp1$Dosage, "1g/m2"), "Ctrl") BTBSWAXexp2$d_cohort <- as.numeric(substr(BTBSWAXexp2$Days_contact,2,2)) # extract a numeric value of the number of day since larvae have been released in the plot BTBSWAXexp2$Cohort <- as.factor(BTBSWAXexp2$Cohort) BTBSWAXexp2$Container<- as.factor(BTBSWAXexp2$Container) BTBSWAXexp2$N_noEm <- 0 BTBSWAXexp2$Dosage <- relevel(relevel(BTBSWAXexp2$Dosage, "1g/m2"), "Ctrl") f_countN_noEm <- function(subBTBSWAX){ # function that calculate the number of larvae that remain to emmerge, each day in each plot (i.e. each line) subBTBSWAX$N_noEm[1] <- subBTBSWAX$N_tested[1] - subBTBSWAX$N_adult[1] for (i in 2:nrow(subBTBSWAX)){ subBTBSWAX$N_noEm[i] <- subBTBSWAX$N_noEm[i-1] - subBTBSWAX$N_adult[i] } return(subBTBSWAX) } BTBSWAX_data_conversion <- function(BTBSWAX){ # function to convert data to be used for survival analysis for (c in levels(BTBSWAX$Container)){ # for each plot and each cohort for (coh in levels(BTBSWAX$Cohort)){ subBTBSWAX <- subset(subset(BTBSWAX, Container == c), Cohort == coh ) # create a subset subBTBSWAX <- arrange(subBTBSWAX,Days_ttmt) # order the subset subBTBSWAX <- f_countN_noEm(subBTBSWAX) # see function definition #print(subBTBSWAX) if (subBTBSWAX$N_noEm[nrow(subBTBSWAX)] < 0 ) { # test if the number N_tested is correct subBTBSWAX$N_tested <- subBTBSWAX$N_tested - subBTBSWAX$N_noEm[nrow(subBTBSWAX)] # if not correct, calculation of N_tested subBTBSWAX <- f_countN_noEm(subBTBSWAX) # re_calculation of N_noEm } g_sub <- gather(subBTBSWAX, status, count, c(N_adult,N_noEm)) # create one line per status (adult / no_em) per day g_sub_ad <- g_sub[which((g_sub$count > 0 & g_sub$status == "N_adult")),] # select line (dates) when adult have emmerged g_sub_lar <- g_sub[nrow(g_sub),] # select the line (dates) of the last day that contain the number of larvae that finally never emmerge dd <- rbind(g_sub_ad, g_sub_lar) # compiling of the selection dd <- slice(dd,rep(1:n(), dd$count)) # duplicate the line according to the number emmerged each day and number remaining (i.e. dead) at the end of experiment dd <- select(dd, -count) # remove column "count" dd <- transform(dd,emm=ifelse(status=="N_adult",1,0), status=NULL) # change name and value of col status : "emm" with possible value 1 or 0 # dd has as many rows as the number of larvae tested (i.e. one line per larvae) #print(nrow(dd)) if (c == levels(BTBSWAX$Container)[1] && coh == levels(BTBSWAX$Cohort)[1]) { # aggregate each subset in one final dataset with one line per larvae BTBSWAX2 <- dd } else { BTBSWAX2 <- rbind(BTBSWAX2, dd) } } } return(BTBSWAX2) } Surv_exp1 <- BTBSWAX_data_conversion(BTBSWAXexp1) # convert data Surv_exp2 <- BTBSWAX_data_conversion(BTBSWAXexp2) Surv_exp <- rbind(Surv_exp1,Surv_exp2) # survival (i.e. emmergence inhibition) analysis # Mixed effect models model_m1<-coxme(Surv(d_cohort,emm)~Dosage*Shelter+Days_ttmt+(1|Container), data=Surv_exp1) # exp 1 summary(model_m1) model_m2<-coxme(Surv(d_cohort,emm)~Dosage*Shelter+Days_ttmt+(1|Container), data=Surv_exp2) # exp 2 summary(model_m2) ###### figures # survival curve for shelter effect analysis (Experiment 2, L1) Surv_exp2$DosShelt <- as.factor(paste0(Surv_exp2$Dosage, Surv_exp2$Shelter)) sub1 <- subset(subset(Surv_exp2, Cohort == 1), Dosage == c("Ctrl","2g/m2")) model1=survfit(Surv(d_cohort,emm)~DosShelt, data=sub1) sub2 <- subset(subset(Surv_exp2, Cohort == 2), Dosage == c("Ctrl","2g/m2")) model2=survfit(Surv(d_cohort,emm)~DosShelt, data=sub2) sub3 <- subset(subset(Surv_exp2, Cohort == 3), Dosage == c("Ctrl","2g/m2")) model3=survfit(Surv(d_cohort,emm)~DosShelt, data=sub3) v1 <- seq Emmerg <- function(x){ # function used to plot Emergence insetad of emergence inhibition y <- 1-x return(y) } plot(model1,lty=c(2,2,1,1),ylab="Emmergence rate",col=c("black","blue","black","blue"),ylim=c(0,1),xlim=c(0,10),main="", fun = Emmerg ) axis(side = 1, at = v1) plot(model2,lty=c(2,2,1,1),ylab="Emmergence rate",col=c("black","blue","black","blue"),ylim=c(0,1),xlim=c(0,10),main="", fun = Emmerg ) axis(side = 1, at = v1) plot(model3,lty=c(2,2,1,1),ylab="Emmergence rate",col=c("black","blue","black","blue"),ylim=c(0,1),xlim=c(0,10),main="", fun = Emmerg ) axis(side = 1, at = v1) # survival curve for shelter effect analysis (Experiment 1, L2) Surv_exp1$DosShelt <- as.factor(paste0(Surv_exp1$Dosage, Surv_exp1$Shelter)) sub1 <- subset(subset(Surv_exp1, Cohort == 1), Dosage == c("Ctrl","2g/m2")) model1=survfit(Surv(d_cohort,emm)~DosShelt, data=sub1) sub2 <- subset(subset(Surv_exp1, Cohort == 2), Dosage == c("Ctrl","2g/m2")) model2=survfit(Surv(d_cohort,emm)~DosShelt, data=sub2) sub3 <- subset(subset(Surv_exp1, Cohort == 3), Dosage == c("Ctrl","2g/m2")) model3=survfit(Surv(d_cohort,emm)~DosShelt, data=sub3) summary(Surv_exp1) v1 <- seq(0,10) plot(model1,lty=c(2,2,1,1),ylab="Emmergence inhibition",col=c("black","blue","black","blue"),ylim=c(0,1),xlim=c(0,10),main="", fun = Emmerg ) axis(side = 1, at = v1) plot(model2,lty=c(2,2,1,1),ylab="Emmergence inhibition",col=c("black","blue","black","blue"),ylim=c(0,1),xlim=c(0,10),main="", fun = Emmerg ) axis(side = 1, at = v1) plot(model3,lty=c(2,2,1,1),ylab="Emmergence inhibition",col=c("black","blue","black","blue"),ylim=c(0,1),xlim=c(0,10),main="", fun = Emmerg ) axis(side = 1, at = v1)