#load libraries

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(tidyr)
library(ggthemes)
library(ggpubr)
library(cowplot)
## 
## Attaching package: 'cowplot'
## The following object is masked from 'package:ggpubr':
## 
##     get_legend
## The following object is masked from 'package:ggthemes':
## 
##     theme_map
library(reshape2)
## 
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
## 
##     smiths

#import validation study data

val<-read.csv("Ecuador_SecondSet_FecalSamples_DNAqPCR.csv")

#presence/absence
val_pa<-val%>%
  mutate_at(c(3:10), as.numeric)%>%
  mutate_at(c(3:10), ~ifelse(is.na(.), 0, .))%>%
  mutate_at(c(3:10), ~ifelse(. > 0, 1, .))

#replace DNQ and BDL values with na
val_conc <- val %>%
  mutate_all(funs(ifelse(. == "BDL", "NA", .)))%>%
  mutate_all(funs(ifelse(. == "DNQ", "NA", .)))%>%
  mutate_at(c(3:10), as.numeric)

#calculate sensitivity and specificity

#GenBac3
GenBac3_true_pos<-val_pa%>%
  summarize(true_pos=sum(GenBac..GC.100.g.or.mL.))
GenBac3_true_neg<-val_pa%>%
  summarize(true_neg=sum(GenBac..GC.100.g.or.mL.==0))
GenBac3_false_pos<-val_pa%>%
  summarize(false_pos=sum(GenBac..GC.100.g.or.mL.))
GenBac3_false_neg<-val_pa%>%
  summarize(false_neg = sum(GenBac..GC.100.g.or.mL. == 0))
GenBac3<-cbind(GenBac3_true_pos, GenBac3_false_pos, GenBac3_false_neg, GenBac3_true_neg)%>%
  summarize(assay="GenBac", sensitivity=true_pos/(true_pos+false_neg), specificity="na")


#HF183 feces+sewage
HF183_true_pos<-val_pa%>%
  filter(ANIMAL=="Sewage" | ANIMAL=="Human Feces")%>%
  summarize(true_pos=sum(HF183..GC.100.g.or.mL.))
HF183_true_neg<-val_pa%>%
  filter(ANIMAL!="Sewage"&ANIMAL!="Human Feces")%>%
  summarize(true_neg=sum(HF183..GC.100.g.or.mL.==0))
HF183_false_pos<-val_pa%>%
  filter(ANIMAL!="Sewage"&ANIMAL!="Human Feces")%>%
   summarize(false_pos=sum(HF183..GC.100.g.or.mL.))
HF183_false_neg<-val_pa%>%
  filter(ANIMAL=="Sewage" | ANIMAL=="Human Feces")%>%
  summarize(false_neg = sum(HF183..GC.100.g.or.mL. == 0))

HF183<-cbind(HF183_true_pos, HF183_false_pos, HF183_false_neg, HF183_true_neg)%>%
  summarize(assay="HF183", sensitivity=true_pos/(true_pos+false_neg), specificity=true_neg/(true_neg+false_pos))

#HF183 sewage
HF183_sewage_true_pos<-val_pa%>%
  filter(ANIMAL=="Sewage")%>%
  summarize(true_pos=sum(HF183..GC.100.g.or.mL.))
HF183_sewage_true_neg<-val_pa%>%
  filter(ANIMAL!="Sewage")%>%
  summarize(true_neg=sum(HF183..GC.100.g.or.mL.==0))
HF183_sewage_false_pos<-val_pa%>%
  filter(ANIMAL!="Sewage")%>%
   summarize(false_pos=sum(HF183..GC.100.g.or.mL.))
HF183_sewage_false_neg<-val_pa%>%
  filter(ANIMAL=="Sewage")%>%
  summarize(false_neg = sum(HF183..GC.100.g.or.mL. == 0))

HF183_sewage<-cbind(HF183_sewage_true_pos, HF183_sewage_false_pos, HF183_sewage_false_neg, HF183_sewage_true_neg)%>%
  summarize(assay="HF183_sewage", sensitivity=true_pos/(true_pos+false_neg), specificity=true_neg/(true_neg+false_pos))

#HF183 feces
HF183_feces_true_pos<-val_pa%>%
  filter(ANIMAL=="Human Feces")%>%
  summarize(true_pos=sum(HF183..GC.100.g.or.mL.))
HF183_feces_true_neg<-val_pa%>%
  filter(ANIMAL!="Human Feces")%>%
  summarize(true_neg=sum(HF183..GC.100.g.or.mL.==0))
HF183_feces_false_pos<-val_pa%>%
  filter(ANIMAL!="Human Feces")%>%
   summarize(false_pos=sum(HF183..GC.100.g.or.mL.))
HF183_feces_false_neg<-val_pa%>%
  filter(ANIMAL=="Human Feces")%>%
  summarize(false_neg = sum(HF183..GC.100.g.or.mL. == 0))

HF183_feces<-cbind(HF183_feces_true_pos, HF183_feces_false_pos, HF183_feces_false_neg, HF183_feces_true_neg)%>%
  summarize(assay="HF183 feces", sensitivity=true_pos/(true_pos+false_neg), specificity=true_neg/(true_neg+false_pos))

#HumM2 feces+sewage
HumM2_true_pos<-val_pa%>%
  filter(ANIMAL=="Sewage" | ANIMAL=="Human Feces")%>%
  summarize(true_pos=sum(HumM2..GC.100.g.or.mL.))
HumM2_true_neg<-val_pa%>%
  filter(ANIMAL!="Sewage"&ANIMAL!="Human Feces")%>%
  summarize(true_neg=sum(HumM2..GC.100.g.or.mL.==0))
HumM2_false_pos<-val_pa%>%
  filter(ANIMAL!="Sewage"&ANIMAL!="Human Feces")%>%
   summarize(false_pos=sum(HumM2..GC.100.g.or.mL.))
HumM2_false_neg<-val_pa%>%
  filter(ANIMAL=="Sewage" | ANIMAL=="Human Feces")%>%
  summarize(false_neg = sum(HumM2..GC.100.g.or.mL. == 0))

HumM2<-cbind(HumM2_true_pos, HumM2_false_pos, HumM2_false_neg, HumM2_true_neg)%>%
  summarize(assay="HumM2", sensitivity=true_pos/(true_pos+false_neg), specificity=true_neg/(true_neg+false_pos))

#HumM2 sewage
HumM2_sewage_true_pos<-val_pa%>%
  filter(ANIMAL=="Sewage")%>%
  summarize(true_pos=sum(HumM2..GC.100.g.or.mL.))
HumM2_sewage_true_neg<-val_pa%>%
  filter(ANIMAL!="Sewage")%>%
  summarize(true_neg=sum(HumM2..GC.100.g.or.mL.==0))
HumM2_sewage_false_pos<-val_pa%>%
  filter(ANIMAL!="Sewage")%>%
   summarize(false_pos=sum(HumM2..GC.100.g.or.mL.))
HumM2_sewage_false_neg<-val_pa%>%
  filter(ANIMAL=="Sewage")%>%
  summarize(false_neg = sum(HumM2..GC.100.g.or.mL. == 0))

HumM2_sewage<-cbind(HumM2_sewage_true_pos, HumM2_sewage_false_pos, HumM2_sewage_false_neg, HumM2_sewage_true_neg)%>%
  summarize(assay="HumM2_sewage", sensitivity=true_pos/(true_pos+false_neg), specificity=true_neg/(true_neg+false_pos))

#HumM2 feces
HumM2_feces_true_pos<-val_pa%>%
  filter(ANIMAL=="Human Feces")%>%
  summarize(true_pos=sum(HumM2..GC.100.g.or.mL.))
HumM2_feces_true_neg<-val_pa%>%
  filter(ANIMAL!="Human Feces")%>%
  summarize(true_neg=sum(HumM2..GC.100.g.or.mL.==0))
HumM2_feces_false_pos<-val_pa%>%
  filter(ANIMAL!="Human Feces")%>%
   summarize(false_pos=sum(HumM2..GC.100.g.or.mL.))
HumM2_feces_false_neg<-val_pa%>%
  filter(ANIMAL=="Human Feces")%>%
  summarize(false_neg = sum(HumM2..GC.100.g.or.mL. == 0))

HumM2_feces<-cbind(HumM2_feces_true_pos, HumM2_feces_false_pos, HumM2_feces_false_neg, HumM2_feces_true_neg)%>%
  summarize(assay="HumM2 feces", sensitivity=true_pos/(true_pos+false_neg), specificity=true_neg/(true_neg+false_pos))

#DG37 
DG37_true_pos<-val_pa%>%
  filter(ANIMAL=="Dog")%>%
  summarize(true_pos=sum(DG37..GC.100.g.or.mL.))
DG37_true_neg<-val_pa%>%
  filter(ANIMAL!="Dog")%>%
  summarize(true_neg=sum(DG37..GC.100.g.or.mL.==0))
DG37_false_pos<-val_pa%>%
  filter(ANIMAL!="Dog")%>%
   summarize(false_pos=sum(DG37..GC.100.g.or.mL.))
DG37_false_neg<-val_pa%>%
  filter(ANIMAL=="Dog")%>%
  summarize(false_neg = sum(DG37..GC.100.g.or.mL. == 0))

DG37<-cbind(DG37_true_pos, DG37_false_pos, DG37_false_neg, DG37_true_neg)%>%
  summarize(assay="DG37", sensitivity=true_pos/(true_pos+false_neg), specificity=true_neg/(true_neg+false_pos))

#Rum2Bac 
Rum2Bac_true_pos<-val_pa%>%
  filter(ANIMAL=="Cow")%>%
  summarize(true_pos=sum(Rum2Bac..GC.100.g.or.mL.))
Rum2Bac_true_neg<-val_pa%>%
  filter(ANIMAL!="Cow")%>%
  summarize(true_neg=sum(Rum2Bac..GC.100.g.or.mL.==0))
Rum2Bac_false_pos<-val_pa%>%
  filter(ANIMAL!="Cow")%>%
   summarize(false_pos=sum(Rum2Bac..GC.100.g.or.mL.))
Rum2Bac_false_neg<-val_pa%>%
  filter(ANIMAL=="Cow")%>%
  summarize(false_neg = sum(Rum2Bac..GC.100.g.or.mL. == 0))

Rum2Bac<-cbind(Rum2Bac_true_pos, Rum2Bac_false_pos, Rum2Bac_false_neg, Rum2Bac_true_neg)%>%
  summarize(assay="Rum2Bac", sensitivity=true_pos/(true_pos+false_neg), specificity=true_neg/(true_neg+false_pos))

#Pig2Bac
Pig2Bac_true_pos<-val_pa%>%
  filter(ANIMAL=="Pig")%>%
  summarize(true_pos=sum(Pig.2.Bac..GC.100.g.or.mL.))
Pig2Bac_true_neg<-val_pa%>%
  filter(ANIMAL!="Pig")%>%
  summarize(true_neg=sum(Pig.2.Bac..GC.100.g.or.mL.==0))
Pig2Bac_false_pos<-val_pa%>%
  filter(ANIMAL!="Pig")%>%
   summarize(false_pos=sum(Pig.2.Bac..GC.100.g.or.mL.))
Pig2Bac_false_neg<-val_pa%>%
  filter(ANIMAL=="Pig")%>%
  summarize(false_neg = sum(Pig.2.Bac..GC.100.g.or.mL. == 0))

Pig2Bac<-cbind(Pig2Bac_true_pos, Pig2Bac_false_pos, Pig2Bac_false_neg, Pig2Bac_true_neg)%>%
  summarize(assay="Pig2Bac", sensitivity=true_pos/(true_pos+false_neg), specificity=true_neg/(true_neg+false_pos))

#AV4143
AV4143_true_pos<-val_pa%>%
  filter(ANIMAL=="Chicken" | ANIMAL=="Duck" | ANIMAL=="Parrot")%>%
  summarize(true_pos=sum(AV4143..GC.100.g.or.mL.))
AV4143_true_neg<-val_pa%>%
  filter(ANIMAL!="Chicken" & ANIMAL!="Duck" & ANIMAL!="Parrot")%>%
  summarize(true_neg=sum(AV4143..GC.100.g.or.mL.==0))
AV4143_false_pos<-val_pa%>%
  filter(ANIMAL!="Chicken" & ANIMAL!="Duck" & ANIMAL!="Parrot")%>%
  summarize(false_pos=sum(AV4143..GC.100.g.or.mL.))
AV4143_false_neg<-val_pa%>%
  filter(ANIMAL=="Chicken" | ANIMAL=="Duck" | ANIMAL=="Parrot")%>%
  summarize(false_neg = sum(AV4143..GC.100.g.or.mL. == 0))

AV4143<-cbind(AV4143_true_pos, AV4143_false_pos, AV4143_false_neg, AV4143_true_neg)%>%
  summarize(assay="AV4143", sensitivity=true_pos/(true_pos+false_neg), specificity=true_neg/(true_neg+false_pos))

#GFD
GFD_true_pos<-val_pa%>%
  filter(ANIMAL=="Chicken" | ANIMAL=="Duck" | ANIMAL=="Parrot")%>%
  summarize(true_pos=sum(GFD..GC.100.g.or.mL.))
GFD_true_neg<-val_pa%>%
  filter(ANIMAL!="Chicken" & ANIMAL!="Duck" & ANIMAL!="Parrot")%>%
  summarize(true_neg=sum(GFD..GC.100.g.or.mL.==0))
GFD_false_pos<-val_pa%>%
  filter(ANIMAL!="Chicken" & ANIMAL!="Duck" & ANIMAL!="Parrot")%>%
  summarize(false_pos=sum(GFD..GC.100.g.or.mL.))
GFD_false_neg<-val_pa%>%
  filter(ANIMAL=="Chicken" | ANIMAL=="Duck" | ANIMAL=="Parrot")%>%
  summarize(false_neg = sum(GFD..GC.100.g.or.mL. == 0))

GFD<-cbind(GFD_true_pos, GFD_false_pos, GFD_false_neg, GFD_true_neg)%>%
  summarize(assay="GFD", sensitivity=true_pos/(true_pos+false_neg), specificity=true_neg/(true_neg+false_pos))

sens_spec<-rbind(GenBac3, HF183, HumM2, DG37, AV4143, GFD, Rum2Bac, Pig2Bac)%>%
  mutate_at(c(2:3), as.numeric)%>%
  mutate_if(is.numeric, ~ round(., 2))%>%
  mutate_if(is.numeric, function(x) x * 100)%>%
  rename(Sensitivity=sensitivity,
         Specificity=specificity)

#plot
sens_spec_melt<-sens_spec%>%
  melt(id.var="assay")
sens_spec_melt$assay <- factor(sens_spec_melt$assay, levels= (c("GenBac", "HF183", "HumM2", "DG37", "AV4143", "GFD", "Pig2Bac", "Rum2Bac")))

sens_spec_plot<-sens_spec_melt%>%
  ggplot(aes(x=assay, y=value))+
  geom_point(aes(fill=variable), color="black", pch=21, size =3)+
  labs(x="", y="% Sensitivity or Specificity")+
  theme_classic()+
  scale_x_discrete(labels=c("GenBac"="GenBac3 (general)", "HF183"="HF183 (human)", "HumM2"="HumM2 (human)", "DG37"="DG37 (dog)", "AV4143"="AV4143 (bird)", "GFD"="GFD (bird)", "Pig2Bac"="Pig2Bac (pig)", "Rum2Bac"="Rum2Bac (ruminant)"))+
  scale_fill_manual(values=c("Sensitivity"="#FF9DA7", "Specificity"="#59A14F"))+ 
  scale_y_continuous(expand=c(0,0), limits=c(0, 103))+
  theme(legend.title = element_blank(), axis.text.x = element_text(angle = 45, vjust = 1, hjust=1), legend.position="bottom")
sens_spec_plot

#mean conc and stdev

#log10 transform concentration data
val_log<-val_conc%>%
  mutate_if(is.numeric, funs(log10(. + 1)))%>%
  rename(GenBac3=GenBac..GC.100.g.or.mL.,
         HF183=HF183..GC.100.g.or.mL.,
         HumM2=HumM2..GC.100.g.or.mL.,
         DG37=DG37..GC.100.g.or.mL.,
         GFD=GFD..GC.100.g.or.mL.,
         AV4143=AV4143..GC.100.g.or.mL.,
         Pig2Bac=Pig.2.Bac..GC.100.g.or.mL.,
         Rum2Bac=Rum2Bac..GC.100.g.or.mL.)%>%
  melt(id.vars=c("ANIMAL", "CODE"), variable.name=("measurement"), value.name="value")


#GenBac
GenBac_mean<-val_log%>%
  subset(measurement=="GenBac3")%>%
  summarize(mean_target=mean(value), mean_target_stdev=sd(value), mean_nontarget='NA',mean_nontarget_stdev='NA', assay='GenBac3')
  
#HF183 sewage
HF183_mean_target_sewage<-val_log%>%
  filter(ANIMAL=="Sewage")%>%
  filter(measurement=="HF183")%>%
  na.omit()%>%
  summarize(mean_target=mean(value), mean_target_stdev=sd(value))
HF183_mean_nontarget_sewage<-val_log%>%
  filter(ANIMAL!="Sewage" | ANIMAL!='Feces')%>%
  filter(measurement=="HF183")%>%
  na.omit()%>%
  summarize(mean_nontarget=mean(value), mean_nontarget_stdev=sd(value))
HF183_mean_sewage<-cbind(HF183_mean_target_sewage, HF183_mean_nontarget_sewage)
HF183_mean_sewage$assay<-c("HF183_sewage")

#HF183 feces
HF183_mean_target_feces<-val_log%>%
  filter(ANIMAL=="Human Feces")%>%
  filter(measurement=="HF183")%>%
  na.omit()%>%
  summarize(mean_target=mean(value), mean_target_stdev=sd(value))
HF183_mean_nontarget_feces<-val_log%>%
  filter(ANIMAL!="Sewage" | ANIMAL!='Feces')%>%
  filter(measurement=="HF183")%>%
  na.omit()%>%
  summarize(mean_nontarget=mean(value), mean_nontarget_stdev=sd(value))
HF183_mean_feces<-cbind(HF183_mean_target_feces, HF183_mean_nontarget_feces)
HF183_mean_feces$assay<-c("HF183_feces")

#HumM2 sewage
HumM2_mean_target_sewage<-val_log%>%
  filter(ANIMAL=="Sewage")%>%
  filter(measurement=="HumM2")%>%
  na.omit()%>%
  summarize(mean_target=mean(value), mean_target_stdev=sd(value))
HumM2_mean_nontarget_sewage<-val_log%>%
  filter(ANIMAL!="Sewage" | ANIMAL!='Feces')%>%
  filter(measurement=="HumM2")%>%
  na.omit()%>%
  summarize(mean_nontarget=mean(value), mean_nontarget_stdev=sd(value))
HumM2_mean_sewage<-cbind(HumM2_mean_target_sewage, HumM2_mean_nontarget_sewage)
HumM2_mean_sewage$assay<-c("HumM2_sewage")

#HumM2 feces
HumM2_mean_target_feces<-val_log%>%
  filter(ANIMAL=="Human Feces")%>%
  filter(measurement=="HumM2")%>%
  na.omit()%>%
  summarize(mean_target=mean(value), mean_target_stdev=sd(value))
HumM2_mean_nontarget_feces<-val_log%>%
  filter(ANIMAL!="Sewage" | ANIMAL!='Feces')%>%
  filter(measurement=="HumM2")%>%
  na.omit()%>%
  summarize(mean_nontarget=mean(value), mean_nontarget_stdev=sd(value))
HumM2_mean_feces<-cbind(HumM2_mean_target_feces, HumM2_mean_nontarget_feces)
HumM2_mean_feces$assay<-c("HumM2_feces")

#DG37
DG37_mean_target<-val_log%>%
  filter(ANIMAL=="Dog")%>%
  filter(measurement=="DG37")%>%
  na.omit()%>%
  summarize(mean_target=mean(value), mean_target_stdev=sd(value))
DG37_mean_nontarget<-val_log%>%
  filter(ANIMAL!="Dog")%>%
  filter(measurement=="DG37")%>%
  na.omit()%>%
  summarize(mean_nontarget=mean(value), mean_nontarget_stdev=sd(value))
DG37_mean<-cbind(DG37_mean_target, DG37_mean_nontarget)
DG37_mean$assay<-c("DG37")

#AV4143
AV4143_mean_target<-val_log%>%
  filter(ANIMAL=="Chicken" | ANIMAL=="Duck" | ANIMAL=="Parrot")%>%
  filter(measurement=="AV4143")%>%
  na.omit()%>%
  summarize(mean_target=mean(value), mean_target_stdev=sd(value))
AV4143_mean_nontarget<-val_log%>%
  filter(ANIMAL!="Chicken" & ANIMAL!="Duck" & ANIMAL!="Parrot")%>%
  filter(measurement=="AV4143")%>%
  na.omit()%>%
  summarize(mean_nontarget=mean(value), mean_nontarget_stdev=sd(value))
AV4143_mean<-cbind(AV4143_mean_target, AV4143_mean_nontarget)
AV4143_mean$assay<-c("AV4143")

#GFD
GFD_mean_target<-val_log%>%
  filter(ANIMAL=="Chicken" | ANIMAL=="Duck" | ANIMAL=="Parrot")%>%
  filter(measurement=="GFD")%>%
  na.omit()%>%
  summarize(mean_target=mean(value), mean_target_stdev=sd(value))
GFD_mean_nontarget<-val_log%>%
  filter(ANIMAL!="Chicken" & ANIMAL!="Duck" & ANIMAL!="Parrot")%>%
  filter(measurement=="GFD")%>%
  na.omit()%>%
  summarize(mean_nontarget=mean(value), mean_nontarget_stdev=sd(value))
GFD_mean<-cbind(GFD_mean_target, GFD_mean_nontarget)
GFD_mean$assay<-c("GFD")

#Pig2Bac
Pig2Bac_mean_target<-val_log%>%
  filter(ANIMAL=="Pig")%>%
  filter(measurement=="Pig2Bac")%>%
  na.omit()%>%
  summarize(mean_target=mean(value), mean_target_stdev=sd(value))
Pig2Bac_mean_nontarget<-val_log%>%
  filter(ANIMAL!="Pig")%>%
  filter(measurement=="Pig2Bac")%>%
  na.omit()%>%
  summarize(mean_nontarget=mean(value), mean_nontarget_stdev=sd(value))
Pig2Bac_mean<-cbind(Pig2Bac_mean_target, Pig2Bac_mean_nontarget)
Pig2Bac_mean$assay<-c("Pig2Bac")

#Rum2Bac
Rum2Bac_mean_target<-val_log%>%
  filter(ANIMAL=="Cow")%>%
  filter(measurement=="Rum2Bac")%>%
  na.omit()%>%
  summarize(mean_target=mean(value), mean_target_stdev=sd(value))
Rum2Bac_mean_nontarget<-val_log%>%
  filter(ANIMAL!="Cow")%>%
  filter(measurement=="Rum2Bac")%>%
  na.omit()%>%
  summarize(mean_nontarget=mean(value), mean_nontarget_stdev=sd(value))
Rum2Bac_mean<-cbind(Rum2Bac_mean_target, Rum2Bac_mean_nontarget)
Rum2Bac_mean$assay<-c("Rum2Bac")

mean_conc<-rbind(GenBac_mean, HF183_mean_feces, HF183_mean_sewage, HumM2_mean_feces, HumM2_mean_sewage, DG37_mean, AV4143_mean, GFD_mean, Pig2Bac_mean, Rum2Bac_mean)%>%
  mutate_at(c(1:4), as.numeric)%>%
  mutate_if(is.numeric, ~ round(., 2))%>%
  relocate(assay)
  
#plot
mean_conc_melt<-mean_conc%>%
  rename("Mean target"="mean_target",
         "Mean non-target"="mean_nontarget")%>%
  melt(id.vars=c("assay", "mean_target_stdev", "mean_nontarget_stdev"))%>%
  melt(id.vars=c("assay", "variable", "value"), value.name=c("stdev_value"), variable.name=c("stdev"))%>%
   filter((variable == "Mean target" & stdev == "mean_target_stdev") |
         (variable == "Mean non-target" & stdev == "mean_nontarget_stdev"))
  
mean_conc_melt$assay <- factor(mean_conc_melt$assay, levels= (c("GenBac3", "HF183_feces","HF183_sewage", "HumM2_feces", "HumM2_sewage", "DG37", "AV4143", "GFD", "Pig2Bac", "Rum2Bac")))


mean_conc_plot <- mean_conc_melt %>%
  ggplot() +
  geom_errorbar(data = mean_conc_melt, aes(x = assay, ymin = value - stdev_value, ymax = value + stdev_value, group = interaction(assay, variable)), 
                position = position_dodge(width = 0.2), width = 0.2) +
  geom_point(aes(x = assay, y = value, fill = variable, group = interaction(assay, variable)), 
             color = "black", pch = 21, size = 3, position = position_dodge(width = 0.2)) +
  labs(x = "", y = expression(log[10]*" gene copies / 100 g feces or 100 mL sewage")) +
  theme_classic() +
  scale_fill_manual(values = c("#4E79A7", "#f2e380")) +
  scale_x_discrete(labels = c("GenBac3" = "GenBac3 (general)", "HF183_feces" = "HF183 (human feces)", "HF183_sewage" = "HF183 (human sewage)", "HumM2_feces" = "HumM2 (human feces)", "HumM2_sewage" = "HumM2 (human sewage)", "DG37" = "DG37 (dog)", "AV4143" = "AV4143 (bird)", "GFD" = "GFD (bird)", "Pig2Bac" = "Pig2Bac (pig)", "Rum2Bac" = "Rum2Bac (ruminant)")) +
  scale_y_continuous(expand = c(0, 0), limits = c(0, 13)) +
  theme(legend.title = element_blank(), axis.title.y=element_text(size=8),axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1), legend.position = "bottom")

mean_conc_plot

#percent detection and concentration plots

#marker detections by target
val_sums <- val_pa %>%
  group_by(ANIMAL) %>%            
  summarize("total_animals" = sum(ANIMAL == ANIMAL), "GenBac3"=sum(GenBac..GC.100.g.or.mL.),"HF183"= sum(HF183..GC.100.g.or.mL.), "HumM2"=sum(HumM2..GC.100.g.or.mL.), "DG37"= sum(DG37..GC.100.g.or.mL.), "AV4143"=sum(AV4143..GC.100.g.or.mL.), "GFD"=sum(GFD..GC.100.g.or.mL.), "Pig2Bac"=sum(Pig.2.Bac..GC.100.g.or.mL.), "Rum2Bac"=sum(Rum2Bac..GC.100.g.or.mL.))

#percent detection
val_perc<-val_sums%>%
  mutate_at(vars(c(3:10)), list(~ . / total_animals*100))%>%
  mutate_if(is.numeric, ~ round(., 2))%>%
  select(-c(total_animals))%>%
  melt(id.vars=c("ANIMAL"), variable.name=("measurement"), value.name="value")

val_perc$ANIMAL <- factor(val_perc$ANIMAL, levels = c("Sewage", "Human Feces", "Cow", "Pig", "Horse", "Chicken", "Duck", "Parrot", "Cat", "Dog"))
val_perc$measurement <- factor(val_perc$measurement, levels= (c("GenBac3", "HF183", "HumM2", "DG37", "AV4143", "GFD", "Pig2Bac", "Rum2Bac")))

labels<-list("GenBac3"="GenBac3 (general)", "HF183"="HF183 (human)", "HumM2"="HumM2 (human)", "DG37"="DG37 (dog)", "AV4143"="Av4143 (bird)", "GFD"="GFD (bird)", "Pig2Bac"="Pig2Bac (pig)", "Rum2Bac"="Rum2Bac (ruminant)")
labeller <- function(variable,value){
  return(labels[value])}

cols <- c("GenBac3"="#FF9DA7", "HF183"="#59A14F", "DG37"="#76B7B4", "GFD"="#E15759", "Pig2Bac"="#F28E2B", "Rum2Bac"="#4E79A7", "AV4143"="#b59bcc", "HumM2"="#f2e380")

perc_detect<-ggplot(val_perc, aes(x=ANIMAL, y=value, fill=measurement))+
  geom_bar(stat="identity")+
  labs(x="Target", y="% Detection")+
  theme_classic()+
  scale_fill_manual(values=cols)+
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1), legend.position="none")+
  scale_y_continuous(expand = c(0, 0), limits = c(0, NA))+
  facet_wrap(measurement ~ ., labeller=labeller, ncol=2)+
  ggtitle("Marker percent detection")
perc_detect

#melt concentration data
conc_melt<-val_conc%>%
  rename(GenBac3=GenBac..GC.100.g.or.mL.,
         HF183=HF183..GC.100.g.or.mL.,
         HumM2=HumM2..GC.100.g.or.mL.,
         DG37=DG37..GC.100.g.or.mL.,
         GFD=GFD..GC.100.g.or.mL.,
         AV4143=AV4143..GC.100.g.or.mL.,
         Pig2Bac=Pig.2.Bac..GC.100.g.or.mL.,
         Rum2Bac=Rum2Bac..GC.100.g.or.mL.)%>%
  melt(id.vars=c("ANIMAL", "CODE"), variable.name=("measurement"), value.name="value")

conc_melt$ANIMAL <- factor(conc_melt$ANIMAL, levels = c("Sewage", "Human Feces", "Cow", "Pig", "Horse", "Chicken", "Duck", "Parrot", "Cat", "Dog"))
conc_melt$measurement <- factor(conc_melt$measurement, levels= (c("GenBac3", "HF183", "HumM2", "DG37", "AV4143", "GFD", "Pig2Bac", "Rum2Bac")))

labels<-list("GenBac3"="GenBac3 (general)", "HF183"="HF183 (human)", "HumM2"="HumM2 (human)", "DG37"="DG37 (dog)", "AV4143"="Av4143 (bird)", "GFD"="GFD (bird)", "Pig2Bac"="Pig2Bac (pig)","Rum2Bac"="Rum2Bac (ruminant)")
labeller <- function(variable,value){
  return(labels[value])}

cols <- c("GenBac3"="#FF9DA7", "HF183"="#59A14F", "DG37"="#76B7B4",  "Pig2Bac"="#F28E2B", "Rum2Bac"="#4E79A7", "GFD"="#E15759","AV4143"="#b59bcc", "HumM2"="#f2e380")

conc_detect<-ggplot(conc_melt, aes(x=ANIMAL, y=value, fill=measurement))+
  geom_boxplot()+
  labs(
  x = "Target",
  y = expression(Log[10]*" gene copies per 100 g feces or 100 mL sewage")
  )+
  theme_classic()+
  scale_fill_manual(values=cols)+
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1), legend.position="none")+
  scale_y_continuous(expand = c(0, 0), limits = c(0, NA))+
  facet_wrap(measurement ~ ., labeller=labeller, ncol=2)+
  scale_y_log10()+
  ggtitle("Marker concentration")
## Scale for y is already present.
## Adding another scale for y, which will replace the existing scale.
conc_detect

#multiplots

marker_summ<-plot_grid(sens_spec_plot, mean_conc_plot, labels=c("A", "B", align="h"))
marker_summ

marker_performance<-plot_grid(perc_detect, conc_detect, labels=c("A", "B"), align="h")
marker_performance