# Supplementary Information - Online Resource 7
# The script used to create Fig. 3, a visualization of the LMMs 

# Visitation rate, but not foraging range, responds to brood size 
# manipulation in an aerial insectivore 

# Sage A. Madden, Molly T. McDermott, Rebecca J. Safran

# Journal: Behavioral Ecology and Sociobiology

# Affiliations:
# SAM, MTM, RJS: Department of Ecology and Evolutionary Biology, 
# University of Colorado Boulder, Boulder, CO, USA

# SAM: Department of Evolution and Ecology, 
# University of California Davis, Davis, CA, USA


# To whom correspondence should be addressed: Sage A. Madden, University of California Davis, Department of Evolution and Ecology, One Shields Avenue, 2320 Storer Hall, Davis, CA 95616 
# Email: saamadden@ucdavis.edu	
# Phone: 1+(720)-879-4053


###### Barn swallow BSM paper visualizations
###### Created: Fall 2020
###### Last modified: July 24, 2022

# This script contains all of the code necessary to generate the visualization
# of linear mixed models examining effects of brood size and handicapping on
# barn swallow parental care and foraging behavior found in the paper
# named above (figure 3). 

# Load libraries
library(dplyr)
library(lme4)
library(ggplot2)
library(ggpubr)

# Read in the data
# Adult data
mcu <- read.csv("ESM_3.csv")
# Nestling data
nestling <- read.csv("ESM_4.csv")

# Rename mapleton -- folsom and mapleton are very close together and 
# considered a single site 
mcu$site[mcu$site == "Mapleton"] <- "Folsom"
nestling$site[nestling$site == "Mapleton"] <- "Folsom"

# Create treatment column
for(i in 1:length(mcu$band)){
  if(mcu$chick_age[i] == 7 | mcu$chick_age[i] == 8){
    mcu$treatment[i] <- "PM"
  } 
  else{
    mcu$treatment[i] <- mcu$bsm[i]
  }
}

mcu$treatment <- factor(mcu$treatment, levels = c("PM", "E", "R"))

# Make sure some variables are factors
mcu$bsm <- as.factor(mcu$bsm)
mcu$treatment <- as.factor(mcu$treatment)
mcu$tag <- as.factor(mcu$tag)
mcu$year <- as.factor(mcu$year)
mcu$fband <- as.factor(mcu$band)
mcu$fsite <- as.factor(mcu$site)
nestling$bsm <- as.factor(nestling$bsm)
nestling$fsite <- as.factor(nestling$site)
nestling$tag <- as.factor(nestling$tag)
nestling$year <- as.factor(nestling$year)

# Remove nests with 1N transferred 
filter(nestling, X2nTransferred == "N")
nestling <- filter(nestling, X2nTransferred == "Y")
mcu <- filter(mcu, band != "2640-97571" & band != "2640-97374")

# Remove Hoops 16 -- gps tag was placed on a male, so drop this
mcu <- filter(mcu, band != "2850-57510")
nestling <- filter(nestling, band != "2850-57510")

# Create subsets of the data for use in certain models and plots
mcugps <- filter(mcu, chick_age == 7 | chick_age == 9)
mcuobs <- filter(mcu, is.na(num_vis_f) == FALSE)

# Remove an outlier where birds could not be sexed reliably during observations
noMB54 <- dplyr::filter(mcuobs, band != "2640-97596")

# Create models for all plots
vis_lmer_temp_ni <- lmer(num_vis_f ~ treatment + year + tag + avg_temp_obs +
                           (1|fband) + (1|fsite), data = noMB54)

mvis_lmer_temp_ni <- lmer(num_vis_m ~ treatment + year + tag + avg_temp_obs +
                            (1|fband) + (1|fsite), data = noMB54)

noM4 <- mcugps[-19,]
for_lmer_noweath_no <- lmer(log(foraging_area100) ~ treatment + year 
                            + (1|fband) + (1|fsite), data = noM4)

nestlingF <- filter(nestling, all_survived == "Y" & band != "2850-57510")
nestlingF <- filter(nestlingF, X2nTransferred == "Y")
pn_growth_lmer_noweath_ni <- lmer(mass8to12_pn ~ bsm + tag + year +(1|fsite),
                                  data = nestlingF)


# Relevel treatment for visualization
noMB54$treatment <- factor(noMB54$treatment, levels = c("R", "PM", "E"))
noMB54$tag <- factor(noMB54$tag, levels = c("Y", "N"))

########################### Female visitation rate ###########################
# Extract fixed effects
fixefmod <- fixef(vis_lmer_temp_ni)
str(fixefmod)
fixefmod

# Mean temp
mean_temp <- mean(noMB54$avg_temp_obs)

# Year effect: mean of the two
mean_year <- fixefmod[4]/2

# Non-tagged birds
# Control
meanC_NT <- fixefmod[1] + mean_year +  (fixefmod[6] * mean_temp)
# Enlarged
meanE_NT <- fixefmod[1] + fixefmod[2] + mean_year + (fixefmod[6] * mean_temp)
# Reduced
meanR_NT <- fixefmod[1] + fixefmod[3] + mean_year + (fixefmod[6] * mean_temp)

# Tagged birds
# Control
meanC_T <- fixefmod[1] + mean_year + (fixefmod[6] * mean_temp) + fixefmod[5]
# Enlarged
meanE_T <- fixefmod[1] + fixefmod[2] + mean_year + (fixefmod[6] * mean_temp) + fixefmod[5]
# Reduced
meanR_T <- fixefmod[1] + fixefmod[3] + mean_year + (fixefmod[6] * mean_temp) + fixefmod[5]

# Get into the format I want for plotting
mod_grpmeans <- rbind(meanC_NT, meanE_NT, meanR_NT, meanC_T, meanE_T, meanR_T)
mod_grpmeans <- data.frame(mod_grpmeans)
str(mod_grpmeans)
mod_grpmeans$bsm <- c("PM", "E", "R", "PM", "E", "R")
mod_grpmeans$tag <- c("N", "N", "N", "Y", "Y", "Y")
colnames(mod_grpmeans) <- c("mean", "treatment", "tag")
str(mod_grpmeans)
mod_grpmeans$treatment <- as.factor(mod_grpmeans$treatment)
mod_grpmeans$tag <- as.factor(mod_grpmeans$tag)
mod_grpmeans$treatment <- factor(mod_grpmeans$treatment, levels = c("R", "PM", "E"))
mod_grpmeans$tag <- factor(mod_grpmeans$tag, levels = c("Y", "N"))
str(mod_grpmeans)

# Create model visualization
fvisplot <- ggplot(data = noMB54, aes(x = treatment, y = num_vis_f, col = tag)) +
  geom_jitter(position = position_jitter(width = 0.05), 
              size = 2) +
  geom_point(data = mod_grpmeans, aes(x = treatment, y = mean, group = tag,
                                      color = tag), size = 4) +
  geom_line(data = mod_grpmeans, aes(x = treatment, y =mean, group = tag, 
                                     color = tag), size = 1.5) +
  labs(x = "BSM treatment", y = "Female visitation rate (vis/hr)", 
       color = "Female tagged?") +
  theme_classic() +
  scale_color_manual(values = c("black", "darkgray")) + 
  theme(axis.text = element_text(size = 11), axis.title = element_text(size = 11), 
        legend.text = element_text(size = 11), legend.title = element_text(size = 11))


########################### Male visitation rate ###########################
# Extract fixed effects
fixefmod <- fixef(mvis_lmer_temp_ni)
str(fixefmod)
fixefmod

# Mean temp
mean_temp <- mean(noMB54$avg_temp_obs)

# Year effect: mean of the two
mean_year <- fixefmod[4]/2

# Non-tagged birds
# Control
meanC_NT <- fixefmod[1] + mean_year +  (fixefmod[6] * mean_temp)
# Enlarged
meanE_NT <- fixefmod[1] + fixefmod[2] + mean_year + (fixefmod[6] * mean_temp)
# Reduced
meanR_NT <- fixefmod[1] + fixefmod[3] + mean_year + (fixefmod[6] * mean_temp)

# Tagged birds
# Control
meanC_T <- fixefmod[1] + mean_year + (fixefmod[6] * mean_temp) + fixefmod[5]
# Enlarged
meanE_T <- fixefmod[1] + fixefmod[2] + mean_year + (fixefmod[6] * mean_temp) + fixefmod[5]
# Reduced
meanR_T <- fixefmod[1] + fixefmod[3] + mean_year + (fixefmod[6] * mean_temp) + fixefmod[5]

# Get into the format I want for plotting
mod_grpmeans <- rbind(meanC_NT, meanE_NT, meanR_NT, meanC_T, meanE_T, meanR_T)
mod_grpmeans <- data.frame(mod_grpmeans)
str(mod_grpmeans)
mod_grpmeans$bsm <- c("PM", "E", "R", "PM", "E", "R")
mod_grpmeans$tag <- c("N", "N", "N", "Y", "Y", "Y")
colnames(mod_grpmeans) <- c("mean", "treatment", "tag")
str(mod_grpmeans)
mod_grpmeans$treatment <- as.factor(mod_grpmeans$treatment)
mod_grpmeans$tag <- as.factor(mod_grpmeans$tag)
mod_grpmeans$treatment <- factor(mod_grpmeans$treatment, levels = c("R", "PM", "E"))
mod_grpmeans$tag <- factor(mod_grpmeans$tag, levels = c("Y", "N"))
str(mod_grpmeans)


# Create model visualization
mvisplot <- ggplot(data = noMB54, aes(x = treatment, y = num_vis_m, col = tag)) +
  geom_jitter(position = position_jitter(width = 0.05), 
              size = 2) +
  geom_point(data = mod_grpmeans, aes(x = treatment, y = mean, group = tag,
                                      color = tag), size = 4) +
  geom_line(data = mod_grpmeans, aes(x = treatment, y =mean, group = tag, 
                                     color = tag), size = 1.5) +
  labs(x = "BSM treatment", y = "Male visitation rate (vis/hr)", 
       color = "Female tagged?") +
  theme_classic() +
  scale_color_manual(values = c("black", "darkgray")) + 
  theme(axis.text = element_text(size = 11), axis.title = element_text(size = 11), 
        legend.text = element_text(size = 11), legend.title = element_text(size = 11))

########################### Female foraging distance ###########################
fixefmod <- fixef(for_lmer_noweath_no)
str(fixefmod)
fixefmod

# Correct for year effect: mean of the two
mean_year <- fixefmod[4]/2

# Control
meanC_T <- fixefmod[1] + mean_year
# Enlarged
meanE_T <- fixefmod[1] + fixefmod[2] + mean_year
# Reduced
meanR_T <- fixefmod[1] + fixefmod[3] + mean_year 

# Get into the format I want for plotting
mod_grpmeans <- rbind(meanC_T, meanE_T, meanR_T)
mod_grpmeans <- data.frame(mod_grpmeans)
str(mod_grpmeans)
mod_grpmeans$bsm <- c("PM", "E", "R")
colnames(mod_grpmeans) <- c("mean", "treatment")
str(mod_grpmeans)
mod_grpmeans$treatment <- as.factor(mod_grpmeans$treatment)
mod_grpmeans$treatment <- factor(mod_grpmeans$treatment, levels = c("R", "PM", "E"))
str(mod_grpmeans)
mod_grpmeans$mean <- exp(mod_grpmeans$mean)

# Relevel treatment for visualization
noM4$treatment <- factor(noM4$treatment, levels = c("R", "PM", "E"))

# Create model visualization
ffordis <- ggplot(data = noM4, aes(x = treatment, y = foraging_area100/1000000)) +
  geom_jitter(position = position_jitter(width = 0.05), 
              size = 2) +
  geom_point(data = mod_grpmeans, aes(x = treatment, y = mean/1000000), size = 4) +
  geom_line(data = mod_grpmeans, aes(x = treatment, y =mean/1000000, group = 1), size = 1.5) +
  labs(x = "BSM treatment", y = "Female foraging range area (km sq)", 
       color = "Tagged?") +
  theme_classic() +
  scale_color_manual(values = c("black", "darkgray"))  + 
  theme(axis.text = element_text(size = 11), axis.title = element_text(size = 11), 
        legend.text = element_text(size = 11), legend.title = element_text(size = 11))


########################### Nestling growth ###########################
fixefmod <- fixef(pn_growth_lmer_noweath_ni)
str(fixefmod)
fixefmod


# Correct for year effect: mean of the two
mean_year <- fixefmod[4]/2

# Non-tagged birds
# Enlarged
meanE_NT <- fixefmod[1] + mean_year 
# Reduced
meanR_NT <- fixefmod[1] + fixefmod[2] + mean_year

# Tagged birds
# Enlarged
meanE_T <- fixefmod[1] + mean_year + fixefmod[3]
# Reduced
meanR_T <- fixefmod[1] + fixefmod[2] + mean_year + fixefmod[3]


# Get into the format I want for plotting
mod_grpmeans <- rbind(meanE_NT, meanR_NT, meanE_T, meanR_T)
mod_grpmeans <- data.frame(mod_grpmeans)
str(mod_grpmeans)
mod_grpmeans$bsm <- c("E", "R", "E", "R")
mod_grpmeans$tag <- c("N", "N", "Y", "Y")
colnames(mod_grpmeans) <- c("mean","bsm", "tag")
str(mod_grpmeans)
mod_grpmeans$bsm <- as.factor(mod_grpmeans$bsm)
mod_grpmeans$tag <- as.factor(mod_grpmeans$tag)
mod_grpmeans$bsm <- factor(mod_grpmeans$bsm, levels = c("R", "E"))
mod_grpmeans$tag <- factor(mod_grpmeans$tag, levels = c("Y", "N"))
str(mod_grpmeans)

# Relevel treatment for visualization
nestlingF$bsm <- factor(nestlingF$bsm, levels = c("R", "E"))
nestlingF$tag <- factor(nestlingF$tag, levels = c("Y", "N"))

# Create model visualization
nestlplot <- ggplot(data = nestlingF, aes(x = bsm, y = mass8to12_pn, col = tag)) +
  geom_jitter(position = position_jitter(width = 0.05), 
              size = 2) +
  geom_point(data = mod_grpmeans, aes(x = bsm, y = mean, group = tag,
                                      color = tag), size = 4) +
  geom_line(data = mod_grpmeans, aes(x = bsm, y =mean, group = tag, 
                                     color = tag), size = 1.5) +
  labs(x = "BSM treatment", y = "Post-manipulation nestling growth (g)", 
       color = "Female tagged?") +
  theme_classic() +
  scale_color_manual(values = c("black", "darkgray")) + 
  theme(axis.text = element_text(size = 11), axis.title = element_text(size = 11), 
        legend.text = element_text(size = 11), legend.title = element_text(size = 11))


# Create combined visualization
model_vis_combined <- ggarrange(fvisplot, ffordis, mvisplot, nestlplot, 
                                ncol = 2, nrow = 2, 
                                common.legend = TRUE,
                                legend = "bottom", 
                                labels = c("a", "b", "c", "d"),
                                font.label = list(size = 11), 
                                hjust = 0.09)

ggsave(filename = "BES_model_vis_revised.png", plot = model_vis_combined, 
       width = 174, height = 165, units = "mm", dpi = 1200)

