Preparations

if(!require(tidyverse)) install.packages("tidyverse") #for data wrangling etc
## Warning: package 'tibble' was built under R version 4.0.3
if(!require(ggthemes)) install.packages("ggthemes") #add-on library for ggplot2
## Warning: package 'ggthemes' was built under R version 4.0.3
if(!require(RColorBrewer)) install.packages("RColorBrewer") #contains lots of different colour palettes
if(!require(cowplot)) install.packages("cowplot")   #for adding theme

Scenario

The persistence of Australian terrestrial and aquatic functional groups was evaluated by experts against three levels of threat intensity. This code produces the probability of persistence for each functional group. Specifically, the code:

  1. Uses a FOR loop, to produce a boxplot for each taxonomic group (e.g. amphibian), against each threat (‘Threat’);
  2. Each taxonomic group is further subdivided into functional groups (‘GName’);
  3. These are further aggregated into three different threat levels ‘Low’, ‘Medium’ and ‘High’ corresponding to ‘1’, ‘2’ and ‘3’ in the dataset (‘Level’); and
  4. The ‘Best’ estimate of ‘Persistence’ is used in each case.

The code uses a FOR loop to produce a table of the following set of descriptive statistics for each taxonomic group (‘Category’), further divided into functional groups (‘Group’), for each of three threat levels; high (‘L1’), medium (‘L2’), and low (‘L3’):

  1. Number of experts providing a score for a given functional group-threat combination (‘N’)
  2. Mean of assessed scores (‘AVG’)
  3. Lowest assessed score (‘MIN’)
  4. First quantile of assessed scores (‘Q1’)
  5. Median assessed score (‘MED’)
  6. Third quantile of assessed scores (‘Q3’)
  7. Highest assessed score (‘MAX’)

Aquatic groups

Read in the data

rm(list=ls()) #removes all data in global environment
data = read_csv('../data/Data_Table_2_Persistence_Data_Aquatic.csv', trim_ws=TRUE)
## 
## -- Column specification --------------------------------------------------------
## cols(
##   Expert_ID = col_double(),
##   Category = col_character(),
##   Group = col_character(),
##   Threat = col_character(),
##   Level = col_double(),
##   Estimate = col_character(),
##   Persistence = col_double(),
##   Confidence = col_double(),
##   Persistence_fit = col_double(),
##   Confidence_req = col_double()
## )
glimpse(data)
## Rows: 4,914
## Columns: 10
## $ Expert_ID       <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
## $ Category        <chr> "Fish", "Fish", "Fish", "Fish", "Fish", "Fish", "Fi...
## $ Group           <chr> "F01", "F01", "F01", "F02", "F02", "F02", "F03", "F...
## $ Threat          <chr> "Altered flow regime", "Altered flow regime", "Alte...
## $ Level           <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
## $ Estimate        <chr> "Upper", "Best", "Lower", "Upper", "Best", "Lower",...
## $ Persistence     <dbl> 1.0, 0.8, 0.5, 1.0, 0.8, 0.5, 1.0, 0.8, 0.5, 1.0, 0...
## $ Confidence      <dbl> 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,...
## $ Persistence_fit <dbl> 1.000, 0.800, 0.457, 1.000, 0.800, 0.457, 1.000, 0....
## $ Confidence_req  <dbl> 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,...
data$Level = ordered(data$Level, levels = c("1","2","3"))
levels(data$Level) = c("Low","Medium","High")
head(data)  #Have a look at the first six lines
summary(data$Group)
##    Length     Class      Mode 
##      4914 character character

Boxplots

#FOR LOOP FOR AQUATIC GROUPS
for(i in unique(data$Threat)) {
  data.fish = data %>%
    filter(Threat==as.character(i),Estimate=="Best",Category=="Fish")
  
  ggfig = ggplot(data.fish, aes(factor(Level),as.numeric(as.character(Persistence)))) + #
    ggtitle(paste("Fish -",i,sep=" ")) +
    geom_boxplot(lwd=0.5,fatten=1,outlier.size=1,aes(fill=factor(Level))) + #aes(fill=factor(Year)),position=position_dodge(0.8) 
    scale_fill_manual(values = c("Low"="Yellow","Medium"="Orange","High"="Red")) +
    facet_wrap(~factor(Group),ncol = 4,strip.position = "right") + #ncol = number of columns  
    scale_y_continuous("Probability of persistence",limits=c(0.0,1.05),expand = c(0, 0)) + # breaks = brks,labels=lbls,breaks=c(0,0.2,0.4,0.6,0.8,1),
    scale_x_discrete("Threat level") +
    coord_fixed(ratio=3.5) +
    theme_classic() +
    labs(fill="Threat level") +
    theme(plot.title = element_text(size=20, face="bold"),#<ELEMENT>Title
          legend.position = "top", #<ELEMENT>Legend
          legend.text = element_text(size=10),
          legend.title = element_text(size=12),
          axis.line = element_line(colour = 'black', size = 1), #<ELEMENT>Axes
          axis.ticks = element_line(colour = 'black', size = 1),
          axis.text.y = element_text(colour = 'black', size = 10), #hjust = -0.2 etc to move left
          axis.text.x = element_text(colour = 'black', size = 10, angle = 90, vjust = 0.15,hjust=1.0), #vjust = -0.2 etc to move right
          axis.title.y = element_text(colour = 'black', size = 15, margin = margin(r = 10)),
          axis.title.x = element_text(colour = 'black', size = 15, margin = margin(t = 10)),
          strip.background = element_rect(colour = "white"), #<ELEMENT>Facets
          strip.text.y = element_text(size = 10, colour = 'black',angle = 0,vjust=1.0),
          panel.spacing = unit(2,"lines"),
          strip.placement = "inside")
  
  ggsave(filename = paste("../docs/Aquatic/Fish/Fish",i,".pdf",sep=""),ggfig,width=7,height=5,dpi=300)
  
  data.birds = data %>%
    filter(Threat==as.character(i),Estimate=="Best",Category=="Waterbirds")
  
  ggfig = ggplot(data.birds, aes(factor(Level),as.numeric(as.character(Persistence)))) + #
    ggtitle(paste("Waterbirds -",i,sep=" ")) +
    geom_boxplot(lwd=0.5,fatten=1,outlier.size=1,aes(fill=factor(Level))) + #aes(fill=factor(Year)),position=position_dodge(0.8) 
    scale_fill_manual(values = c("Low"="Yellow","Medium"="Orange","High"="Red")) +
    facet_wrap(~factor(Group),ncol = 4,strip.position = "right") + #ncol = number of columns  
    scale_y_continuous("Probability of persistence",limits=c(0.0,1.05),expand = c(0, 0)) + # breaks = brks,labels=lbls,breaks=c(0,0.2,0.4,0.6,0.8,1),
    scale_x_discrete("Threat level") +
    coord_fixed(ratio=3.5) +
    theme_classic() +
    labs(fill="Threat level") +
    theme(plot.title = element_text(size=20, face="bold"),#<ELEMENT>Title
          legend.position = "top", #<ELEMENT>Legend
          legend.text = element_text(size=10),
          legend.title = element_text(size=12),
          axis.line = element_line(colour = 'black', size = 1), #<ELEMENT>Axes
          axis.ticks = element_line(colour = 'black', size = 1),
          axis.text.y = element_text(colour = 'black', size = 10), #hjust = -0.2 etc to move left
          axis.text.x = element_text(colour = 'black', size = 10, angle = 90, vjust = 0.15,hjust=1), #vjust = -0.2 etc to move right
          axis.title.y = element_text(colour = 'black', size = 15, margin = margin(r = 10)),
          axis.title.x = element_text(colour = 'black', size = 15, margin = margin(t = 10)),
          strip.background = element_rect(colour = "white"), #<ELEMENT>Facets
          strip.text.y = element_text(size = 10, colour = 'black',angle = 0,vjust=1.0),

          panel.spacing = unit(2,"lines"),
          strip.placement = "inside")
  
  ggsave(filename = paste("../docs/Aquatic/Waterbirds/Waterbirds",i,".pdf",sep=""),ggfig,width=7,height=5,dpi=300)
  
  data.turtles = data %>%
    filter(Threat==as.character(i),Estimate=="Best",Category=="Turtles")
  
  ggfig = ggplot(data.turtles, aes(factor(Level),as.numeric(as.character(Persistence)))) + #
    ggtitle(paste("Turtles -",i,sep=" ")) +
    geom_boxplot(lwd=0.5,fatten=1,outlier.size=1,aes(fill=factor(Level))) + #aes(fill=factor(Year)),position=position_dodge(0.8) 
    scale_fill_manual(values = c("Low"="Yellow","Medium"="Orange","High"="Red")) +
    facet_wrap(~factor(Group),ncol = 4,strip.position = "right") + #ncol = number of columns  
    scale_y_continuous("Probability of persistence",limits=c(0.0,1.05),expand = c(0, 0)) + # breaks = brks,labels=lbls,breaks=c(0,0.2,0.4,0.6,0.8,1),
    scale_x_discrete("Threat level") +
    coord_fixed(ratio=3.5) +
    theme_classic() +
    labs(fill="Threat level") +
    theme(plot.title = element_text(size=20, face="bold"),#<ELEMENT>Title
          legend.position = "top", #<ELEMENT>Legend
          legend.text = element_text(size=10),
          legend.title = element_text(size=12),
          axis.line = element_line(colour = 'black', size = 1), #<ELEMENT>Axes
          axis.ticks = element_line(colour = 'black', size = 1),
          axis.text.y = element_text(colour = 'black', size = 10), #hjust = -0.2 etc to move left
          axis.text.x = element_text(colour = 'black', size = 10, angle = 90, vjust = 0.15,hjust=1), #vjust = -0.2 etc to move right
          axis.title.y = element_text(colour = 'black', size = 15, margin = margin(r = 10)),
          axis.title.x = element_text(colour = 'black', size = 15, margin = margin(t = 10)),
          strip.background = element_rect(colour = "white"), #<ELEMENT>Facets
          strip.text.y = element_text(size = 10, colour = 'black',angle = 0,vjust=1.0),
          panel.spacing = unit(2,"lines"),
          strip.placement = "inside")
  
  ggsave(filename = paste("../docs/Aquatic/Turtles/Turtles",i,".pdf",sep=""),ggfig,width=7,height=5,dpi=300)
}

Terrestrial groups

Read in the data

rm(list=ls()) #removes all data in global environment
data = read_csv('../data/Data_Table_1_Persistence_Data_Terrestrial.csv', trim_ws=TRUE)
## 
## -- Column specification --------------------------------------------------------
## cols(
##   Expert_ID = col_double(),
##   Category = col_character(),
##   Group = col_character(),
##   Threat = col_character(),
##   Level = col_double(),
##   Estimate = col_character(),
##   Persistence = col_double(),
##   Confidence = col_double(),
##   Persistence_fit = col_double(),
##   Confidence_req = col_double()
## )
glimpse(data)
## Rows: 66,033
## Columns: 10
## $ Expert_ID       <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
## $ Category        <chr> "Mammals", "Mammals", "Mammals", "Mammals", "Mammal...
## $ Group           <chr> "M01", "M01", "M01", "M01", "M01", "M01", "M01", "M...
## $ Threat          <chr> "Fire", "Fire", "Fire", "Fire", "Fire", "Fire", "Fi...
## $ Level           <dbl> 1, 1, 1, 2, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2, 2, 3, 3, ...
## $ Estimate        <chr> "Upper", "Best", "Lower", "Upper", "Best", "Lower",...
## $ Persistence     <dbl> 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 1.0, 0.5, 0.0, 1.0, 1...
## $ Confidence      <dbl> 90, 90, 90, 60, 60, 60, 60, 60, 60, 90, 90, 90, 60,...
## $ Persistence_fit <dbl> 1.000, 1.000, 1.000, 1.000, 1.000, 0.333, 1.000, 0....
## $ Confidence_req  <dbl> 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,...
data$Level = ordered(data$Level, levels = c("1","2","3"))
levels(data$Level) = c("Low","Medium","High")
head(data)  #Have a look at the first six lines
summary(data$Group)
##    Length     Class      Mode 
##     66033 character character

Boxplots

#FOR LOOP FOR TERRESTRIAL GROUPS 1 (REPTILES AND VEGETATION)
for(i in unique(data$Threat)) {
  data.reptiles = data %>%
    filter(Threat==as.character(i),Estimate=="Best",Category=="Reptiles")
  
  ggfig = ggplot(data.reptiles, aes(factor(Level),as.numeric(as.character(Persistence)))) + #
    ggtitle(paste("Reptiles -",i,sep=" ")) +
    geom_boxplot(lwd=0.5,fatten=1,outlier.size=1,aes(fill=factor(Level))) + #aes(fill=factor(Year)),position=position_dodge(0.8) 
    scale_fill_manual(values = c("Low"="Yellow","Medium"="Orange","High"="Red")) +
    facet_wrap(~factor(Group),ncol = 4,strip.position = "right") + #ncol = number of columns  
    scale_y_continuous("Probability of persistence",limits=c(0.0,1.05),expand = c(0, 0)) + # breaks = brks,labels=lbls,breaks=c(0,0.2,0.4,0.6,0.8,1),
    scale_x_discrete("Threat level") +
    coord_fixed(ratio=3.5) +
    theme_classic() +
    labs(fill="Threat level") +
    theme(plot.title = element_text(size=20, face="bold"),#<ELEMENT>Title
          legend.position = "top", #<ELEMENT>Legend
          legend.text = element_text(size=10),
          legend.title = element_text(size=12),
          axis.line = element_line(colour = 'black', size = 1), #<ELEMENT>Axes
          axis.ticks = element_line(colour = 'black', size = 1),
          axis.text.y = element_text(colour = 'black', size = 10), #hjust = -0.2 etc to move left
          axis.text.x = element_text(colour = 'black', size = 10, angle = 90, vjust = 0.15,hjust=1.0), #vjust = -0.2 etc to move right
          axis.title.y = element_text(colour = 'black', size = 15, margin = margin(r = 10)),
          axis.title.x = element_text(colour = 'black', size = 15, margin = margin(t = 10)),
          strip.background = element_rect(colour = "white"), #<ELEMENT>Facets
          strip.text.y = element_text(size = 10, colour = 'black',angle = 0,vjust=1.0),
          panel.spacing = unit(2,"lines"),
          strip.placement = "inside")
  
  ggsave(filename = paste("../docs/Terrestrial/Reptiles/Reptiles",i,".pdf",sep=""),ggfig,width=7,height=10,dpi=300)
  
data.veg = data %>%
    filter(Threat==as.character(i),Estimate=="Best",Category=="Vegetation")
  
  ggfig = ggplot(data.veg, aes(factor(Level),as.numeric(as.character(Persistence)))) + #
    ggtitle(paste("Vegetation -",i,sep=" ")) +
    geom_boxplot(lwd=0.5,fatten=1,outlier.size=1,aes(fill=factor(Level))) + #aes(fill=factor(Year)),position=position_dodge(0.8) 
    scale_fill_manual(values = c("Low"="Yellow","Medium"="Orange","High"="Red")) +
    facet_wrap(~factor(Group),ncol = 4,strip.position = "right") + #ncol = number of columns
    scale_y_continuous("Probability of persistence",limits=c(0.0,1.05),expand = c(0, 0)) + # breaks = brks,labels=lbls,breaks=c(0,0.2,0.4,0.6,0.8,1),
    scale_x_discrete("Threat level") +
    coord_fixed(ratio=3.5) +
    theme_classic() +
    labs(fill="Threat level") +
    theme(plot.title = element_text(size=20, face="bold"),#<ELEMENT>Title
          legend.position = "top", #<ELEMENT>Legend
          legend.text = element_text(size=10),
          legend.title = element_text(size=12),
          axis.line = element_line(colour = 'black', size = 1), #<ELEMENT>Axes
          axis.ticks = element_line(colour = 'black', size = 1),
          axis.text.y = element_text(colour = 'black', size = 10), #hjust = -0.2 etc to move left
          axis.text.x = element_text(colour = 'black', size = 10, angle = 90, vjust = 0.15,hjust=1), #vjust = -0.2 etc to move right
          axis.title.y = element_text(colour = 'black', size = 15, margin = margin(r = 10)),
          axis.title.x = element_text(colour = 'black', size = 15, margin = margin(t = 10)),
          strip.background = element_rect(colour = "white"), #<ELEMENT>Facets
          strip.text.y = element_text(size = 10, colour = 'black',angle = 0,vjust=1.0),
          panel.spacing = unit(2,"lines"),
          strip.placement = "inside")
  
  ggsave(filename = paste("../docs/Terrestrial/Vegetation/Vegetation",i,".pdf",sep=""),ggfig,width=7,height=10,dpi=300)
 
}
#FOR LOOP FOR TERRESTRIAL GROUPS 2 (MAMMALS, AMPHIBIANS AND BIRDS)
for(i in unique(data$Threat)) {
  data.mammals = data %>%
    filter(Threat==as.character(i),Estimate=="Best",Category=="Mammals")
  
  ggfig = ggplot(data.mammals, aes(factor(Level),as.numeric(as.character(Persistence)))) + #
    ggtitle(paste("Mammals -",i,sep=" ")) +
    geom_boxplot(lwd=0.5,fatten=1,outlier.size=1,aes(fill=factor(Level))) + #aes(fill=factor(Year)),position=position_dodge(0.8) 
    scale_fill_manual(values = c("Low"="Yellow","Medium"="Orange","High"="Red")) +
    facet_wrap(~factor(Group),ncol = 4,strip.position = "right") + #ncol = number of columns  
    scale_y_continuous("Probability of persistence",limits=c(0.0,1.05),expand = c(0, 0)) + # breaks = brks,labels=lbls,breaks=c(0,0.2,0.4,0.6,0.8,1),
    scale_x_discrete("Threat level") +
    coord_fixed(ratio=3.5) +
    theme_classic() +
    labs(fill="Threat level") +
    theme(plot.title = element_text(size=20, face="bold"),#<ELEMENT>Title
          legend.position = "top", #<ELEMENT>Legend
          legend.text = element_text(size=10),
          legend.title = element_text(size=12),
          axis.line = element_line(colour = 'black', size = 1), #<ELEMENT>Axes
          axis.ticks = element_line(colour = 'black', size = 1),
          axis.text.y = element_text(colour = 'black', size = 10), #hjust = -0.2 etc to move left
          axis.text.x = element_text(colour = 'black', size = 10, angle = 90, vjust = 0.15,hjust=1.0), #vjust = -0.2 etc to move right
          axis.title.y = element_text(colour = 'black', size = 15, margin = margin(r = 10)),
          axis.title.x = element_text(colour = 'black', size = 15, margin = margin(t = 10)),
          strip.background = element_rect(colour = "white"), #<ELEMENT>Facets
          strip.text.y = element_text(size = 10, colour = 'black',angle = 0,vjust=1.0),
          panel.spacing = unit(2,"lines"),
          strip.placement = "inside")
  
  ggsave(filename = paste("../docs/Terrestrial/Mammals/Mammals",i,".pdf",sep=""),ggfig,width=7,height=10,dpi=300)
  
data.amphibians = data %>%
    filter(Threat==as.character(i),Estimate=="Best",Category=="Amphibians")
  
  ggfig = ggplot(data.amphibians, aes(factor(Level),as.numeric(as.character(Persistence)))) + #
    ggtitle(paste("Amphibians -",i,sep=" ")) +
    geom_boxplot(lwd=0.5,fatten=1,outlier.size=1,aes(fill=factor(Level))) + #aes(fill=factor(Year)),position=position_dodge(0.8) 
    scale_fill_manual(values = c("Low"="Yellow","Medium"="Orange","High"="Red")) +
    facet_wrap(~factor(Group),ncol = 4,strip.position = "right") + #ncol = number of columns
    scale_y_continuous("Probability of persistence",limits=c(0.0,1.05),expand = c(0, 0)) + # breaks = brks,labels=lbls,breaks=c(0,0.2,0.4,0.6,0.8,1),
    scale_x_discrete("Threat level") +
    coord_fixed(ratio=3.5) +
    theme_classic() +
    labs(fill="Threat level") +
    theme(plot.title = element_text(size=20, face="bold"),#<ELEMENT>Title
          legend.position = "top", #<ELEMENT>Legend
          legend.text = element_text(size=10),
          legend.title = element_text(size=12),
          axis.line = element_line(colour = 'black', size = 1), #<ELEMENT>Axes
          axis.ticks = element_line(colour = 'black', size = 1),
          axis.text.y = element_text(colour = 'black', size = 10), #hjust = -0.2 etc to move left
          axis.text.x = element_text(colour = 'black', size = 10, angle = 90, vjust = 0.15,hjust=1), #vjust = -0.2 etc to move right
          axis.title.y = element_text(colour = 'black', size = 15, margin = margin(r = 10)),
          axis.title.x = element_text(colour = 'black', size = 15, margin = margin(t = 10)),
          strip.background = element_rect(colour = "white"), #<ELEMENT>Facets
          strip.text.y = element_text(size = 10, colour = 'black',angle = 0,vjust=1.0),
          panel.spacing = unit(2,"lines"),
          strip.placement = "inside")
  
  ggsave(filename = paste("../docs/Terrestrial/Amphibians/Amphibians",i,".pdf",sep=""),ggfig,width=7,height=5,dpi=300)

data.birds = data %>%
    filter(Threat==as.character(i),Estimate=="Best",Category=="Birds")
  
  ggfig = ggplot(data.birds, aes(factor(Level),as.numeric(as.character(Persistence)))) + #
    ggtitle(paste("Birds -",i,sep=" ")) +
    geom_boxplot(lwd=0.5,fatten=1,outlier.size=1,aes(fill=factor(Level))) + #aes(fill=factor(Year)),position=position_dodge(0.8) 
    scale_fill_manual(values = c("Low"="Yellow","Medium"="Orange","High"="Red")) +
    facet_wrap(~factor(Group),ncol = 4,strip.position = "right") + #ncol = number of columns
    scale_y_continuous("Probability of persistence",limits=c(0.0,1.05),expand = c(0, 0)) + # breaks = brks,labels=lbls,breaks=c(0,0.2,0.4,0.6,0.8,1),
    scale_x_discrete("Threat level") +
    coord_fixed(ratio=3.5) +
    theme_classic() +
    labs(fill="Threat level") +
    theme(plot.title = element_text(size=20, face="bold"),#<ELEMENT>Title
          legend.position = "top", #<ELEMENT>Legend
          legend.text = element_text(size=10),
          legend.title = element_text(size=12),
          axis.line = element_line(colour = 'black', size = 1), #<ELEMENT>Axes
          axis.ticks = element_line(colour = 'black', size = 1),
          axis.text.y = element_text(colour = 'black', size = 10), #hjust = -0.2 etc to move left
          axis.text.x = element_text(colour = 'black', size = 10, angle = 90, vjust = 0.15,hjust=1), #vjust = -0.2 etc to move right
          axis.title.y = element_text(colour = 'black', size = 15, margin = margin(r = 10)),
          axis.title.x = element_text(colour = 'black', size = 15, margin = margin(t = 10)),
          strip.background = element_rect(colour = "white"), #<ELEMENT>Facets
          strip.text.y = element_text(size = 10, colour = 'black',angle = 0,vjust=1.0),
          panel.spacing = unit(2,"lines"),
          strip.placement = "inside")
  
  ggsave(filename = paste("../docs/Terrestrial/Birds/Birds",i,".pdf",sep=""),ggfig,width=7,height=10,dpi=300)  
}