Last updated: 2023-04-27
Checks: 7 0
Knit directory:
Density_and_sexual_selection_2023/ 
This reproducible R Markdown analysis was created with workflowr (version 1.7.0). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.
Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
The command set.seed(20210613) was run prior to running
the code in the R Markdown file. Setting a seed ensures that any results
that rely on randomness, e.g. subsampling or permutations, are
reproducible.
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.
Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.
Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.
The results in this page were generated with repository version e4a0f09. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.
Note that you need to be careful to ensure that all relevant files for
the analysis have been committed to Git prior to generating the results
(you can use wflow_publish or
wflow_git_commit). workflowr only checks the R Markdown
file, but you know if there are other scripts or data files that it
depends on. Below is the status of the Git repository when the results
were generated:
Ignored files:
    Ignored:    .Rhistory
    Ignored:    .Rproj.user/
Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.
These are the previous versions of the repository in which changes were
made to the R Markdown (analysis/index4.Rmd) and HTML
(docs/index4.html) files. If you’ve configured a remote Git
repository (see ?wflow_git_remote), click on the hyperlinks
in the table below to view the files as they were in that past version.
| File | Version | Author | Date | Message | 
|---|---|---|---|---|
| Rmd | e4a0f09 | LennartWinkler | 2023-04-27 | wflow_publish(all = T) | 
| html | 37ab720 | LennartWinkler | 2023-04-22 | Build site. | 
| Rmd | 5b85dd9 | LennartWinkler | 2023-04-22 | wflow_publish(all = T) | 
| html | a88c4c5 | LennartWinkler | 2023-04-21 | Build site. | 
| Rmd | 2dd68d0 | LennartWinkler | 2023-04-21 | wflow_publish(all = T) | 
| html | 2dd68d0 | LennartWinkler | 2023-04-21 | wflow_publish(all = T) | 
| Rmd | 73986d2 | LennartWinkler | 2023-04-21 | update | 
| html | 73986d2 | LennartWinkler | 2023-04-21 | update | 
| html | b81114e | LennartWinkler | 2023-04-20 | Build site. | 
| Rmd | fe8c52c | LennartWinkler | 2023-04-20 | wflow_publish(all = T) | 
| html | fe8c52c | LennartWinkler | 2023-04-20 | wflow_publish(all = T) | 
| html | 55df7ff | LennartWinkler | 2023-04-12 | Build site. | 
| html | b0a3f15 | LennartWinkler | 2023-04-12 | Build site. | 
| Rmd | c8bd540 | Lennart Winkler | 2023-04-12 | set up | 
| html | c8bd540 | Lennart Winkler | 2023-04-12 | set up | 
| html | 899398a | Lennart Winkler | 2022-08-14 | Build site. | 
| Rmd | d0d039c | Lennart Winkler | 2022-08-14 | wflow_publish(all = T) | 
| Rmd | f54f022 | LennartWinkler | 2022-08-13 | wflow_publish(republish = TRUE, all = T) | 
| html | f54f022 | LennartWinkler | 2022-08-13 | wflow_publish(republish = TRUE, all = T) | 
| Rmd | f89f7c1 | LennartWinkler | 2022-08-10 | Build site. | 
| html | f89f7c1 | LennartWinkler | 2022-08-10 | Build site. | 
Supplementary material reporting R code for the manuscript ‘Population density affects sexual selection in an insect model’.
We computed standardized metrics of (sexual) selection and tested for differences among density treatments and sexes, including the standardized mating and selection differential (m’ and s’, respectively) on body mass, a trait that is likely under sexual and natural selection. To this end, we relativized all traits within sex and treatment by dividing each observed value by the mean value of that sex and treatment. We then used bootstrapping to estimate the different selection metrics and to compare them between treatments (see details above). Throughout, for treatment comparisons we subtracted the low density treatment (i.e. small group or large arena size) from the high density treatment (i.e. large group or small arena size), hence negative differences indicate larger values at lower density and positive differences larger values at higher density. Hereafter we will refer to the difference between treatments as ‘effect size’.
Before we started the analyses, we loaded all necessary packages and data.
rm(list = ls()) # Clear work environment
# Load R-packages ####
list_of_packages=cbind('ggeffects','ggplot2','gridExtra','lme4','lmerTest','readr','dplyr','EnvStats','cowplot','gridGraphics','car','RColorBrewer','boot','data.table','base','ICC','knitr')
lapply(list_of_packages, require, character.only = TRUE) 
# Load data set ####
D_data=read_delim("./data/Data_Winkler_et_al_2023_Denstiy.csv",";", escape_double = FALSE, trim_ws = TRUE)
# Set factors and levels for factors
D_data$Week=as.factor(D_data$Week)
D_data$Sex=as.factor(D_data$Sex)
D_data$Gr_size=as.factor(D_data$Gr_size)
D_data$Gr_size <- factor(D_data$Gr_size, levels=c("SG","LG"))
D_data$Arena=as.factor(D_data$Arena)
## Subset data set ####
### Data according to denstiy ####
D_data_0.26=D_data[D_data$Treatment=='D = 0.26',]
D_data_0.52=D_data[D_data$Treatment=='D = 0.52',]
D_data_0.67=D_data[D_data$Treatment=='D = 0.67',]
D_data_1.33=D_data[D_data$Treatment=='D = 1.33',]
### Subset data by sex ####
D_data_m=D_data[D_data$Sex=='M',]
D_data_f=D_data[D_data$Sex=='F',]
### Calculate data relativized within treatment and sex ####
# Small group + large Area
D_data_0.26=D_data[D_data$Treatment=='D = 0.26',]
D_data_0.26$rel_m_RS=NA
D_data_0.26$rel_m_prop_RS=NA
D_data_0.26$rel_m_cMS=NA
D_data_0.26$rel_m_InSuc=NA
D_data_0.26$rel_m_feSuc=NA
D_data_0.26$rel_m_pFec=NA
D_data_0.26$rel_m_PS=NA
D_data_0.26$rel_m_pFec_compl=NA
D_data_0.26$rel_f_RS=NA
D_data_0.26$rel_f_prop_RS=NA
D_data_0.26$rel_f_cMS=NA
D_data_0.26$rel_f_fec_pMate=NA
D_data_0.26$rel_m_RS=D_data_0.26$m_RS/mean(D_data_0.26$m_RS,na.rm=T)
D_data_0.26$rel_m_prop_RS=D_data_0.26$m_prop_RS/mean(D_data_0.26$m_prop_RS,na.rm=T)
D_data_0.26$rel_m_cMS=D_data_0.26$m_cMS/mean(D_data_0.26$m_cMS,na.rm=T)
D_data_0.26$rel_m_InSuc=D_data_0.26$m_InSuc/mean(D_data_0.26$m_InSuc,na.rm=T)
D_data_0.26$rel_m_feSuc=D_data_0.26$m_feSuc/mean(D_data_0.26$m_feSuc,na.rm=T)
D_data_0.26$rel_m_pFec=D_data_0.26$m_pFec/mean(D_data_0.26$m_pFec,na.rm=T)
D_data_0.26$rel_m_PS=D_data_0.26$m_PS/mean(D_data_0.26$m_PS,na.rm=T)
D_data_0.26$rel_m_pFec_compl=D_data_0.26$m_pFec_compl/mean(D_data_0.26$m_pFec_compl,na.rm=T)
D_data_0.26$rel_f_RS=D_data_0.26$f_RS/mean(D_data_0.26$f_RS,na.rm=T)
D_data_0.26$rel_f_prop_RS=D_data_0.26$f_prop_RS/mean(D_data_0.26$f_prop_RS,na.rm=T)
D_data_0.26$rel_f_cMS=D_data_0.26$f_cMS/mean(D_data_0.26$f_cMS,na.rm=T)
D_data_0.26$rel_f_fec_pMate=D_data_0.26$f_fec_pMate/mean(D_data_0.26$f_fec_pMate,na.rm=T)
# Large group + large Area
D_data_0.52=D_data[D_data$Treatment=='D = 0.52',]
#Relativize data
D_data_0.52$rel_m_RS=NA
D_data_0.52$rel_m_prop_RS=NA
D_data_0.52$rel_m_cMS=NA
D_data_0.52$rel_m_InSuc=NA
D_data_0.52$rel_m_feSuc=NA
D_data_0.52$rel_m_pFec=NA
D_data_0.52$rel_m_PS=NA
D_data_0.52$rel_m_pFec_compl=NA
D_data_0.52$rel_f_RS=NA
D_data_0.52$rel_f_prop_RS=NA
D_data_0.52$rel_f_cMS=NA
D_data_0.52$rel_f_fec_pMate=NA
D_data_0.52$rel_m_RS=D_data_0.52$m_RS/mean(D_data_0.52$m_RS,na.rm=T)
D_data_0.52$rel_m_prop_RS=D_data_0.52$m_prop_RS/mean(D_data_0.52$m_prop_RS,na.rm=T)
D_data_0.52$rel_m_cMS=D_data_0.52$m_cMS/mean(D_data_0.52$m_cMS,na.rm=T)
D_data_0.52$rel_m_InSuc=D_data_0.52$m_InSuc/mean(D_data_0.52$m_InSuc,na.rm=T)
D_data_0.52$rel_m_feSuc=D_data_0.52$m_feSuc/mean(D_data_0.52$m_feSuc,na.rm=T)
D_data_0.52$rel_m_pFec=D_data_0.52$m_pFec/mean(D_data_0.52$m_pFec,na.rm=T)
D_data_0.52$rel_m_PS=D_data_0.52$m_PS/mean(D_data_0.52$m_PS,na.rm=T)
D_data_0.52$rel_m_pFec_compl=D_data_0.52$m_pFec_compl/mean(D_data_0.52$m_pFec_compl,na.rm=T)
D_data_0.52$rel_f_RS=D_data_0.52$f_RS/mean(D_data_0.52$f_RS,na.rm=T)
D_data_0.52$rel_f_prop_RS=D_data_0.52$f_prop_RS/mean(D_data_0.52$f_prop_RS,na.rm=T)
D_data_0.52$rel_f_cMS=D_data_0.52$f_cMS/mean(D_data_0.52$f_cMS,na.rm=T)
D_data_0.52$rel_f_fec_pMate=D_data_0.52$f_fec_pMate/mean(D_data_0.52$f_fec_pMate,na.rm=T)
# Small group + small Area
D_data_0.67=D_data[D_data$Treatment=='D = 0.67',]
#Relativize data
D_data_0.67$rel_m_RS=NA
D_data_0.67$rel_m_prop_RS=NA
D_data_0.67$rel_m_cMS=NA
D_data_0.67$rel_m_InSuc=NA
D_data_0.67$rel_m_feSuc=NA
D_data_0.67$rel_m_pFec=NA
D_data_0.67$rel_m_PS=NA
D_data_0.67$rel_m_pFec_compl=NA
D_data_0.67$rel_f_RS=NA
D_data_0.67$rel_f_prop_RS=NA
D_data_0.67$rel_f_cMS=NA
D_data_0.67$rel_f_fec_pMate=NA
D_data_0.67$rel_m_RS=D_data_0.67$m_RS/mean(D_data_0.67$m_RS,na.rm=T)
D_data_0.67$rel_m_prop_RS=D_data_0.67$m_prop_RS/mean(D_data_0.67$m_prop_RS,na.rm=T)
D_data_0.67$rel_m_cMS=D_data_0.67$m_cMS/mean(D_data_0.67$m_cMS,na.rm=T)
D_data_0.67$rel_m_InSuc=D_data_0.67$m_InSuc/mean(D_data_0.67$m_InSuc,na.rm=T)
D_data_0.67$rel_m_feSuc=D_data_0.67$m_feSuc/mean(D_data_0.67$m_feSuc,na.rm=T)
D_data_0.67$rel_m_pFec=D_data_0.67$m_pFec/mean(D_data_0.67$m_pFec,na.rm=T)
D_data_0.67$rel_m_PS=D_data_0.67$m_PS/mean(D_data_0.67$m_PS,na.rm=T)
D_data_0.67$rel_m_pFec_compl=D_data_0.67$m_pFec_compl/mean(D_data_0.67$m_pFec_compl,na.rm=T)
D_data_0.67$rel_f_RS=D_data_0.67$f_RS/mean(D_data_0.67$f_RS,na.rm=T)
D_data_0.67$rel_f_prop_RS=D_data_0.67$f_prop_RS/mean(D_data_0.67$f_prop_RS,na.rm=T)
D_data_0.67$rel_f_cMS=D_data_0.67$f_cMS/mean(D_data_0.67$f_cMS,na.rm=T)
D_data_0.67$rel_f_fec_pMate=D_data_0.67$f_fec_pMate/mean(D_data_0.67$f_fec_pMate,na.rm=T)
# Large group + small Area
D_data_1.33=D_data[D_data$Treatment=='D = 1.33',]
#Relativize data
D_data_1.33$rel_m_RS=NA
D_data_1.33$rel_m_prop_RS=NA
D_data_1.33$rel_m_cMS=NA
D_data_1.33$rel_m_InSuc=NA
D_data_1.33$rel_m_feSuc=NA
D_data_1.33$rel_m_pFec=NA
D_data_1.33$rel_m_PS=NA
D_data_1.33$rel_m_pFec_compl=NA
D_data_1.33$rel_f_RS=NA
D_data_1.33$rel_f_prop_RS=NA
D_data_1.33$rel_f_cMS=NA
D_data_1.33$rel_f_fec_pMate=NA
D_data_1.33$rel_m_RS=D_data_1.33$m_RS/mean(D_data_1.33$m_RS,na.rm=T)
D_data_1.33$rel_m_prop_RS=D_data_1.33$m_prop_RS/mean(D_data_1.33$m_prop_RS,na.rm=T)
D_data_1.33$rel_m_cMS=D_data_1.33$m_cMS/mean(D_data_1.33$m_cMS,na.rm=T)
D_data_1.33$rel_m_InSuc=D_data_1.33$m_InSuc/mean(D_data_1.33$m_InSuc,na.rm=T)
D_data_1.33$rel_m_feSuc=D_data_1.33$m_feSuc/mean(D_data_1.33$m_feSuc,na.rm=T)
D_data_1.33$rel_m_pFec=D_data_1.33$m_pFec/mean(D_data_1.33$m_pFec,na.rm=T)
D_data_1.33$rel_m_PS=D_data_1.33$m_PS/mean(D_data_1.33$m_PS,na.rm=T)
D_data_1.33$rel_m_pFec_compl=D_data_1.33$m_pFec_compl/mean(D_data_1.33$m_pFec_compl,na.rm=T)
D_data_1.33$rel_f_RS=D_data_1.33$f_RS/mean(D_data_1.33$f_RS,na.rm=T)
D_data_1.33$rel_f_prop_RS=D_data_1.33$f_prop_RS/mean(D_data_1.33$f_prop_RS,na.rm=T)
D_data_1.33$rel_f_cMS=D_data_1.33$f_cMS/mean(D_data_1.33$f_cMS,na.rm=T)
D_data_1.33$rel_f_fec_pMate=D_data_1.33$f_fec_pMate/mean(D_data_1.33$f_fec_pMate,na.rm=T)
### Reduce treatments to arena and population size ####
# Arena size
D_data_Large_arena=rbind(D_data_0.26,D_data_0.52)
D_data_Small_arena=rbind(D_data_0.67,D_data_1.33)
# Population size
D_data_Small_pop=rbind(D_data_0.26,D_data_0.67)
D_data_Large_pop=rbind(D_data_0.52,D_data_1.33)
## Set figure schemes ####
# Set color-sets for figures
colpal=brewer.pal(4, 'Dark2')
colpal2=c("#b2182b","#2166AC")
colpal3=brewer.pal(4, 'Paired')
# Set theme for ggplot2 figures
fig_theme=theme(panel.border = element_blank(),
                plot.margin = margin(0,2.2,0,0.2,"cm"),
                plot.title = element_text(hjust = 0.5),
                panel.background = element_blank(),
                legend.key=element_blank(),
                panel.grid.major = element_blank(),
                panel.grid.minor = element_blank(), 
                legend.position = c(1.25, 0.8),
                plot.tag.position=c(0.01,0.98),
                legend.title = element_blank(),
                legend.text = element_text(colour="black", size=10),
                axis.line.x = element_line(colour = "black", size = 1),
                axis.line.y = element_line(colour = "black", size = 1),
                axis.text.x = element_text(face="plain", color="black", size=16, angle=0),
                axis.text.y = element_text(face="plain", color="black", size=16, angle=0),
                axis.title.x = element_text(size=16,face="plain", margin = margin(r=0,10,0,0)),
                axis.title.y = element_text(size=16,face="plain", margin = margin(r=10,0,0,0)),
                axis.ticks = element_line(size = 1),
                axis.ticks.length = unit(.3, "cm"))
## Create customized functions for analysis ####
# Create function to calculate standard error and upper/lower standard deviation
standard_error <- function(x) sd(x,na.rm=T) / sqrt(length(na.exclude(x)))
upper_SD <- function(x) mean(x,na.rm=T)+(sd(x)/2)
lower_SD <- function(x) mean(x,na.rm=T)-(sd(x)/2)First, we bootstrapped the different metrics of (sexual) selection.
## Bootastrap (sexual) selection metrics ####
### Opportuity for selection (I) ####
# Arena size
D_data_Large_arena_Male_rel_propRS <-as.data.table(D_data_Large_arena$rel_m_RS)
c <- function(d, i){
  d2 <- d[i,]
  return(var(d2[,1], na.rm=TRUE))
}
I_Large_arena_Male_bootvar <- boot(D_data_Large_arena_Male_rel_propRS, c, R=10000)
D_data_Large_arena_Female_rel_propRS <-as.data.table(D_data_Large_arena$rel_f_RS)
I_Large_arena_Female_bootvar <- boot(D_data_Large_arena_Female_rel_propRS, c, R=10000)
D_data_Small_arena_Male_rel_propRS <-as.data.table(D_data_Small_arena$rel_m_RS)
I_Small_arena_Male_bootvar <- boot(D_data_Small_arena_Male_rel_propRS, c, R=10000)
D_data_Small_arena_Female_rel_propRS <-as.data.table(D_data_Small_arena$rel_f_RS)
I_Small_arena_Female_bootvar <- boot(D_data_Small_arena_Female_rel_propRS, c, R=10000)
# Population size
D_data_Large_pop_Male_rel_propRS <-as.data.table(D_data_Large_pop$rel_m_RS)
I_Large_pop_Male_bootvar <- boot(D_data_Large_pop_Male_rel_propRS, c, R=10000)
D_data_Large_pop_Female_rel_propRS <-as.data.table(D_data_Large_pop$rel_f_RS)
I_Large_pop_Female_bootvar <- boot(D_data_Large_pop_Female_rel_propRS, c, R=10000)
D_data_Small_pop_Male_rel_propRS <-as.data.table(D_data_Small_pop$rel_m_RS)
I_Small_pop_Male_bootvar <- boot(D_data_Small_pop_Male_rel_propRS, c, R=10000)
D_data_Small_pop_Female_rel_propRS <-as.data.table(D_data_Small_pop$rel_f_RS)
I_Small_pop_Female_bootvar <- boot(D_data_Small_pop_Female_rel_propRS, c, R=10000)
rm("c")
### Opportunity for sexual selection (Is) ####
# Arena size
D_data_Large_arena_Male_relMS <-as.data.table(D_data_Large_arena$rel_m_cMS)
c <- function(d, i){
  d2 <- d[i,]
  return(var(d2[,1], na.rm=TRUE))
}
Is_Large_arena_Male_bootvar <- boot(D_data_Large_arena_Male_relMS, c, R=10000)
D_data_Large_arena_Female_relMS <-as.data.table(D_data_Large_arena$rel_f_cMS)
Is_Large_arena_Female_bootvar <- boot(D_data_Large_arena_Female_relMS, c, R=10000)
D_data_Small_arena_Male_relMS <-as.data.table(D_data_Small_arena$rel_m_cMS)
Is_Small_arena_Male_bootvar <- boot(D_data_Small_arena_Male_relMS, c, R=10000)
D_data_Small_arena_Female_relMS <-as.data.table(D_data_Small_arena$rel_f_cMS)
Is_Small_arena_Female_bootvar <- boot(D_data_Small_arena_Female_relMS, c, R=10000)
# Population size
D_data_Large_pop_Male_relMS <-as.data.table(D_data_Large_pop$rel_m_cMS)
Is_Large_pop_Male_bootvar <- boot(D_data_Large_pop_Male_relMS, c, R=10000)
D_data_Large_pop_Female_relMS <-as.data.table(D_data_Large_pop$rel_f_cMS)
Is_Large_pop_Female_bootvar <- boot(D_data_Large_pop_Female_relMS, c, R=10000)
D_data_Small_pop_Male_relMS <-as.data.table(D_data_Small_pop$rel_m_cMS)
Is_Small_pop_Male_bootvar <- boot(D_data_Small_pop_Male_relMS, c, R=10000)
D_data_Small_pop_Female_relMS <-as.data.table(D_data_Small_pop$rel_f_cMS)
Is_Small_pop_Female_bootvar <- boot(D_data_Small_pop_Female_relMS, c, R=10000)
rm("c")
### Sexual selection gradient (Bateman gradient) ####
# Arena size
D_data_Large_arena_Male_B <-as.data.table(cbind(D_data_Large_arena$rel_m_RS,D_data_Large_arena$rel_m_cMS))
c <- function(d, i){
  d2 <- d[i,]
  return(lm(V1 ~V2,data=d2)$coefficients[2])
}
B_Large_arena_Male_bootvar <- boot(D_data_Large_arena_Male_B, c, R=10000)
D_data_Small_arena_Male_B <-as.data.table(cbind(D_data_Small_arena$rel_m_RS,D_data_Small_arena$rel_m_cMS))
B_Small_arena_Male_bootvar <- boot(D_data_Small_arena_Male_B, c, R=10000)
D_data_Large_arena_Female_B <-as.data.table(cbind(D_data_Large_arena$rel_f_RS,D_data_Large_arena$rel_f_cMS))
B_Large_arena_Female_bootvar <- boot(D_data_Large_arena_Female_B, c, R=10000)
D_data_Small_arena_Female_B <-as.data.table(cbind(D_data_Small_arena$rel_f_RS,D_data_Small_arena$rel_f_cMS))
B_Small_arena_Female_bootvar <- boot(D_data_Small_arena_Female_B, c, R=10000)
#Population size
D_data_Large_pop_Male_B <-as.data.table(cbind(D_data_Large_pop$rel_m_RS,D_data_Large_pop$rel_m_cMS))
B_Large_pop_Male_bootvar <- boot(D_data_Large_pop_Male_B, c, R=10000)
D_data_Small_pop_Male_B <-as.data.table(cbind(D_data_Small_pop$rel_m_RS,D_data_Small_pop$rel_m_cMS))
B_Small_pop_Male_bootvar <- boot(D_data_Small_pop_Male_B, c, R=10000)
D_data_Large_pop_Female_B <-as.data.table(cbind(D_data_Large_pop$rel_f_RS,D_data_Large_pop$rel_f_cMS))
B_Large_pop_Female_bootvar <- boot(D_data_Large_pop_Female_B, c, R=10000)
D_data_Small_pop_Female_B <-as.data.table(cbind(D_data_Small_pop$rel_f_RS,D_data_Small_pop$rel_f_cMS))
B_Small_pop_Female_bootvar <- boot(D_data_Small_pop_Female_B, c, R=10000)
rm("c")
### Jones index (S) ####
# Arena size
c <- function(d, i){
  d2 <- d[i,]
  return(lm(d2$V1 ~d2$V2)$coefficients[2]*sqrt(var(d2$V2, na.rm=TRUE)))
}
S_Large_arena_Male_bootvar <- boot(D_data_Large_arena_Male_B, c, R=10000)
S_Small_arena_Male_bootvar <- boot(D_data_Small_arena_Male_B, c, R=10000)
S_Large_arena_Female_bootvar <- boot(D_data_Large_arena_Female_B, c, R=10000)
S_Small_arena_Female_bootvar <- boot(D_data_Small_arena_Female_B, c, R=10000)
#Population size
S_Large_pop_Male_bootvar <- boot(D_data_Large_pop_Male_B, c, R=10000)
S_Small_pop_Male_bootvar <- boot(D_data_Small_pop_Male_B, c, R=10000)
S_Large_pop_Female_bootvar <- boot(D_data_Large_pop_Female_B, c, R=10000)
S_Small_pop_Female_bootvar <- boot(D_data_Small_pop_Female_B, c, R=10000)
rm("c")
### Extract data and write results table ####
PhenVarBoot_Table_Male_Small_pop_I <- as.data.frame(cbind("Male", "Small population size", "Opportunity for selection", as.numeric(mean(I_Small_pop_Male_bootvar$t)), quantile(I_Small_pop_Male_bootvar$t,.025, names = FALSE), quantile(I_Small_pop_Male_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Male_Large_pop_I <- as.data.frame(cbind("Male", "Large population size", "Opportunity for selection", mean(I_Large_pop_Male_bootvar$t), quantile(I_Large_pop_Male_bootvar$t,.025, names = FALSE), quantile(I_Large_pop_Male_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Male_Large_arena_I <- as.data.frame(cbind("Male", "Large arena size", "Opportunity for selection", mean(I_Large_arena_Male_bootvar$t), quantile(I_Large_arena_Male_bootvar$t,.025, names = FALSE), quantile(I_Large_arena_Male_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Male_Small_arena_I <- as.data.frame(cbind("Male", "Small arena size", "Opportunity for selection", mean(I_Small_arena_Male_bootvar$t), quantile(I_Small_arena_Male_bootvar$t,.025, names = FALSE), quantile(I_Small_arena_Male_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Male_Small_pop_Is <- as.data.frame(cbind("Male", "Small population size", "Opportunity for sexual selection", mean(Is_Small_pop_Male_bootvar$t), quantile(Is_Small_pop_Male_bootvar$t,.025, names = FALSE), quantile(Is_Small_pop_Male_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Male_Large_pop_Is <- as.data.frame(cbind("Male", "Large population size", "Opportunity for sexual selection", mean(Is_Large_pop_Male_bootvar$t), quantile(Is_Large_pop_Male_bootvar$t,.025, names = FALSE), quantile(Is_Large_pop_Male_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Male_Large_arena_Is <- as.data.frame(cbind("Male", "Large arena size", "Opportunity for sexual selection", mean(Is_Large_arena_Male_bootvar$t), quantile(Is_Large_arena_Male_bootvar$t,.025, names = FALSE), quantile(Is_Large_arena_Male_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Male_Small_arena_Is <- as.data.frame(cbind("Male", "Small arena size", "Opportunity for sexual selection", mean(Is_Small_arena_Male_bootvar$t), quantile(Is_Small_arena_Male_bootvar$t,.025, names = FALSE), quantile(Is_Small_arena_Male_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Male_Small_pop_B <- as.data.frame(cbind("Male", "Small population size", "Bateman gradient", mean(B_Small_pop_Male_bootvar$t), quantile(B_Small_pop_Male_bootvar$t,.025, names = FALSE), quantile(B_Small_pop_Male_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Male_Large_pop_B <- as.data.frame(cbind("Male", "Large population size", "Bateman gradient", mean(B_Large_pop_Male_bootvar$t), quantile(B_Large_pop_Male_bootvar$t,.025, names = FALSE), quantile(B_Large_pop_Male_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Male_Large_arena_B <- as.data.frame(cbind("Male", "Large arena size", "Bateman gradient", mean(B_Large_arena_Male_bootvar$t), quantile(B_Large_arena_Male_bootvar$t,.025, names = FALSE), quantile(B_Large_arena_Male_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Male_Small_arena_B <- as.data.frame(cbind("Male", "Small arena size", "Bateman gradient", mean(B_Small_arena_Male_bootvar$t), quantile(B_Small_arena_Male_bootvar$t,.025, names = FALSE), quantile(B_Small_arena_Male_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Male_Small_pop_S <- as.data.frame(cbind("Male", "Small population size", "Jones index", mean(S_Small_pop_Male_bootvar$t,na.rm = T), quantile(S_Small_pop_Male_bootvar$t,.025, names = FALSE,na.rm = T), quantile(S_Small_pop_Male_bootvar$t,.975, names = FALSE,na.rm = T)))
PhenVarBoot_Table_Male_Large_pop_S <- as.data.frame(cbind("Male", "Large population size", "Jones index", mean(S_Large_pop_Male_bootvar$t,na.rm = T), quantile(S_Large_pop_Male_bootvar$t,.025, names = FALSE,na.rm = T), quantile(S_Large_pop_Male_bootvar$t,.975, names = FALSE,na.rm = T)))
PhenVarBoot_Table_Male_Large_arena_S <- as.data.frame(cbind("Male", "Large arena size", "Jones index", mean(S_Large_arena_Male_bootvar$t,na.rm = T), quantile(S_Large_arena_Male_bootvar$t,.025, names = FALSE,na.rm = T), quantile(S_Large_arena_Male_bootvar$t,.975, names = FALSE,na.rm = T)))
PhenVarBoot_Table_Male_Small_arena_S <- as.data.frame(cbind("Male", "Small arena size", "Jones index", mean(S_Small_arena_Male_bootvar$t,na.rm = T), quantile(S_Small_arena_Male_bootvar$t,.025, names = FALSE,na.rm = T), quantile(S_Small_arena_Male_bootvar$t,.975, names = FALSE,na.rm = T)))
PhenVarBoot_Table_Female_Small_pop_I <- as.data.frame(cbind("Female", "Small population size", "Opportunity for selection", mean(I_Small_pop_Female_bootvar$t), quantile(I_Small_pop_Female_bootvar$t,.025, names = FALSE), quantile(I_Small_pop_Female_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Female_Large_pop_I <- as.data.frame(cbind("Female", "Large population size", "Opportunity for selection", mean(I_Large_pop_Female_bootvar$t), quantile(I_Large_pop_Female_bootvar$t,.025, names = FALSE), quantile(I_Large_pop_Female_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Female_Large_arena_I <- as.data.frame(cbind("Female", "Large arena size", "Opportunity for selection", mean(I_Large_arena_Female_bootvar$t), quantile(I_Large_arena_Female_bootvar$t,.025, names = FALSE), quantile(I_Large_arena_Female_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Female_Small_arena_I <- as.data.frame(cbind("Female", "Small arena size", "Opportunity for selection", mean(I_Small_arena_Female_bootvar$t), quantile(I_Small_arena_Female_bootvar$t,.025, names = FALSE), quantile(I_Small_arena_Female_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Female_Small_pop_Is <- as.data.frame(cbind("Female", "Small population size", "Opportunity for sexual selection", mean(Is_Small_pop_Female_bootvar$t), quantile(Is_Small_pop_Female_bootvar$t,.025, names = FALSE), quantile(Is_Small_pop_Female_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Female_Large_pop_Is <- as.data.frame(cbind("Female", "Large population size", "Opportunity for sexual selection", mean(Is_Large_pop_Female_bootvar$t), quantile(Is_Large_pop_Female_bootvar$t,.025, names = FALSE), quantile(Is_Large_pop_Female_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Female_Large_arena_Is <- as.data.frame(cbind("Female", "Large arena size", "Opportunity for sexual selection", mean(Is_Large_arena_Female_bootvar$t), quantile(Is_Large_arena_Female_bootvar$t,.025, names = FALSE), quantile(Is_Large_arena_Female_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Female_Small_arena_Is <- as.data.frame(cbind("Female", "Small arena size", "Opportunity for sexual selection", mean(Is_Small_arena_Female_bootvar$t), quantile(Is_Small_arena_Female_bootvar$t,.025, names = FALSE), quantile(Is_Small_arena_Female_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Female_Small_pop_B <- as.data.frame(cbind("Female", "Small population size", "Bateman gradient", mean(B_Small_pop_Female_bootvar$t), quantile(B_Small_pop_Female_bootvar$t,.025, names = FALSE), quantile(B_Small_pop_Female_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Female_Large_pop_B <- as.data.frame(cbind("Female", "Large population size", "Bateman gradient", mean(B_Large_pop_Female_bootvar$t), quantile(B_Large_pop_Female_bootvar$t,.025, names = FALSE), quantile(B_Large_pop_Female_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Female_Large_arena_B <- as.data.frame(cbind("Female", "Large arena size", "Bateman gradient", mean(B_Large_arena_Female_bootvar$t), quantile(B_Large_arena_Female_bootvar$t,.025, names = FALSE), quantile(B_Large_arena_Female_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Female_Small_arena_B <- as.data.frame(cbind("Female", "Small arena size", "Bateman gradient", mean(B_Small_arena_Female_bootvar$t), quantile(B_Small_arena_Female_bootvar$t,.025, names = FALSE), quantile(B_Small_arena_Female_bootvar$t,.975, names = FALSE)))
PhenVarBoot_Table_Female_Small_pop_S <- as.data.frame(cbind("Female", "Small population size", "Jones index", mean(S_Small_pop_Female_bootvar$t,na.rm = T), quantile(S_Small_pop_Female_bootvar$t,.025, names = FALSE,na.rm = T), quantile(S_Small_pop_Female_bootvar$t,.975, names = FALSE,na.rm = T)))
PhenVarBoot_Table_Female_Large_pop_S <- as.data.frame(cbind("Female", "Large population size", "Jones index", mean(S_Large_pop_Female_bootvar$t,na.rm = T), quantile(S_Large_pop_Female_bootvar$t,.025, names = FALSE,na.rm = T), quantile(S_Large_pop_Female_bootvar$t,.975, names = FALSE,na.rm = T)))
PhenVarBoot_Table_Female_Large_arena_S <- as.data.frame(cbind("Female", "Large arena size", "Jones index", mean(S_Large_arena_Female_bootvar$t,na.rm = T), quantile(S_Large_arena_Female_bootvar$t,.025, names = FALSE,na.rm = T), quantile(S_Large_arena_Female_bootvar$t,.975, names = FALSE,na.rm = T)))
PhenVarBoot_Table_Female_Small_arena_S <- as.data.frame(cbind("Female", "Small arena size", "Jones index", mean(S_Small_arena_Female_bootvar$t,na.rm = T), quantile(S_Small_arena_Female_bootvar$t,.025, names = FALSE,na.rm = T), quantile(S_Small_arena_Female_bootvar$t,.975, names = FALSE,na.rm = T)))
Table_BatemanMetrics <- as.data.frame(as.matrix(rbind(PhenVarBoot_Table_Male_Small_pop_I,PhenVarBoot_Table_Male_Large_pop_I,PhenVarBoot_Table_Male_Large_arena_I,PhenVarBoot_Table_Male_Small_arena_I,
                                                      PhenVarBoot_Table_Male_Small_pop_Is,PhenVarBoot_Table_Male_Large_pop_Is,PhenVarBoot_Table_Male_Large_arena_Is,PhenVarBoot_Table_Male_Small_arena_Is,
                                                      PhenVarBoot_Table_Male_Small_pop_B,PhenVarBoot_Table_Male_Large_pop_B,PhenVarBoot_Table_Male_Large_arena_B,PhenVarBoot_Table_Male_Small_arena_B,
                                                      PhenVarBoot_Table_Male_Small_pop_S,PhenVarBoot_Table_Male_Large_pop_S,PhenVarBoot_Table_Male_Large_arena_S,PhenVarBoot_Table_Male_Small_arena_S,
                                                      PhenVarBoot_Table_Female_Small_pop_I,PhenVarBoot_Table_Female_Large_pop_I,PhenVarBoot_Table_Female_Large_arena_I,PhenVarBoot_Table_Female_Small_arena_I,
                                                      PhenVarBoot_Table_Female_Small_pop_Is,PhenVarBoot_Table_Female_Large_pop_Is,PhenVarBoot_Table_Female_Large_arena_Is,PhenVarBoot_Table_Female_Small_arena_Is,
                                                      PhenVarBoot_Table_Female_Small_pop_B,PhenVarBoot_Table_Female_Large_pop_B,PhenVarBoot_Table_Female_Large_arena_B,PhenVarBoot_Table_Female_Small_arena_B,
                                                      PhenVarBoot_Table_Female_Small_pop_S,PhenVarBoot_Table_Female_Large_pop_S,PhenVarBoot_Table_Female_Large_arena_S,PhenVarBoot_Table_Female_Small_arena_S)),digits=2)
is.table(Table_BatemanMetrics)
colnames(Table_BatemanMetrics)[1] <- "Sex"
colnames(Table_BatemanMetrics)[2] <- "Treatment"
colnames(Table_BatemanMetrics)[3] <- "Selection metric"
colnames(Table_BatemanMetrics)[4] <- "Variance"
colnames(Table_BatemanMetrics)[5] <- "l95_CI"
colnames(Table_BatemanMetrics)[6] <- "u95_CI"
Table_BatemanMetrics[,4]=as.numeric(Table_BatemanMetrics[,4])
Table_BatemanMetrics[,5]=as.numeric(Table_BatemanMetrics[,5])
Table_BatemanMetrics[,6]=as.numeric(Table_BatemanMetrics[,6])Next, we bootstrapped the mating differential on body mass.
## Mating and selection differential on body mass ####
#Standardize body mass
D_data_m$stder_BM_focal=NA
D_data_m$stder_BM_focal=D_data_m$Body_mass_mg_focal-mean(D_data_m$Body_mass_mg_focal)
D_data_m$stder_BM_focal=D_data_m$stder_BM_focal/sd(D_data_m$Body_mass_mg_focal)
#Standardize body mass
D_data_f$stder_BM_focal=NA
D_data_f$stder_BM_focal=D_data_f$Body_mass_mg_focal-mean(D_data_f$Body_mass_mg_focal)
D_data_f$stder_BM_focal=D_data_f$stder_BM_focal/sd(D_data_f$Body_mass_mg_focal)
## Bootstrap mating differential on body mass ####
# Across treatments 
# Males
# Calculate relative fitness
rel_fit_males=D_data_m$m_cMS/mean(D_data_m$m_cMS,na.rm=T)
mDif_BW_males = function(dataFrame, indexVector) {
  # Calculate selection differential
  s = cov(dataFrame[indexVector, match("stder_BM_focal",names(dataFrame))],dataFrame[indexVector, match("rel_fit_males",names(dataFrame))],use="complete.obs",method = "pearson")
  return(s)
}
data_mDif=as.data.frame(cbind(rel_fit_males,D_data_m$stder_BM_focal))
names(data_mDif)[1] <- "rel_fit_males"
names(data_mDif)[2] <- "stder_BM_focal"
boot_BW_males = boot(data_mDif, mDif_BW_males, R = 10000)
# Females
# Calculate relative fitness
rel_fit_females=D_data_f$f_cMS/mean(D_data_f$f_cMS,na.rm=T)
mDif_BW_females = function(dataFrame, indexVector) { 
  # Calculate selection differential
  s = cov(dataFrame[indexVector, match("stder_BM_focal",names(dataFrame))],dataFrame[indexVector, match("rel_fit_females",names(dataFrame))],use="complete.obs",method = "pearson")
  return(s)
}
data_mDif_F=as.data.frame(cbind(rel_fit_females,D_data_f$stder_BM_focal))
names(data_mDif_F)[1] <- "rel_fit_females"
names(data_mDif_F)[2] <- "stder_BM_focal"
boot_BW_females = boot(data_mDif_F, mDif_BW_females, R = 10000)
# Mating differential for each density treatment
# Males
# Group size
# Small group
D_data_m_SG=D_data_m[D_data_m$Gr_size=='SG',]
rel_fit_males_M_SG=D_data_m_SG$m_cMS/mean(D_data_m_SG$m_cMS,na.rm=T)
data_mDif_M_SG=as.data.frame(cbind(rel_fit_males_M_SG,D_data_m_SG$stder_BM_focal))
names(data_mDif_M_SG)[1] <- "rel_fit_males"
names(data_mDif_M_SG)[2] <- "stder_BM_focal"
boot_BW_males_group_size_small = boot(data_mDif_M_SG, mDif_BW_males, R = 10000)
# Large group
D_data_m_LG=D_data_m[D_data_m$Gr_size=='LG',]
rel_fit_males_M_LG=D_data_m_LG$m_cMS/mean(D_data_m_LG$m_cMS,na.rm=T)
data_mDif_M_LG=as.data.frame(cbind(rel_fit_males_M_LG,D_data_m_LG$stder_BM_focal))
names(data_mDif_M_LG)[1] <- "rel_fit_males"
names(data_mDif_M_LG)[2] <- "stder_BM_focal"
boot_BW_males_group_size_large = boot(data_mDif_M_LG, mDif_BW_males, R = 10000)
# Arena size
# Large Arena
D_data_m_LA=D_data_m[D_data_m$Arena=='Large',]
rel_fit_males_M_LA=D_data_m_LA$m_cMS/mean(D_data_m_LA$m_cMS,na.rm=T)
data_mDif_M_LA=as.data.frame(cbind(rel_fit_males_M_LA,D_data_m_LA$stder_BM_focal))
names(data_mDif_M_LA)[1] <- "rel_fit_males"
names(data_mDif_M_LA)[2] <- "stder_BM_focal"
boot_BW_males_arena_large = boot(data_mDif_M_LA, mDif_BW_males, R = 10000)
# Small Arena
D_data_m_SA=D_data_m[D_data_m$Arena=='Small',]
rel_fit_males_M_SA=D_data_m_SA$m_cMS/mean(D_data_m_SA$m_cMS,na.rm=T)
data_mDif_M_SA=as.data.frame(cbind(rel_fit_males_M_SA,D_data_m_SA$stder_BM_focal))
names(data_mDif_M_SA)[1] <- "rel_fit_males"
names(data_mDif_M_SA)[2] <- "stder_BM_focal"
boot_BW_males_arena_small = boot(data_mDif_M_SA, mDif_BW_males, R = 10000)
# Females
# Group size
# Small group
D_data_f_SG=D_data_f[D_data_f$Gr_size=='SG',]
rel_fit_females_F_SG=D_data_f_SG$f_cMS/mean(D_data_f_SG$f_cMS,na.rm=T)
data_mDif_F_SG=as.data.frame(cbind(rel_fit_females_F_SG,D_data_f_SG$stder_BM_focal))
names(data_mDif_F_SG)[1] <- "rel_fit_females"
names(data_mDif_F_SG)[2] <- "stder_BM_focal"
boot_BW_females_group_size_small = boot(data_mDif_F_SG, mDif_BW_females, R = 10000)
# Large group
D_data_f_LG=D_data_f[D_data_f$Gr_size=='LG',]
rel_fit_females_F_LG=D_data_f_LG$f_cMS/mean(D_data_f_LG$f_cMS,na.rm=T)
data_mDif_F_LG=as.data.frame(cbind(rel_fit_females_F_LG,D_data_f_LG$stder_BM_focal))
names(data_mDif_F_LG)[1] <- "rel_fit_females"
names(data_mDif_F_LG)[2] <- "stder_BM_focal"
boot_BW_females_group_size_large = boot(data_mDif_F_LG, mDif_BW_females, R = 10000)
# Arena size
# Large Arena
D_data_f_LA=D_data_f[D_data_f$Arena=='Large',]
rel_fit_females_F_LA=D_data_f_LA$f_cMS/mean(D_data_f_LA$f_cMS,na.rm=T)
data_mDif_F_LA=as.data.frame(cbind(rel_fit_females_F_LA,D_data_f_LA$stder_BM_focal))
names(data_mDif_F_LA)[1] <- "rel_fit_females"
names(data_mDif_F_LA)[2] <- "stder_BM_focal"
boot_BW_females_arena_large = boot(data_mDif_F_LA, mDif_BW_females, R = 10000)
# Small Arena
D_data_f_SA=D_data_f[D_data_f$Arena=='Small',]
rel_fit_females_F_SA=D_data_f_SA$f_cMS/mean(D_data_f_SA$f_cMS,na.rm=T)
data_mDif_F_SA=as.data.frame(cbind(rel_fit_females_F_SA,D_data_f_SA$stder_BM_focal))
names(data_mDif_F_SA)[1] <- "rel_fit_females"
names(data_mDif_F_SA)[2] <- "stder_BM_focal"
boot_BW_females_arena_small = boot(data_mDif_F_SA, mDif_BW_females, R = 10000)
### Extract data and write results table ####
boot_data_BW_males <- as.data.frame(cbind("Male", "Body mass", "Combined", mean(boot_BW_males$t,na.rm=T), quantile(boot_BW_males$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_males$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_females <- as.data.frame(cbind("Female", "Body mass", "Combined", mean(boot_BW_females$t,na.rm=T), quantile(boot_BW_females$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_females$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_males_group_size_small <- as.data.frame(cbind("Male", "Body mass", "Small group size", mean(boot_BW_males_group_size_small$t,na.rm=T), quantile(boot_BW_males_group_size_small$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_males_group_size_small$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_females_group_size_small <- as.data.frame(cbind("Female", "Body mass", "Small group size", mean(boot_BW_females_group_size_small$t,na.rm=T), quantile(boot_BW_females_group_size_small$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_females_group_size_small$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_males_group_size_large <- as.data.frame(cbind("Male", "Body mass", "Large group size", mean(boot_BW_males_group_size_large$t,na.rm=T), quantile(boot_BW_males_group_size_large$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_males_group_size_large$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_females_group_size_large <- as.data.frame(cbind("Female", "Body mass", "Large group size", mean(boot_BW_females_group_size_large$t,na.rm=T), quantile(boot_BW_females_group_size_large$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_females_group_size_large$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_males_arena_small <- as.data.frame(cbind("Male", "Body mass", "Small arena size", mean(boot_BW_males_arena_small$t,na.rm=T), quantile(boot_BW_males_arena_small$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_males_arena_small$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_females_arena_small <- as.data.frame(cbind("Female", "Body mass", "Small arena size", mean(boot_BW_females_arena_small$t,na.rm=T), quantile(boot_BW_females_arena_small$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_females_arena_small$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_males_arena_large <- as.data.frame(cbind("Male", "Body mass", "Large arena size", mean(boot_BW_males_arena_large$t,na.rm=T), quantile(boot_BW_males_arena_large$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_males_arena_large$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_females_arena_large <- as.data.frame(cbind("Female", "Body mass", "Large arena size", mean(boot_BW_females_arena_large$t,na.rm=T), quantile(boot_BW_females_arena_large$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_females_arena_large$t,.975, names = FALSE,na.rm=T)))
mDifBoot_Table <- as.table(as.matrix(rbind(boot_data_BW_males,boot_data_BW_females,boot_data_BW_males_group_size_small,boot_data_BW_females_group_size_small,
                                           boot_data_BW_males_group_size_large,boot_data_BW_females_group_size_large,
                                           boot_data_BW_males_arena_small,boot_data_BW_females_arena_small,
                                           boot_data_BW_males_arena_large,boot_data_BW_females_arena_large)))
is.table(mDifBoot_Table)
colnames(mDifBoot_Table)[1] <- "Sex"
colnames(mDifBoot_Table)[2] <- "Trait"
colnames(mDifBoot_Table)[3] <- "Treatment"
colnames(mDifBoot_Table)[4] <- "Coefficient"
colnames(mDifBoot_Table)[5] <- "l95_CI"
colnames(mDifBoot_Table)[6] <- "u95_CI"
mDifBoot_Table=as.data.frame.matrix(mDifBoot_Table)
mDifBoot_Table$Sex <- as.factor(as.character(mDifBoot_Table$Sex))
mDifBoot_Table$Trait <- as.factor(as.character(mDifBoot_Table$Trait))
mDifBoot_Table$Treatment <- as.factor(as.character(mDifBoot_Table$Treatment))
mDifBoot_Table$Coefficient <- round(as.numeric(as.character(mDifBoot_Table$Coefficient)),digits=2)
mDifBoot_Table$l95_CI <- round(as.numeric(as.character(mDifBoot_Table$l95_CI)),digits=2)
mDifBoot_Table$u95_CI <- round(as.numeric(as.character(mDifBoot_Table$u95_CI)),digits=2)Here, we bootstrapped the selection differential on body mass.
## Bootstrap selection differential on body mass ####
# Across treatments 
# Males
# Calculate relative fitness
rel_fit_males=D_data_m$m_RS/mean(D_data_m$m_RS,na.rm=T)
selDif_BW_males = function(dataFrame, indexVector) {
  # Calculate selection differential
  s = cov(dataFrame[indexVector, match("stder_BM_focal",names(dataFrame))],dataFrame[indexVector, match("rel_fit_males",names(dataFrame))],use="complete.obs",method = "pearson")
  return(s)
}
data_selDif=as.data.frame(cbind(rel_fit_males,D_data_m$stder_BM_focal))
names(data_selDif)[1] <- "rel_fit_males"
names(data_selDif)[2] <- "stder_BM_focal"
boot_BW_males = boot(data_selDif, selDif_BW_males, R = 10000)
# Females
# Calculate relative fitness
rel_fit_females=D_data_f$f_RS/mean(D_data_f$f_RS,na.rm=T)
selDif_BW_females = function(dataFrame, indexVector) { 
  # Calculate selection differential
  s = cov(dataFrame[indexVector, match("stder_BM_focal",names(dataFrame))],dataFrame[indexVector, match("rel_fit_females",names(dataFrame))],use="complete.obs",method = "pearson")
  return(s)
}
data_selDif_F=as.data.frame(cbind(rel_fit_females,D_data_f$stder_BM_focal))
names(data_selDif_F)[1] <- "rel_fit_females"
names(data_selDif_F)[2] <- "stder_BM_focal"
boot_BW_females = boot(data_selDif_F, selDif_BW_females, R = 10000)
# Selection differential for each density treatment
# Males
# Group size
# Small group
D_data_m_SG=D_data_m[D_data_m$Gr_size=='SG',]
rel_fit_males_M_SG=D_data_m_SG$m_RS/mean(D_data_m_SG$m_RS,na.rm=T)
data_selDif_M_SG=as.data.frame(cbind(rel_fit_males_M_SG,D_data_m_SG$stder_BM_focal))
names(data_selDif_M_SG)[1] <- "rel_fit_males"
names(data_selDif_M_SG)[2] <- "stder_BM_focal"
boot_BW_males_group_size_small = boot(data_selDif_M_SG, selDif_BW_males, R = 10000)
# Large group
D_data_m_LG=D_data_m[D_data_m$Gr_size=='LG',]
rel_fit_males_M_LG=D_data_m_LG$m_RS/mean(D_data_m_LG$m_RS,na.rm=T)
data_selDif_M_LG=as.data.frame(cbind(rel_fit_males_M_LG,D_data_m_LG$stder_BM_focal))
names(data_selDif_M_LG)[1] <- "rel_fit_males"
names(data_selDif_M_LG)[2] <- "stder_BM_focal"
boot_BW_males_group_size_large = boot(data_selDif_M_LG, selDif_BW_males, R = 10000)
# Arena size
# Large Arena
D_data_m_LA=D_data_m[D_data_m$Arena=='Large',]
rel_fit_males_M_LA=D_data_m_LA$m_RS/mean(D_data_m_LA$m_RS,na.rm=T)
data_selDif_M_LA=as.data.frame(cbind(rel_fit_males_M_LA,D_data_m_LA$stder_BM_focal))
names(data_selDif_M_LA)[1] <- "rel_fit_males"
names(data_selDif_M_LA)[2] <- "stder_BM_focal"
boot_BW_males_arena_large = boot(data_selDif_M_LA, selDif_BW_males, R = 10000)
# Small Arena
D_data_m_SA=D_data_m[D_data_m$Arena=='Small',]
rel_fit_males_M_SA=D_data_m_SA$m_RS/mean(D_data_m_SA$m_RS,na.rm=T)
data_selDif_M_SA=as.data.frame(cbind(rel_fit_males_M_SA,D_data_m_SA$stder_BM_focal))
names(data_selDif_M_SA)[1] <- "rel_fit_males"
names(data_selDif_M_SA)[2] <- "stder_BM_focal"
boot_BW_males_arena_small = boot(data_selDif_M_SA, selDif_BW_males, R = 10000)
# Females
# Group size
# Small group
D_data_f_SG=D_data_f[D_data_f$Gr_size=='SG',]
rel_fit_females_F_SG=D_data_f_SG$f_RS/mean(D_data_f_SG$f_RS,na.rm=T)
data_selDif_F_SG=as.data.frame(cbind(rel_fit_females_F_SG,D_data_f_SG$stder_BM_focal))
names(data_selDif_F_SG)[1] <- "rel_fit_females"
names(data_selDif_F_SG)[2] <- "stder_BM_focal"
boot_BW_females_group_size_small = boot(data_selDif_F_SG, selDif_BW_females, R = 10000)
# Large group
D_data_f_LG=D_data_f[D_data_f$Gr_size=='LG',]
rel_fit_females_F_LG=D_data_f_LG$f_RS/mean(D_data_f_LG$f_RS,na.rm=T)
data_selDif_F_LG=as.data.frame(cbind(rel_fit_females_F_LG,D_data_f_LG$stder_BM_focal))
names(data_selDif_F_LG)[1] <- "rel_fit_females"
names(data_selDif_F_LG)[2] <- "stder_BM_focal"
boot_BW_females_group_size_large = boot(data_selDif_F_LG, selDif_BW_females, R = 10000)
# Arena size
# Large Arena
D_data_f_LA=D_data_f[D_data_f$Arena=='Large',]
rel_fit_females_F_LA=D_data_f_LA$f_RS/mean(D_data_f_LA$f_RS,na.rm=T)
data_selDif_F_LA=as.data.frame(cbind(rel_fit_females_F_LA,D_data_f_LA$stder_BM_focal))
names(data_selDif_F_LA)[1] <- "rel_fit_females"
names(data_selDif_F_LA)[2] <- "stder_BM_focal"
boot_BW_females_arena_large = boot(data_selDif_F_LA, selDif_BW_females, R = 10000)
# Small Arena
D_data_f_SA=D_data_f[D_data_f$Arena=='Small',]
rel_fit_females_F_SA=D_data_f_SA$f_RS/mean(D_data_f_SA$f_RS,na.rm=T)
data_selDif_F_SA=as.data.frame(cbind(rel_fit_females_F_SA,D_data_f_SA$stder_BM_focal))
names(data_selDif_F_SA)[1] <- "rel_fit_females"
names(data_selDif_F_SA)[2] <- "stder_BM_focal"
boot_BW_females_arena_small = boot(data_selDif_F_SA, selDif_BW_females, R = 10000)
### Extract data and write results table ####
boot_data_BW_males <- as.data.frame(cbind("Male", "Body mass", "Combined", mean(boot_BW_males$t,na.rm=T), quantile(boot_BW_males$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_males$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_females <- as.data.frame(cbind("Female", "Body mass", "Combined", mean(boot_BW_females$t,na.rm=T), quantile(boot_BW_females$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_females$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_males_group_size_small <- as.data.frame(cbind("Male", "Body mass", "Small group size", mean(boot_BW_males_group_size_small$t,na.rm=T), quantile(boot_BW_males_group_size_small$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_males_group_size_small$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_females_group_size_small <- as.data.frame(cbind("Female", "Body mass", "Small group size", mean(boot_BW_females_group_size_small$t,na.rm=T), quantile(boot_BW_females_group_size_small$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_females_group_size_small$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_males_group_size_large <- as.data.frame(cbind("Male", "Body mass", "large group size", mean(boot_BW_males_group_size_large$t,na.rm=T), quantile(boot_BW_males_group_size_large$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_males_group_size_large$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_females_group_size_large <- as.data.frame(cbind("Female", "Body mass", "large group size", mean(boot_BW_females_group_size_large$t,na.rm=T), quantile(boot_BW_females_group_size_large$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_females_group_size_large$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_males_arena_small <- as.data.frame(cbind("Male", "Body mass", "Small arena size", mean(boot_BW_males_arena_small$t,na.rm=T), quantile(boot_BW_males_arena_small$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_males_arena_small$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_females_arena_small <- as.data.frame(cbind("Female", "Body mass", "Small arena size", mean(boot_BW_females_arena_small$t,na.rm=T), quantile(boot_BW_females_arena_small$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_females_arena_small$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_males_arena_large <- as.data.frame(cbind("Male", "Body mass", "large arena size", mean(boot_BW_males_arena_large$t,na.rm=T), quantile(boot_BW_males_arena_large$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_males_arena_large$t,.975, names = FALSE,na.rm=T)))
boot_data_BW_females_arena_large <- as.data.frame(cbind("Female", "Body mass", "large arena size", mean(boot_BW_females_arena_large$t,na.rm=T), quantile(boot_BW_females_arena_large$t,.025, names = FALSE,na.rm=T), quantile(boot_BW_females_arena_large$t,.975, names = FALSE,na.rm=T)))
SelDifBoot_Table <- as.table(as.matrix(rbind(boot_data_BW_males,boot_data_BW_females,boot_data_BW_males_group_size_small,boot_data_BW_females_group_size_small,
                                             boot_data_BW_males_group_size_large,boot_data_BW_females_group_size_large,
                                             boot_data_BW_males_arena_small,boot_data_BW_females_arena_small,
                                             boot_data_BW_males_arena_large,boot_data_BW_females_arena_large)))
is.table(SelDifBoot_Table)
colnames(SelDifBoot_Table)[1] <- "Sex"
colnames(SelDifBoot_Table)[2] <- "Trait"
colnames(SelDifBoot_Table)[3] <- "Treatment"
colnames(SelDifBoot_Table)[4] <- "Coefficient"
colnames(SelDifBoot_Table)[5] <- "l95_CI"
colnames(SelDifBoot_Table)[6] <- "u95_CI"
SelDifBoot_Table=as.data.frame.matrix(SelDifBoot_Table)
SelDifBoot_Table$Sex <- as.factor(as.character(SelDifBoot_Table$Sex))
SelDifBoot_Table$Trait <- as.factor(as.character(SelDifBoot_Table$Trait))
SelDifBoot_Table$Treatment <- as.factor(as.character(SelDifBoot_Table$Treatment))
SelDifBoot_Table$Coefficient <- round(as.numeric(as.character(SelDifBoot_Table$Coefficient)),digits=2)
SelDifBoot_Table$l95_CI <- round(as.numeric(as.character(SelDifBoot_Table$l95_CI)),digits=2)
SelDifBoot_Table$u95_CI <- round(as.numeric(as.character(SelDifBoot_Table$u95_CI)),digits=2)Table_2.1 <- as.data.frame(as.matrix(rbind(PhenVarBoot_Table_Female_Small_pop_I,PhenVarBoot_Table_Female_Large_pop_I,
                                                      PhenVarBoot_Table_Female_Small_pop_Is,PhenVarBoot_Table_Female_Large_pop_Is,
                                                      PhenVarBoot_Table_Female_Small_pop_B,PhenVarBoot_Table_Female_Large_pop_B,
                                                      PhenVarBoot_Table_Female_Small_pop_S,PhenVarBoot_Table_Female_Large_pop_S,
                                                      boot_data_BW_females_group_size_small,boot_data_BW_females_group_size_large,
                                                      boot_data_BW_females_group_size_small,boot_data_BW_females_group_size_large,
                                                      PhenVarBoot_Table_Male_Small_pop_I,PhenVarBoot_Table_Male_Large_pop_I,
                                                      PhenVarBoot_Table_Male_Small_pop_Is,PhenVarBoot_Table_Male_Large_pop_Is,
                                                      PhenVarBoot_Table_Male_Small_pop_B,PhenVarBoot_Table_Male_Large_pop_B,
                                                      PhenVarBoot_Table_Male_Small_pop_S,PhenVarBoot_Table_Male_Large_pop_S,
                                                      boot_data_BW_males_group_size_small,boot_data_BW_males_group_size_large,
                                                    boot_data_BW_males_group_size_small,boot_data_BW_males_group_size_large)),digits=2)
colnames(Table_2.1)[1] <- "Sex"
colnames(Table_2.1)[2] <- "Trait"
colnames(Table_2.1)[3] <- "Treatment"
colnames(Table_2.1)[4] <- "Coefficient"
colnames(Table_2.1)[5] <- "l95_CI"
colnames(Table_2.1)[6] <- "u95_CI"
Table_2.1=as.data.frame.matrix(Table_2.1)
Table_2.1$Sex <- as.factor(as.character(Table_2.1$Sex))
Table_2.1$Trait <- as.factor(as.character(Table_2.1$Trait))
Table_2.1$Treatment <- as.factor(as.character(Table_2.1$Treatment))
Table_2.1$Coefficient <- round(as.numeric(as.character(Table_2.1$Coefficient)),digits=2)
Table_2.1$l95_CI <- round(as.numeric(as.character(Table_2.1$l95_CI)),digits=2)
Table_2.1$u95_CI <- round(as.numeric(as.character(Table_2.1$u95_CI)),digits=2)
Table_2.2 <- as.data.frame(as.matrix(rbind(PhenVarBoot_Table_Female_Small_arena_I,PhenVarBoot_Table_Female_Large_arena_I,
                                                      PhenVarBoot_Table_Female_Small_arena_Is,PhenVarBoot_Table_Female_Large_arena_Is,
                                                      PhenVarBoot_Table_Female_Small_arena_B,PhenVarBoot_Table_Female_Large_arena_B,
                                                      PhenVarBoot_Table_Female_Small_arena_S,PhenVarBoot_Table_Female_Large_arena_S,
                                                      boot_data_BW_females_group_size_small,boot_data_BW_females_group_size_large,
                                                      boot_data_BW_females_group_size_small,boot_data_BW_females_group_size_large,
                                                      PhenVarBoot_Table_Male_Small_arena_I,PhenVarBoot_Table_Male_Large_arena_I,
                                                      PhenVarBoot_Table_Male_Small_arena_Is,PhenVarBoot_Table_Male_Large_arena_Is,
                                                      PhenVarBoot_Table_Male_Small_arena_B,PhenVarBoot_Table_Male_Large_arena_B,
                                                      PhenVarBoot_Table_Male_Small_arena_S,PhenVarBoot_Table_Male_Large_arena_S,
                                                      boot_data_BW_males_group_size_small,boot_data_BW_males_group_size_large,
                                                    boot_data_BW_males_group_size_small,boot_data_BW_males_group_size_large)),digits=2)
colnames(Table_2.2)[1] <- "Sex"
colnames(Table_2.2)[2] <- "Trait"
colnames(Table_2.2)[3] <- "Treatment"
colnames(Table_2.2)[4] <- "Coefficient"
colnames(Table_2.2)[5] <- "l95_CI"
colnames(Table_2.2)[6] <- "u95_CI"
Table_2.2=as.data.frame.matrix(Table_2.2)
Table_2.2$Sex <- as.factor(as.character(Table_2.2$Sex))
Table_2.2$Trait <- as.factor(as.character(Table_2.2$Trait))
Table_2.2$Treatment <- as.factor(as.character(Table_2.2$Treatment))
Table_2.2$Coefficient <- round(as.numeric(as.character(Table_2.2$Coefficient)),digits=2)
Table_2.2$l95_CI <- round(as.numeric(as.character(Table_2.2$l95_CI)),digits=2)
Table_2.2$u95_CI <- round(as.numeric(as.character(Table_2.2$u95_CI)),digits=2)Table S5.1: Coefficients of variation (CV) in mating behavior for group size treatments estimated for males and females with mean and 95%CI estimated via bootstrapping.
kable(Table_2.1)| Sex | Trait | Treatment | Coefficient | l95_CI | u95_CI | 
|---|---|---|---|---|---|
| Female | Small population size | Opportunity for selection | 0.95 | 0.77 | 1.14 | 
| Female | Large population size | Opportunity for selection | 0.92 | 0.78 | 1.05 | 
| Female | Small population size | Opportunity for sexual selection | 0.26 | 0.18 | 0.35 | 
| Female | Large population size | Opportunity for sexual selection | 0.60 | 0.39 | 0.85 | 
| Female | Small population size | Bateman gradient | 0.57 | 0.11 | 1.00 | 
| Female | Large population size | Bateman gradient | 0.86 | 0.68 | 1.07 | 
| Female | Small population size | Jones index | 0.29 | 0.05 | 0.51 | 
| Female | Large population size | Jones index | 0.66 | 0.51 | 0.79 | 
| Female | Body mass | Small group size | 0.17 | -0.07 | 0.42 | 
| Female | Body mass | large group size | 0.41 | 0.15 | 0.67 | 
| Female | Body mass | Small group size | 0.17 | -0.07 | 0.42 | 
| Female | Body mass | large group size | 0.41 | 0.15 | 0.67 | 
| Male | Small population size | Opportunity for selection | 0.91 | 0.49 | 1.45 | 
| Male | Large population size | Opportunity for selection | 0.90 | 0.66 | 1.16 | 
| Male | Small population size | Opportunity for sexual selection | 0.22 | 0.14 | 0.31 | 
| Male | Large population size | Opportunity for sexual selection | 0.39 | 0.24 | 0.56 | 
| Male | Small population size | Bateman gradient | 1.12 | 0.63 | 1.66 | 
| Male | Large population size | Bateman gradient | 0.56 | 0.17 | 0.90 | 
| Male | Small population size | Jones index | 0.52 | 0.27 | 0.79 | 
| Male | Large population size | Jones index | 0.35 | 0.10 | 0.57 | 
| Male | Body mass | Small group size | -0.04 | -0.25 | 0.18 | 
| Male | Body mass | large group size | 0.14 | -0.10 | 0.38 | 
| Male | Body mass | Small group size | -0.04 | -0.25 | 0.18 | 
| Male | Body mass | large group size | 0.14 | -0.10 | 0.38 | 
Table S5.2: Coefficients of variation (CV) in mating behavior for arena size treatments estimated for males and females with mean and 95%CI estimated via bootstrapping.
kable(Table_2.2)| Sex | Trait | Treatment | Coefficient | l95_CI | u95_CI | 
|---|---|---|---|---|---|
| Female | Small arena size | Opportunity for selection | 1.01 | 0.82 | 1.20 | 
| Female | Large arena size | Opportunity for selection | 0.87 | 0.73 | 1.01 | 
| Female | Small arena size | Opportunity for sexual selection | 0.49 | 0.32 | 0.70 | 
| Female | Large arena size | Opportunity for sexual selection | 0.34 | 0.21 | 0.50 | 
| Female | Small arena size | Bateman gradient | 0.66 | 0.37 | 0.95 | 
| Female | Large arena size | Bateman gradient | 0.90 | 0.63 | 1.18 | 
| Female | Small arena size | Jones index | 0.46 | 0.25 | 0.65 | 
| Female | Large arena size | Jones index | 0.52 | 0.34 | 0.67 | 
| Female | Body mass | Small group size | 0.17 | -0.07 | 0.42 | 
| Female | Body mass | large group size | 0.41 | 0.15 | 0.67 | 
| Female | Body mass | Small group size | 0.17 | -0.07 | 0.42 | 
| Female | Body mass | large group size | 0.41 | 0.15 | 0.67 | 
| Male | Small arena size | Opportunity for selection | 1.03 | 0.62 | 1.54 | 
| Male | Large arena size | Opportunity for selection | 0.78 | 0.55 | 1.07 | 
| Male | Small arena size | Opportunity for sexual selection | 0.25 | 0.15 | 0.37 | 
| Male | Large arena size | Opportunity for sexual selection | 0.36 | 0.22 | 0.54 | 
| Male | Small arena size | Bateman gradient | 1.17 | 0.77 | 1.65 | 
| Male | Large arena size | Bateman gradient | 0.47 | 0.03 | 0.84 | 
| Male | Small arena size | Jones index | 0.58 | 0.36 | 0.82 | 
| Male | Large arena size | Jones index | 0.28 | 0.02 | 0.54 | 
| Male | Body mass | Small group size | -0.04 | -0.25 | 0.18 | 
| Male | Body mass | large group size | 0.14 | -0.10 | 0.38 | 
| Male | Body mass | Small group size | -0.04 | -0.25 | 0.18 | 
| Male | Body mass | large group size | 0.14 | -0.10 | 0.38 | 
We plotted all (sexual) selection metrics by treatment and sex.
## Plot: (sexual) selection metrics (Figure 2) ####
### Plot: Opportunity for selection ####
# Reorder data
plot_I_data_1=Table_BatemanMetrics[c(1,3,17,19),c(1,2,4,5,6)]
names(plot_I_data_1)[3] <- "Variance_low"
names(plot_I_data_1)[4] <- "lCI_low"
names(plot_I_data_1)[5] <- "uCI_low"
plot_I_data_2=Table_BatemanMetrics[c(2,4,18,20),c(4,5,6)]
names(plot_I_data_2)[1] <- "Variance_high"
names(plot_I_data_2)[2] <- "lCI_high"
names(plot_I_data_2)[3] <- "uCI_high"
plot_I_data=cbind(plot_I_data_1,plot_I_data_2)
plot_I_data[c(1,3),2]='Group size'
plot_I_data[c(2,4),2]='Arena size'
p16=ggplot(plot_I_data, aes(x=Variance_low, y=Variance_high, color=Sex, shape=Treatment)) +geom_abline(intercept = 0, slope = 1,size=1,linetype=2) +
  annotate(geom = "polygon", x = c(Inf, -Inf, -Inf), y = c(Inf, -Inf, Inf), fill = "grey", alpha = 0.2 )+
  geom_point(size = 5,alpha=1)+
  geom_errorbar(alpha=0.5,size=1.1,width=0, orientation='y',aes(xmin=lCI_low, xmax=uCI_low),show.legend=FALSE) +geom_errorbar(alpha=0.5,size=1.1,width=0, orientation='x', aes(ymin=lCI_high, ymax=uCI_high),show.legend=FALSE)+
  ylab(expression(paste('High density ',~italic("I"))))+labs(tag = "A")+xlab(expression(paste('Low density ',~italic("I"))))+
  scale_shape_manual(values=c(15, 19))+
  scale_color_manual(values=colpal2)+
  guides(shape = guide_legend(override.aes = list(size = 3.5)))+
  xlim(0.5,1.5)+ylim(0.5,1.5)+
   guides(shape = guide_legend(override.aes = list(size = 5)))+
  theme(panel.border = element_blank(),
        plot.title = element_text(hjust = 0.5),
        panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        plot.tag.position=c(0.01,0.98),
        legend.position = c(0.8, 0.25),
        legend.spacing.y = unit(0.1, 'cm'),
        legend.key=element_blank(),
        legend.title = element_blank(),
        legend.margin = margin(0,0,0,0, unit="cm"),
        legend.text = element_text(colour="black", size=11),
        axis.line.x = element_line(colour = "black", size = 1),
        axis.line.y = element_line(colour = "black", size = 1),
        axis.text.x = element_text(face="plain", color="black", size=16, angle=0),
        axis.text.y = element_text(face="plain", color="black", size=16, angle=0),
        axis.title.x = element_text(size=16,face="plain", margin = margin(r=0,10,0,0)),
        axis.title.y = element_text(size=16,face="plain", margin = margin(r=10,0,0,0)),
        axis.ticks = element_line(size = 1),
        axis.ticks.length = unit(.3, "cm"),
        plot.margin = unit(c(0.5,0.2,0,0.2), "cm"))+guides(line = "none")
### Plot: Opportunity for sexual selection ####
# Reorder data
plot_Is_data_1=Table_BatemanMetrics[c(5,7,21,23),c(1,2,4,5,6)]
names(plot_Is_data_1)[3] <- "Variance_low"
names(plot_Is_data_1)[4] <- "lCI_low"
names(plot_Is_data_1)[5] <- "uCI_low"
plot_Is_data_2=Table_BatemanMetrics[c(6,8,22,24),c(4,5,6)]
names(plot_Is_data_2)[1] <- "Variance_high"
names(plot_Is_data_2)[2] <- "lCI_high"
names(plot_Is_data_2)[3] <- "uCI_high"
plot_Is_data=cbind(plot_Is_data_1,plot_Is_data_2)
plot_Is_data[c(1,3),2]='Group size'
plot_Is_data[c(2,4),2]='Arena size'
p17=ggplot(plot_Is_data, aes(x=Variance_low, y=Variance_high, color=Sex, shape=Treatment)) +  geom_abline(intercept = 0, slope = 1,size=1,linetype=2) +
  annotate(geom = "polygon", x = c(Inf, -Inf, -Inf), y = c(Inf, -Inf, Inf), fill = "grey", alpha = 0.2 )+
  geom_point(alpha=1,size = 5)+
  geom_errorbar(alpha=0.5,size=1.1,width=0, orientation='y',aes(xmin=lCI_low, xmax=uCI_low)) +geom_errorbar(alpha=0.5,size=1.1,width=0, orientation='x', aes(ymin=lCI_high, ymax=uCI_high))+
  ylab(expression(paste('High density ',~italic("I"['s']))))+labs(tag = "B")+xlab(expression(paste('Low density ',~italic("I"['s']))))+
  scale_shape_manual(values=c(15, 19))+
  scale_color_manual(values=colpal2)+
  guides(shape = guide_legend(override.aes = list(size = 3.5)))+
  xlim(0.1,0.87)+ylim(0.1,0.87)+
  theme(panel.border = element_blank(),
        plot.title = element_text(hjust = 0.5),
        panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        plot.tag.position=c(0.01,0.98),
        legend.position =  'none',
        legend.spacing.y = unit(0, 'cm'),
        legend.key=element_blank(),
        legend.title = element_blank(),
        legend.margin = margin(0,0,0,0, unit="cm"),
        legend.text = element_text(colour="black", size=10),
        legend.key.size = unit(.2, "cm"),
        axis.line.x = element_line(colour = "black", size = 1),
        axis.line.y = element_line(colour = "black", size = 1),
        axis.text.x = element_text(face="plain", color="black", size=16, angle=0),
        axis.text.y = element_text(face="plain", color="black", size=16, angle=0),
        axis.title.x = element_text(size=16,face="plain", margin = margin(r=0,10,0,0)),
        axis.title.y = element_text(size=16,face="plain", margin = margin(r=10,0,0,0)),
        axis.ticks = element_line(size = 1),
        axis.ticks.length = unit(.3, "cm"),
        plot.margin = unit(c(0.5,0.2,0,0.2), "cm"))
### Plot: Sexual selection gradient ####
# Reorder data
plot_B_data_1=Table_BatemanMetrics[c(9,11,25,27),c(1,2,4,5,6)]
names(plot_B_data_1)[3] <- "Variance_low"
names(plot_B_data_1)[4] <- "lCI_low"
names(plot_B_data_1)[5] <- "uCI_low"
plot_B_data_2=Table_BatemanMetrics[c(10,12,26,28),c(4,5,6)]
names(plot_B_data_2)[1] <- "Variance_high"
names(plot_B_data_2)[2] <- "lCI_high"
names(plot_B_data_2)[3] <- "uCI_high"
plot_B_data=cbind(plot_B_data_1,plot_B_data_2)
plot_B_data[c(1,3),2]='Group size'
plot_B_data[c(2,4),2]='Arena size'
p18=ggplot(plot_B_data, aes(x=Variance_low, y=Variance_high, color=Sex, shape=Treatment)) +geom_abline(intercept = 0, slope = 1,size=1,linetype=2) +
  annotate(geom = "polygon", x = c(Inf, -Inf, -Inf), y = c(Inf, -Inf, Inf), fill = "grey", alpha = 0.2 )+
  geom_point(alpha=1,size = 5)+ 
  geom_errorbar(alpha=0.5,size=1.1,width=0, orientation='y',aes(xmin=lCI_low, xmax=uCI_low)) +geom_errorbar(alpha=0.5,size=1.1,width=0, orientation='x', aes(ymin=lCI_high, ymax=uCI_high))+
  ylab(expression(paste('High density ',~italic(symbol("b")['ss']))))+labs(tag = "C")+xlab(expression(paste('Low density ',~italic(symbol("b")['ss']))))+
  scale_shape_manual(values=c(15, 19))+
  scale_color_manual(values=colpal2)+
  guides(shape = guide_legend(override.aes = list(size = 3.5)))+
  xlim(0,1.7)+ylim(0,1.7)+
  theme(panel.border = element_blank(),
        plot.title = element_text(hjust = 0.5),
        panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        plot.tag.position=c(0.01,0.98),
        legend.position =  'none',
        legend.spacing.y = unit(0, 'cm'),
        legend.key=element_blank(),
        legend.title = element_blank(),
        legend.margin = margin(0,0,0,0, unit="cm"),
        legend.text = element_text(colour="black", size=10),
        legend.key.size = unit(.2, "cm"),
        axis.line.x = element_line(colour = "black", size = 1),
        axis.line.y = element_line(colour = "black", size = 1),
        axis.text.x = element_text(face="plain", color="black", size=16, angle=0),
        axis.text.y = element_text(face="plain", color="black", size=16, angle=0),
        axis.title.x = element_text(size=16,face="plain", margin = margin(r=0,10,0,0)),
        axis.title.y = element_text(size=16,face="plain", margin = margin(r=10,0,0,0)),
        axis.ticks = element_line(size = 1),
        axis.ticks.length = unit(.3, "cm"),
        plot.margin = unit(c(0.5,0.2,0,0.2), "cm"))
### Plot: Jones index ####
# Reorder data
plot_Smax_data_1=Table_BatemanMetrics[c(13,15,29,31),c(1,2,4,5,6)]
names(plot_Smax_data_1)[3] <- "Variance_low"
names(plot_Smax_data_1)[4] <- "lCI_low"
names(plot_Smax_data_1)[5] <- "uCI_low"
plot_Smax_data_2=Table_BatemanMetrics[c(14,16,30,32),c(4,5,6)]
names(plot_Smax_data_2)[1] <- "Variance_high"
names(plot_Smax_data_2)[2] <- "lCI_high"
names(plot_Smax_data_2)[3] <- "uCI_high"
plot_Smax_data=cbind(plot_Smax_data_1,plot_Smax_data_2)
plot_Smax_data[c(1,3),2]='Group size'
plot_Smax_data[c(2,4),2]='Arena size'
p19=ggplot(plot_Smax_data, aes(x=Variance_low, y=Variance_high, color=Sex, shape=Treatment)) + geom_abline(intercept = 0, slope = 1,size=1,linetype=2) +
  annotate(geom = "polygon", x = c(Inf, -Inf, -Inf), y = c(Inf, -Inf, Inf), fill = "grey", alpha = 0.2 )+
  geom_point(alpha=1,size = 5)+
  geom_errorbar(alpha=0.5,size=1.1,width=0, orientation='y',aes(xmin=lCI_low, xmax=uCI_low)) +geom_errorbar(alpha=0.5,size=1.1,width=0, orientation='x', aes(ymin=lCI_high, ymax=uCI_high))+
  ylab(expression(paste('High density ',~italic("s'"['max']))))+labs(tag = "D")+xlab(expression(paste('Low density ',~italic("s'"['max']))))+
  scale_shape_manual(values=c(15, 19))+
  scale_color_manual(values=colpal2)+
  guides(shape = guide_legend(override.aes = list(size = 3.5)))+
  xlim(0,0.84)+ylim(0,0.84)+
  theme(panel.border = element_blank(),
        plot.title = element_text(hjust = 0.5),
        panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        plot.tag.position=c(0.01,0.98),
        legend.position =  'none',
        legend.spacing.y = unit(0, 'cm'),
        legend.key=element_blank(),
        legend.title = element_blank(),
        legend.margin = margin(0,0,0,0, unit="cm"),
        legend.text = element_text(colour="black", size=10),
        legend.key.size = unit(.2, "cm"),
        axis.line.x = element_line(colour = "black", size = 1),
        axis.line.y = element_line(colour = "black", size = 1),
        axis.text.x = element_text(face="plain", color="black", size=16, angle=0),
        axis.text.y = element_text(face="plain", color="black", size=16, angle=0),
        axis.title.x = element_text(size=16,face="plain", margin = margin(r=0,10,0,0)),
        axis.title.y = element_text(size=16,face="plain", margin = margin(r=10,0,0,0)),
        axis.ticks = element_line(size = 1),
        axis.ticks.length = unit(.3, "cm"),
        plot.margin = unit(c(0.5,0.2,0,0.2), "cm"))
### Plot: Mating differential on body mass ####
# Reorder data
plot_mBM_data_1=mDifBoot_Table[c(3,4,9,10),c(1,3,4,5,6)]
names(plot_mBM_data_1)[3] <- "Variance_low"
names(plot_mBM_data_1)[4] <- "lCI_low"
names(plot_mBM_data_1)[5] <- "uCI_low"
plot_mBM_data_2=mDifBoot_Table[c(5,6,7,8),c(4,5,6)]
names(plot_mBM_data_2)[1] <- "Variance_high"
names(plot_mBM_data_2)[2] <- "lCI_high"
names(plot_mBM_data_2)[3] <- "uCI_high"
plot_mBM_data=cbind(plot_mBM_data_1,plot_mBM_data_2)
plot_mBM_data$Treatment=as.character(plot_mBM_data$Treatment)
plot_mBM_data[c(1,2),2]='Group size'
plot_mBM_data[c(3,4),2]='Arena size'
p20=ggplot(plot_mBM_data, aes(x=Variance_low, y=Variance_high, color=Sex, shape=Treatment)) + geom_abline(intercept = 0, slope = 1,size=1,linetype=2) +
  annotate(geom = "polygon", x = c(Inf, -Inf, -Inf), y = c(Inf, -Inf, Inf), fill = "grey", alpha = 0.2 )+
  geom_point(alpha=1,size = 5)+
  geom_errorbar(alpha=0.5,size=1.1,width=0, orientation='y',aes(xmin=lCI_low, xmax=uCI_low)) +geom_errorbar(alpha=0.5,size=1.1,width=0, orientation='x', aes(ymin=lCI_high, ymax=uCI_high))+
  ylab(expression(paste('High density ',~italic("m'"))))+labs(tag = "E")+xlab(expression(paste('Low density ',~italic("m'"))))+
  scale_shape_manual(values=c(15, 19))+
  scale_color_manual(values=colpal2)+
  guides(shape = guide_legend(override.aes = list(size = 3.5)))+
  xlim(-0.28,0.45)+ylim(-0.28,0.45)+
  theme(panel.border = element_blank(),
        plot.title = element_text(hjust = 0.5),
        panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        plot.tag.position=c(0.01,0.98),
        legend.position =  'none',
        legend.spacing.y = unit(0, 'cm'),
        legend.key=element_blank(),
        legend.title = element_blank(),
        legend.margin = margin(0,0,0,0, unit="cm"),
        legend.text = element_text(colour="black", size=10),
        legend.key.size = unit(.2, "cm"),
        axis.line.x = element_line(colour = "black", size = 1),
        axis.line.y = element_line(colour = "black", size = 1),
        axis.text.x = element_text(face="plain", color="black", size=16, angle=0),
        axis.text.y = element_text(face="plain", color="black", size=16, angle=0),
        axis.title.x = element_text(size=16,face="plain", margin = margin(r=0,10,0,0)),
        axis.title.y = element_text(size=16,face="plain", margin = margin(r=10,0,0,0)),
        axis.ticks = element_line(size = 1),
        axis.ticks.length = unit(.3, "cm"),
        plot.margin = unit(c(0.5,0.2,0,0.2), "cm"))
### Plot: Selection differential on body mass ####
# Reorder data
plot_sBM_data_1=SelDifBoot_Table[c(3,4,9,10),c(1,3,4,5,6)]
names(plot_sBM_data_1)[3] <- "Variance_low"
names(plot_sBM_data_1)[4] <- "lCI_low"
names(plot_sBM_data_1)[5] <- "uCI_low"
plot_sBM_data_2=SelDifBoot_Table[c(5,6,7,8),c(4,5,6)]
names(plot_sBM_data_2)[1] <- "Variance_high"
names(plot_sBM_data_2)[2] <- "lCI_high"
names(plot_sBM_data_2)[3] <- "uCI_high"
plot_sBM_data=cbind(plot_sBM_data_1,plot_sBM_data_2)
plot_sBM_data$Treatment=as.character(plot_sBM_data$Treatment)
plot_sBM_data[c(1,2),2]='Group size'
plot_sBM_data[c(3,4),2]='Arena size'
p21=ggplot(plot_sBM_data, aes(x=Variance_low, y=Variance_high, color=Sex, shape=Treatment)) + geom_abline(intercept = 0, slope = 1,size=1,linetype=2) +
  annotate(geom = "polygon", x = c(Inf, -Inf, -Inf), y = c(Inf, -Inf, Inf), fill = "grey", alpha = 0.2 )+
  geom_point(alpha=1,size = 5)+
  geom_errorbar(alpha=0.5,size=1.1,width=0, orientation='y',aes(xmin=lCI_low, xmax=uCI_low)) +geom_errorbar(alpha=0.5,size=1.1,width=0, orientation='x', aes(ymin=lCI_high, ymax=uCI_high))+
  ylab(expression(paste('High density ',~italic("s'"))))+labs(tag = "F")+xlab(expression(paste('Low density ',~italic("s'"))))+
  scale_shape_manual(values=c(15, 19))+
  scale_color_manual(values=colpal2)+
  guides(shape = guide_legend(override.aes = list(size = 3.5)))+
  xlim(-0.28,0.77)+ylim(-0.28,0.77)+
  theme(panel.border = element_blank(),
        plot.title = element_text(hjust = 0.5),
        panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        plot.tag.position=c(0.01,0.98),
        legend.position =  'none',
        legend.spacing.y = unit(0, 'cm'),
        legend.key=element_blank(),
        legend.title = element_blank(),
        legend.margin = margin(0,0,0,0, unit="cm"),
        legend.text = element_text(colour="black", size=10),
        legend.key.size = unit(.2, "cm"),
        axis.line.x = element_line(colour = "black", size = 1),
        axis.line.y = element_line(colour = "black", size = 1),
        axis.text.x = element_text(face="plain", color="black", size=16, angle=0),
        axis.text.y = element_text(face="plain", color="black", size=16, angle=0),
        axis.title.x = element_text(size=16,face="plain", margin = margin(r=0,10,0,0)),
        axis.title.y = element_text(size=16,face="plain", margin = margin(r=10,0,0,0)),
        axis.ticks = element_line(size = 1),
        axis.ticks.length = unit(.3, "cm"),
        plot.margin = unit(c(0.5,0.2,0,0.2), "cm"))# Figure 2
Figure_2<-grid.arrange(p16,p17,p18,p19,p20,p21, nrow = 3,ncol=2)
Figure 2: Selection metrics estimated for females (blue) and males (red) under density manipulated via group (point) or arena size (square). Opportunity for selection (I; A), opportunity for sexual selection (Is; B), Bateman gradient (βss; C), Jones index (s’max; D), mating differential on body mass (m’; E) and selection differential on body mass (s’; F) with mean and 95%CI estimated via bootstrapping. Dashed lines mark equal effect size for both densities. In grey area metrics were larger under high density treatments. The x-/y-distance of means from dashed line is equal to the effect size of the treatment.
Fig_2=plot_grid(Figure_2, ncol=1, rel_heights=c(0.1, 1)) # rel_heights values control title marginsIn the following we performed additional analyses on the sexual selection gradient.
GLM of sexual selection gradient for small population size treatment
bateman1=glm(rel_m_RS~rel_m_cMS,data=D_data_Small_pop) # Small population
summary(bateman1)
Call:
glm(formula = rel_m_RS ~ rel_m_cMS, data = D_data_Small_pop)
Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.26930  -0.56912  -0.00051   0.45026   2.19649  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -0.1311     0.2832  -0.463    0.646    
rel_m_cMS     1.1311     0.2567   4.407 6.64e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.6588378)
    Null deviance: 41.784  on 45  degrees of freedom
Residual deviance: 28.989  on 44  degrees of freedom
  (54 Beobachtungen als fehlend gelöscht)
AIC: 115.3
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for large population size treatment
bateman2=glm(rel_m_RS~rel_m_cMS,data=D_data_Large_pop) # Large population
summary(bateman2)
Call:
glm(formula = rel_m_RS ~ rel_m_cMS, data = D_data_Large_pop)
Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.74931  -0.71978  -0.06507   0.62329   2.29542  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)   0.4380     0.2225   1.969  0.05394 . 
rel_m_cMS     0.5620     0.1889   2.975  0.00432 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.8012483)
    Null deviance: 51.961  on 57  degrees of freedom
Residual deviance: 44.870  on 56  degrees of freedom
  (45 Beobachtungen als fehlend gelöscht)
AIC: 155.71
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for small population size treatment
bateman3=glm(rel_f_RS~rel_f_cMS,data=D_data_Small_pop) # Small population
summary(bateman3)
Call:
glm(formula = rel_f_RS ~ rel_f_cMS, data = D_data_Small_pop)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3281  -0.8177  -0.3007   0.7701   1.7421  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   0.4282     0.2862   1.496   0.1407  
rel_f_cMS     0.5718     0.2553   2.239   0.0294 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.902498)
    Null deviance: 51.456  on 53  degrees of freedom
Residual deviance: 46.930  on 52  degrees of freedom
  (46 Beobachtungen als fehlend gelöscht)
AIC: 151.67
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for large population size treatment
bateman4=glm(rel_f_RS~rel_f_cMS,data=D_data_Large_pop) # Large population
summary(bateman4)
Call:
glm(formula = rel_f_RS ~ rel_f_cMS, data = D_data_Large_pop)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.1558  -0.6221  -0.1433   0.6154   1.2999  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   0.1433     0.1727   0.830    0.411    
rel_f_cMS     0.8567     0.1366   6.273 1.46e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.5026109)
    Null deviance: 41.393  on 44  degrees of freedom
Residual deviance: 21.612  on 43  degrees of freedom
  (58 Beobachtungen als fehlend gelöscht)
AIC: 100.7
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for small arena size treatment
bateman5=glm(rel_m_RS~rel_m_cMS,data=D_data_Small_arena) # Small arena
summary(bateman5)
Call:
glm(formula = rel_m_RS ~ rel_m_cMS, data = D_data_Small_arena)
Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.27592  -0.55853   0.02679   0.42022   2.17266  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -0.1589     0.2688  -0.591    0.557    
rel_m_cMS     1.1589     0.2400   4.828  1.5e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.7161542)
    Null deviance: 50.353  on 48  degrees of freedom
Residual deviance: 33.659  on 47  degrees of freedom
  (48 Beobachtungen als fehlend gelöscht)
AIC: 126.65
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for large arena size treatment
bateman6=glm(rel_m_RS~rel_m_cMS,data=D_data_Large_arena) # Large arena
summary(bateman6)
Call:
glm(formula = rel_m_RS ~ rel_m_cMS, data = D_data_Large_arena)
Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.63427  -0.57493  -0.05739   0.62351   2.33207  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   0.5243     0.2235   2.346   0.0228 *
rel_m_cMS     0.4757     0.1914   2.486   0.0161 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.7332268)
    Null deviance: 43.393  on 54  degrees of freedom
Residual deviance: 38.861  on 53  degrees of freedom
  (51 Beobachtungen als fehlend gelöscht)
AIC: 142.98
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for small arena size treatment
bateman7=glm(rel_f_RS~rel_f_cMS,data=D_data_Small_arena) # Small arena
summary(bateman7)
Call:
glm(formula = rel_f_RS ~ rel_f_cMS, data = D_data_Small_arena)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3172  -0.7534  -0.3397   0.7993   1.7657  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   0.3397     0.2285   1.487 0.143910    
rel_f_cMS     0.6603     0.1870   3.531 0.000954 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.8267511)
    Null deviance: 48.338  on 47  degrees of freedom
Residual deviance: 38.031  on 46  degrees of freedom
  (49 Beobachtungen als fehlend gelöscht)
AIC: 131.04
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for large arena size treatment
bateman8=glm(rel_f_RS~rel_f_cMS,data=D_data_Large_arena) # Large arena
summary(bateman8)
Call:
glm(formula = rel_f_RS ~ rel_f_cMS, data = D_data_Large_arena)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.5149  -0.5734  -0.1026   0.5860   1.6460  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   0.1026     0.2209   0.465    0.644    
rel_f_cMS     0.8974     0.1911   4.696 2.17e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.6264297)
    Null deviance: 44.511  on 50  degrees of freedom
Residual deviance: 30.695  on 49  degrees of freedom
  (55 Beobachtungen als fehlend gelöscht)
AIC: 124.84
Number of Fisher Scoring iterations: 2
Here we analysed the sexual selection gradient across all treatments for males and females.
D_data$rel_f_cMS=NA
D_data$rel_f_cMS=D_data$f_cMS/mean(D_data$f_cMS,na.rm=T)
D_data$rel_f_RS=NA
D_data$rel_f_RS=D_data$f_RS/mean(D_data$f_RS,na.rm=T)
D_data$rel_m_cMS=NA
D_data$rel_m_cMS=D_data$m_cMS/mean(D_data$m_cMS,na.rm=T)
D_data$rel_m_RS=NA
D_data$rel_m_RS=D_data$m_RS/mean(D_data$m_RS,na.rm=T)Global sexual selection gradient of females:
bateman9=glm(rel_f_RS~rel_f_cMS+Body_mass_mg_focal,data=D_data)
summary(bateman9)
Call:
glm(formula = rel_f_RS ~ rel_f_cMS + Body_mass_mg_focal, data = D_data)
Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.58645  -0.65459  -0.07596   0.67662   1.84633  
Coefficients:
                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)         -1.0206     0.6960  -1.467   0.1458    
rel_f_cMS            0.7193     0.1320   5.451 3.88e-07 ***
Body_mass_mg_focal   0.5942     0.3259   1.823   0.0714 .  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.6816762)
    Null deviance: 93.444  on 98  degrees of freedom
Residual deviance: 65.441  on 96  degrees of freedom
  (104 Beobachtungen als fehlend gelöscht)
AIC: 247.97
Number of Fisher Scoring iterations: 2
Global sexual selection gradient of males:
bateman10=glm(rel_m_RS~rel_m_cMS+Body_mass_mg_focal,data=D_data)
summary(bateman10)
Call:
glm(formula = rel_m_RS ~ rel_m_cMS + Body_mass_mg_focal, data = D_data)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.9470  -0.6320  -0.1481   0.4719   3.9252  
Coefficients:
                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)         -0.6271     0.9108  -0.689    0.493    
rel_m_cMS            0.7368     0.1603   4.597 1.25e-05 ***
Body_mass_mg_focal   0.4585     0.4467   1.027    0.307    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.8262306)
    Null deviance: 100.985  on 103  degrees of freedom
Residual deviance:  83.449  on 101  degrees of freedom
  (99 Beobachtungen als fehlend gelöscht)
AIC: 280.24
Number of Fisher Scoring iterations: 2
Next, we tested if the steepness of the global sexual selection gradient differed between the sexes.
data_combined=D_data
data_combined$rel_RS=NA
data_combined$rel_RS[data_combined$Sex=='M']=data_combined$rel_m_RS[data_combined$Sex=='M']
data_combined$rel_RS[data_combined$Sex=='F']=data_combined$rel_f_RS[data_combined$Sex=='F']
data_combined$rel_cMS=NA
data_combined$rel_cMS[data_combined$Sex=='M']=data_combined$rel_m_cMS[data_combined$Sex=='M']
data_combined$rel_cMS[data_combined$Sex=='F']=data_combined$rel_f_cMS[data_combined$Sex=='F']Global sexual selection gradient with sex-interaction:
bateman11=glm(rel_RS~rel_cMS*Sex,data=data_combined)
summary(bateman11)
Call:
glm(formula = rel_RS ~ rel_cMS * Sex, data = data_combined)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.9987  -0.6759  -0.2175   0.6488   3.9222  
Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)   0.21754    0.16090   1.352    0.178    
rel_cMS       0.78246    0.13481   5.804 2.52e-08 ***
SexM          0.07145    0.23751   0.301    0.764    
rel_cMS:SexM -0.07145    0.20334  -0.351    0.726    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.7639526)
    Null deviance: 194.43  on 202  degrees of freedom
Residual deviance: 152.03  on 199  degrees of freedom
AIC: 527.39
Number of Fisher Scoring iterations: 2
Finally, we plotted the sexual selection gradient for each sex and treatment.
p22<-ggplot(D_data_Small_pop, aes(x=rel_m_cMS, y=rel_m_RS)) +
  geom_point(alpha=0.4,shape=16, size = 3,color=colpal2[2]) +
  geom_smooth(method=lm, se=TRUE,alpha=0.3) +
  theme(plot.tag.position=c(0.1,0.98))+
  labs(tag = "A")+xlab('Rel. mating success')+ylab("Rel. reproductive success")+ggtitle('Small group')+ theme(plot.title = element_text(hjust = 0.5))+
  theme(axis.text=element_text(size=13),
        axis.title=element_text(size=14))+ theme(legend.position="none")+
  ylim(0,4.2)+xlim(0,3.2)+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(), axis.line = element_line(colour = "black"))
p22=p22+geom_point(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],alpha=0.4,shape=16, size = 3)+
  geom_smooth(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],method=lm, se=TRUE,alpha=0.3)
p23<-ggplot(D_data_Large_pop, aes(x=rel_m_cMS, y=rel_m_RS)) +
  geom_point(alpha=0.4,shape=16, size = 3,color=colpal2[2]) +
  geom_smooth(method=lm, se=TRUE,alpha=0.3) +
  theme(plot.tag.position=c(0.1,0.98))+
  labs(tag = "B")+xlab('Rel. mating success')+ylab("Rel. reproductive success")+ggtitle('Large group')+ theme(plot.title = element_text(hjust = 0.5))+
  theme(axis.text=element_text(size=13),
        axis.title=element_text(size=14))+ theme(legend.position="none")+
  ylim(0,4.2)+xlim(0,3.2)+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(), axis.line = element_line(colour = "black"))
p23=p23+geom_point(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],alpha=0.4,shape=16, size = 3)+
  geom_smooth(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],method=lm, se=TRUE,alpha=0.3)
p24<-ggplot(D_data_Large_arena, aes(x=rel_m_cMS, y=rel_m_RS)) +
  geom_point(alpha=0.4,shape=16, size = 3,color=colpal2[2]) +
  geom_smooth(method=lm, se=TRUE,alpha=0.3) +
  theme(plot.tag.position=c(0.1,0.98))+
  labs(tag = "C")+xlab('Rel. mating success')+ylab("Rel. reproductive success")+ggtitle('Large arena')+ theme(plot.title = element_text(hjust = 0.5))+
  theme(axis.text=element_text(size=13),
        axis.title=element_text(size=14))+ theme(legend.position="none")+
  ylim(0,4.2)+xlim(0,3.2)+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(), axis.line = element_line(colour = "black"))
p24=p24+geom_point(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],alpha=0.4,shape=16, size = 3)+
  geom_smooth(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],method=lm, se=TRUE,alpha=0.3)
p25<-ggplot(D_data_Small_arena, aes(x=rel_m_cMS, y=rel_m_RS)) +
  geom_point(alpha=0.4,shape=16, size = 3,color=colpal2[2]) +
  geom_smooth(method=lm, se=TRUE,alpha=0.3) +
  theme(plot.tag.position=c(0.1,0.98))+
  labs(tag = "D")+xlab('Rel. mating success')+ylab("Rel. reproductive success")+ggtitle('Small arena')+ theme(plot.title = element_text(hjust = 0.5))+
  theme(axis.text=element_text(size=13),
        axis.title=element_text(size=14))+
  ylim(0,4.2)+xlim(0,3.2)+
  theme(legend.position="none")+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(), axis.line = element_line(colour = "black"))
p25=p25+geom_point(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],alpha=0.4,shape=16, size = 3)+
  geom_smooth(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],method=lm, se=TRUE,alpha=0.3)
# Create legend
p26<-ggplot(D_data, aes(x=Total_N_MTP1, y=Total_N_Rd, color=Sex)) +
  geom_point(alpha=0.4,shape=16, size = 3, position=position_jitterdodge(jitter.height=0,jitter.width=0,dodge.width = 0)) +
  geom_smooth(method=lm, se=TRUE,alpha=0.3) +
  scale_color_manual(values=c(colpal2[1],colpal2[2]),name = "Sex", labels = c('Females','Males'))+
  xlab('Rel. mating success')+ylab("Rel. reproductive success")+
  guides(color=guide_legend(override.aes=list(fill=NA)))+
  theme(legend.key = element_rect(fill = "transparent"))
legend_Figure_S5 <- get_legend(p26)Figure_S5<-grid.arrange(p22,p23,legend_Figure_S5,p24,p25,legend_Figure_S5, nrow = 2,ncol=3, widths=c(2.3, 2.3, 0.65))
Figure S5: Scatterplot of Bateman gradients (βss; relativized mating success against relativized reproductive success) for males (blue) and females (red) for group size treatment (A + B) and arena size treatment (C+ D). Slopes of liner models estimating βss indicated by solid line with predicted 95% confidence intervals.
Fig_S5=plot_grid(Figure_S5, ncol=1, rel_heights=c(0.1, 1)) # rel_heights values control title marginsHere we added an analysis of the sexual selection gradient excluding individuals that did not mate.
# Create data set excluding individuals without mating success 
D_data_noZeroMS=D_data[D_data$MatingPartners_number!=0,]
## Merge data according to treatment
# Data according to denstiy
D_data_noZeroMS_0.26=D_data_noZeroMS[D_data_noZeroMS$Treatment=='D = 0.26',]
D_data_noZeroMS_0.52=D_data_noZeroMS[D_data_noZeroMS$Treatment=='D = 0.52',]
D_data_noZeroMS_0.67=D_data_noZeroMS[D_data_noZeroMS$Treatment=='D = 0.67',]
D_data_noZeroMS_1.33=D_data_noZeroMS[D_data_noZeroMS$Treatment=='D = 1.33',]
# Reduce treatments to arena and population size
# Arena size
D_data_noZeroMS_Large_arena=rbind(D_data_noZeroMS_0.26,D_data_noZeroMS_0.52)
D_data_noZeroMS_Small_arena=rbind(D_data_noZeroMS_0.67,D_data_noZeroMS_1.33)
# Population size
D_data_noZeroMS_Small_pop=rbind(D_data_noZeroMS_0.26,D_data_noZeroMS_0.67)
D_data_noZeroMS_Large_pop=rbind(D_data_noZeroMS_0.52,D_data_noZeroMS_1.33)GLM of sexual selection gradient for population size treatment for small populations
bateman1=glm(rel_m_RS~rel_m_cMS,data=D_data_noZeroMS_Small_pop) # Small population
summary(bateman1)
Call:
glm(formula = rel_m_RS ~ rel_m_cMS, data = D_data_noZeroMS_Small_pop)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.4401  -0.6142  -0.2620   0.6026   3.2274  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  -0.2117     0.4450  -0.476  0.63674   
rel_m_cMS     1.3739     0.3977   3.455  0.00129 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 1.039294)
    Null deviance: 55.017  on 42  degrees of freedom
Residual deviance: 42.611  on 41  degrees of freedom
  (49 Beobachtungen als fehlend gelöscht)
AIC: 127.64
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for population size treatment for large populations
bateman2=glm(rel_m_RS~rel_m_cMS,data=D_data_noZeroMS_Large_pop) # Large population
summary(bateman2)
Call:
glm(formula = rel_m_RS ~ rel_m_cMS, data = D_data_noZeroMS_Large_pop)
Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.32719  -0.78529  -0.01328   0.66413   1.84770  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   0.7035     0.2687   2.618   0.0117 *
rel_m_cMS     0.2594     0.2105   1.232   0.2237  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.6673908)
    Null deviance: 33.716  on 50  degrees of freedom
Residual deviance: 32.702  on 49  degrees of freedom
  (34 Beobachtungen als fehlend gelöscht)
AIC: 128.07
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for population size treatment for small populations
bateman3=glm(rel_f_RS~rel_f_cMS,data=D_data_noZeroMS_Small_pop) # Small population
summary(bateman3)
Call:
glm(formula = rel_f_RS ~ rel_f_cMS, data = D_data_noZeroMS_Small_pop)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.4827  -0.8628   0.1097   0.8914   1.6975  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)   0.5529     0.3855   1.434    0.158
rel_f_cMS     0.5291     0.3299   1.604    0.115
(Dispersion parameter for gaussian family taken to be 0.9707419)
    Null deviance: 48.122  on 48  degrees of freedom
Residual deviance: 45.625  on 47  degrees of freedom
  (43 Beobachtungen als fehlend gelöscht)
AIC: 141.56
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for population size treatment for large populations
bateman4=glm(rel_f_RS~rel_f_cMS,data=D_data_noZeroMS_Large_pop) # Large population
summary(bateman4)
Call:
glm(formula = rel_f_RS ~ rel_f_cMS, data = D_data_noZeroMS_Large_pop)
Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.11690  -0.68093   0.01509   0.69916   1.10603  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)   0.2450     0.3065   0.799  0.43005   
rel_f_cMS     0.7442     0.2081   3.577  0.00113 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.6033825)
    Null deviance: 27.029  on 33  degrees of freedom
Residual deviance: 19.308  on 32  degrees of freedom
  (51 Beobachtungen als fehlend gelöscht)
AIC: 83.25
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for arena size treatment for small arena
bateman5=glm(rel_m_RS~rel_m_cMS,data=D_data_noZeroMS_Small_arena) # Small arena
summary(bateman5)
Call:
glm(formula = rel_m_RS ~ rel_m_cMS, data = D_data_noZeroMS_Small_arena)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3617  -0.5915  -0.1986   0.5709   3.3616  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  -0.1786     0.4209  -0.424  0.67338   
rel_m_cMS     1.2812     0.3668   3.493  0.00112 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 1.058743)
    Null deviance: 58.444  on 44  degrees of freedom
Residual deviance: 45.526  on 43  degrees of freedom
  (37 Beobachtungen als fehlend gelöscht)
AIC: 134.23
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for arena size treatment for large arena
bateman6=glm(rel_m_RS~rel_m_cMS,data=D_data_noZeroMS_Large_arena) # Large arena
summary(bateman6)
Call:
glm(formula = rel_m_RS ~ rel_m_cMS, data = D_data_noZeroMS_Large_arena)
Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.26221  -0.69688  -0.03834   0.62374   2.14473  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)   0.8186     0.2715   3.015  0.00413 **
rel_m_cMS     0.1845     0.2156   0.856  0.39655   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.6466574)
    Null deviance: 30.866  on 48  degrees of freedom
Residual deviance: 30.393  on 47  degrees of freedom
  (46 Beobachtungen als fehlend gelöscht)
AIC: 121.65
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for arena size treatment for small arena
bateman7=glm(rel_f_RS~rel_f_cMS,data=D_data_noZeroMS_Small_arena) # Small arena
summary(bateman7)
Call:
glm(formula = rel_f_RS ~ rel_f_cMS, data = D_data_noZeroMS_Small_arena)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.1915  -0.8905   0.2676   0.8362   1.2729  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   0.5896     0.3552   1.660   0.1058  
rel_f_cMS     0.5137     0.2788   1.843   0.0739 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.8261488)
    Null deviance: 31.720  on 36  degrees of freedom
Residual deviance: 28.915  on 35  degrees of freedom
  (45 Beobachtungen als fehlend gelöscht)
AIC: 101.88
Number of Fisher Scoring iterations: 2
GLM of sexual selection gradient for arena size treatment for large arena
bateman8=glm(rel_f_RS~rel_f_cMS,data=D_data_noZeroMS_Large_arena) # Large arena
summary(bateman8)
Call:
glm(formula = rel_f_RS ~ rel_f_cMS, data = D_data_noZeroMS_Large_arena)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.5787  -0.6852  -0.1843   0.7460   1.8752  
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)   0.2384     0.3277   0.727  0.47079   
rel_f_cMS     0.7627     0.2475   3.082  0.00355 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.815707)
    Null deviance: 43.637  on 45  degrees of freedom
Residual deviance: 35.891  on 44  degrees of freedom
  (49 Beobachtungen als fehlend gelöscht)
AIC: 125.13
Number of Fisher Scoring iterations: 2
Here we analysed the sexual selection gradient across all treatments for males and females.
D_data_noZeroMS$rel_f_cMS=NA
D_data_noZeroMS$rel_f_cMS=D_data_noZeroMS$f_cMS/mean(D_data_noZeroMS$f_cMS,na.rm=T)
D_data_noZeroMS$rel_f_RS=NA
D_data_noZeroMS$rel_f_RS=D_data_noZeroMS$f_RS/mean(D_data_noZeroMS$f_RS,na.rm=T)
D_data_noZeroMS$rel_m_cMS=NA
D_data_noZeroMS$rel_m_cMS=D_data_noZeroMS$m_cMS/mean(D_data_noZeroMS$m_cMS,na.rm=T)
D_data_noZeroMS$rel_m_RS=NA
D_data_noZeroMS$rel_m_RS=D_data_noZeroMS$m_RS/mean(D_data_noZeroMS$m_RS,na.rm=T)Global sexual selection gradient of females:
bateman9=glm(rel_f_RS~rel_f_cMS+Body_mass_mg_focal,data=D_data_noZeroMS)
summary(bateman9)
Call:
glm(formula = rel_f_RS ~ rel_f_cMS + Body_mass_mg_focal, data = D_data_noZeroMS)
Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.31733  -0.70473   0.04623   0.59495   1.49825  
Coefficients:
                   Estimate Std. Error t value Pr(>|t|)   
(Intercept)         -0.9513     0.7400  -1.285  0.20234   
rel_f_cMS            0.6060     0.1851   3.274  0.00157 **
Body_mass_mg_focal   0.6063     0.3339   1.816  0.07308 . 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.5711586)
    Null deviance: 54.962  on 82  degrees of freedom
Residual deviance: 45.693  on 80  degrees of freedom
  (94 Beobachtungen als fehlend gelöscht)
AIC: 194
Number of Fisher Scoring iterations: 2
Global sexual selection gradient of males:
bateman10=glm(rel_m_RS~rel_m_cMS+Body_mass_mg_focal,data=D_data_noZeroMS)
summary(bateman10)
Call:
glm(formula = rel_m_RS ~ rel_m_cMS + Body_mass_mg_focal, data = D_data_noZeroMS)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.6413  -0.6841  -0.0764   0.5487   3.6029  
Coefficients:
                   Estimate Std. Error t value Pr(>|t|)   
(Intercept)         -0.3193     0.9686  -0.330  0.74239   
rel_m_cMS            0.6076     0.2101   2.892  0.00479 **
Body_mass_mg_focal   0.3657     0.4571   0.800  0.42578   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.7392833)
    Null deviance: 73.460  on 93  degrees of freedom
Residual deviance: 67.275  on 91  degrees of freedom
  (83 Beobachtungen als fehlend gelöscht)
AIC: 243.32
Number of Fisher Scoring iterations: 2
Next, we tested if the steepness of the global sexual selection gradient differed between the sexes.
data_combined=D_data_noZeroMS
data_combined$rel_RS=NA
data_combined$rel_RS[data_combined$Sex=='M']=data_combined$rel_m_RS[data_combined$Sex=='M']
data_combined$rel_RS[data_combined$Sex=='F']=data_combined$rel_f_RS[data_combined$Sex=='F']
data_combined$rel_cMS=NA
data_combined$rel_cMS[data_combined$Sex=='M']=data_combined$rel_m_cMS[data_combined$Sex=='M']
data_combined$rel_cMS[data_combined$Sex=='F']=data_combined$rel_f_cMS[data_combined$Sex=='F']Global sexual selection gradient with sex-interaction:
bateman11=glm(rel_RS~rel_cMS*Sex,data=data_combined)
summary(bateman11)
Call:
glm(formula = rel_RS ~ rel_cMS * Sex, data = data_combined)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.6630  -0.6672   0.0023   0.6489   3.6092  
Coefficients:
             Estimate Std. Error t value Pr(>|t|)   
(Intercept)   0.34233    0.21697   1.578  0.11644   
rel_cMS       0.65767    0.19759   3.328  0.00107 **
SexM          0.09265    0.30236   0.306  0.75966   
rel_cMS:SexM -0.09265    0.27622  -0.335  0.73773   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for gaussian family taken to be 0.6666166)
    Null deviance: 128.42  on 176  degrees of freedom
Residual deviance: 115.32  on 173  degrees of freedom
AIC: 436.48
Number of Fisher Scoring iterations: 2
Finally, we plotted the sexual selection gradient for each sex and treatment.
p22<-ggplot(D_data_noZeroMS_Small_pop, aes(x=rel_m_cMS, y=rel_m_RS)) +
  geom_point(alpha=0.4,shape=16, size = 3,color=colpal2[2]) +
  geom_smooth(method=lm, se=TRUE,alpha=0.3) +
  theme(plot.tag.position=c(0.1,0.98))+
  labs(tag = "A")+xlab('Rel. mating success')+ylab("Rel. reproductive success")+ggtitle('Small group')+ theme(plot.title = element_text(hjust = 0.5))+
  theme(axis.text=element_text(size=13),
        axis.title=element_text(size=14))+ theme(legend.position="none")+
  ylim(0,4.2)+xlim(0,3.2)+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(), axis.line = element_line(colour = "black"))
p22=p22+geom_point(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],alpha=0.4,shape=16, size = 3)+
  geom_smooth(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],method=lm, se=TRUE,alpha=0.3)
p23<-ggplot(D_data_noZeroMS_Large_pop, aes(x=rel_m_cMS, y=rel_m_RS)) +
  geom_point(alpha=0.4,shape=16, size = 3,color=colpal2[2]) +
  geom_smooth(method=lm, se=TRUE,alpha=0.3) +
  theme(plot.tag.position=c(0.1,0.98))+
  labs(tag = "B")+xlab('Rel. mating success')+ylab("Rel. reproductive success")+ggtitle('Large group')+ theme(plot.title = element_text(hjust = 0.5))+
  theme(axis.text=element_text(size=13),
        axis.title=element_text(size=14))+ theme(legend.position="none")+
  ylim(0,4.2)+xlim(0,3.2)+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(), axis.line = element_line(colour = "black"))
p23=p23+geom_point(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],alpha=0.4,shape=16, size = 3)+
  geom_smooth(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],method=lm, se=TRUE,alpha=0.3)
p24<-ggplot(D_data_noZeroMS_Large_arena, aes(x=rel_m_cMS, y=rel_m_RS)) +
  geom_point(alpha=0.4,shape=16, size = 3,color=colpal2[2]) +
  geom_smooth(method=lm, se=TRUE,alpha=0.3) +
  theme(plot.tag.position=c(0.1,0.98))+
  labs(tag = "C")+xlab('Rel. mating success')+ylab("Rel. reproductive success")+ggtitle('Large arena')+ theme(plot.title = element_text(hjust = 0.5))+
  theme(axis.text=element_text(size=13),
        axis.title=element_text(size=14))+ theme(legend.position="none")+
  ylim(0,4.2)+xlim(0,3.2)+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(), axis.line = element_line(colour = "black"))
p24=p24+geom_point(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],alpha=0.4,shape=16, size = 3)+
  geom_smooth(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],method=lm, se=TRUE,alpha=0.3)
p25<-ggplot(D_data_noZeroMS_Small_arena, aes(x=rel_m_cMS, y=rel_m_RS)) +
  geom_point(alpha=0.4,shape=16, size = 3,color=colpal2[2]) +
  geom_smooth(method=lm, se=TRUE,alpha=0.3) +
  theme(plot.tag.position=c(0.1,0.98))+
  labs(tag = "D")+xlab('Rel. mating success')+ylab("Rel. reproductive success")+ggtitle('Small arena')+ theme(plot.title = element_text(hjust = 0.5))+
  theme(axis.text=element_text(size=13),
        axis.title=element_text(size=14))+
  ylim(0,4.2)+xlim(0,3.2)+
  theme(legend.position="none")+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(), axis.line = element_line(colour = "black"))
p25=p25+geom_point(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],alpha=0.4,shape=16, size = 3)+
  geom_smooth(aes(x=rel_f_cMS, y=rel_f_RS),color=colpal2[1],method=lm, se=TRUE,alpha=0.3)
# Create legend
p26<-ggplot(D_data_noZeroMS, aes(x=Total_N_MTP1, y=Total_N_Rd, color=Sex)) +
  geom_point(alpha=0.4,shape=16, size = 3, position=position_jitterdodge(jitter.height=0,jitter.width=0,dodge.width = 0)) +
  geom_smooth(method=lm, se=TRUE,alpha=0.3) +
  scale_color_manual(values=c(colpal2[1],colpal2[2]),name = "Sex", labels = c('Females','Males'))+
  xlab('Rel. mating success')+ylab("Rel. reproductive success")+
  guides(color=guide_legend(override.aes=list(fill=NA)))+
  theme(legend.key = element_rect(fill = "transparent"))
legend_Figure_S6 <- get_legend(p26)Figure_S6<-grid.arrange(p22,p23,legend_Figure_S6,p24,p25,legend_Figure_S6, nrow = 2,ncol=3, widths=c(2.3, 2.3, 0.65))
Figure S7: Scatterplot of Bateman gradients (βss; relativized mating success against relativized reproductive success) excluding individuals without mating success for males (blue) and females (red) for group size treatment (A + B) and arena size treatment (C+ D). Slopes of liner models estimating βss indicated by solid line with predicted 95% confidence intervals.
Fig_S6=plot_grid(Figure_S6, ncol=1, rel_heights=c(0.1, 1)) # rel_heights values control title marginsWe used permutation tests to see if the (sexual) selection metrics differed between treatments.
## Permutation tests for treatment comparisons for (sexual) selection metrics ####
### Opportunity for sexual selection (I) ####
# Arena size
# Males
Treat_diff_Male_arena_I=c(I_Small_arena_Male_bootvar$t-c(I_Large_arena_Male_bootvar$t))
t_Treat_diff_Male_arena_I=mean(Treat_diff_Male_arena_I,na.rm=TRUE)
t_Treat_diff_Male_arena_I_lower=quantile(Treat_diff_Male_arena_I,.025,na.rm=TRUE)
t_Treat_diff_Male_arena_I_upper=quantile(Treat_diff_Male_arena_I,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Large_arena$rel_m_RS,D_data_Small_arena$rel_m_RS)
diff.observed =  var(na.omit((D_data_Small_arena$rel_m_RS)))-var(na.omit((D_data_Large_arena$rel_m_RS)))
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Large_arena$rel_m_RS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Small_arena$rel_m_RS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(a.random)) - var(na.omit(b.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Male_arena_I_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Females
Treat_diff_Female_arena_I=c(I_Small_arena_Female_bootvar$t)-c(I_Large_arena_Female_bootvar$t)
t_Treat_diff_Female_arena_I=mean(Treat_diff_Female_arena_I,na.rm=TRUE)
t_Treat_diff_Female_arena_I_lower=quantile(Treat_diff_Female_arena_I,.025,na.rm=TRUE)
t_Treat_diff_Female_arena_I_upper=quantile(Treat_diff_Female_arena_I,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Large_arena$rel_f_RS,D_data_Small_arena$rel_f_RS)
diff.observed =  var(na.omit((D_data_Small_arena$rel_f_RS)))-var(na.omit((D_data_Large_arena$rel_f_RS)))
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Large_arena$rel_f_RS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Small_arena$rel_f_RS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(a.random)) - var(na.omit(b.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Female_arena_I_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Population size
# Males
Treat_diff_Male_pop_I=c(I_Large_pop_Male_bootvar$t)-c(I_Small_pop_Male_bootvar$t)
t_Treat_diff_Male_pop_I=mean(Treat_diff_Male_pop_I,na.rm=TRUE)
t_Treat_diff_Male_pop_I_lower=quantile(Treat_diff_Male_pop_I,.025,na.rm=TRUE)
t_Treat_diff_Male_pop_I_upper=quantile(Treat_diff_Male_pop_I,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Small_pop$rel_m_RS,D_data_Large_pop$rel_m_RS)
diff.observed =   var(na.omit((D_data_Large_pop$rel_m_RS)))-var(na.omit((D_data_Small_pop$rel_m_RS)))
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Small_pop$rel_m_RS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Large_pop$rel_m_RS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(a.random)) - var(na.omit(b.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Male_pop_I_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Females
Treat_diff_Female_pop_I=c(I_Large_pop_Female_bootvar$t)-c(I_Small_pop_Female_bootvar$t)
t_Treat_diff_Female_pop_I=mean(Treat_diff_Female_pop_I,na.rm=TRUE)
t_Treat_diff_Female_pop_I_lower=quantile(Treat_diff_Female_pop_I,.025,na.rm=TRUE)
t_Treat_diff_Female_pop_I_upper=quantile(Treat_diff_Female_pop_I,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Small_pop$rel_f_RS,D_data_Large_pop$rel_f_RS)
diff.observed =   var(na.omit(c(D_data_Large_pop$rel_f_RS)))-var(na.omit(c(D_data_Small_pop$rel_f_RS)))
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Small_pop$rel_f_RS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Large_pop$rel_f_RS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(a.random)) - var(na.omit(b.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Female_pop_I_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
### Opportunity for sexual selection (Is) ####
# Arena size
# Males
Treat_diff_Male_arena_Is=c(Is_Small_arena_Male_bootvar$t)-c(Is_Large_arena_Male_bootvar$t)
t_Treat_diff_Male_arena_Is=mean(Treat_diff_Male_arena_Is,na.rm=TRUE)
t_Treat_diff_Male_arena_Is_lower=quantile(Treat_diff_Male_arena_Is,.025,na.rm=TRUE)
t_Treat_diff_Male_arena_Is_upper=quantile(Treat_diff_Male_arena_Is,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Large_arena$rel_m_cMS,D_data_Small_arena$rel_m_cMS)
diff.observed =   var(na.omit(c(D_data_Small_arena$rel_m_cMS)))-var(na.omit(c(D_data_Large_arena$rel_m_cMS)))
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Large_arena$rel_m_cMS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Small_arena$rel_m_cMS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(a.random)) - var(na.omit(b.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Male_arena_Is_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Females
Treat_diff_Female_arena_Is=c(Is_Small_arena_Female_bootvar$t)-c(Is_Large_arena_Female_bootvar$t)
t_Treat_diff_Female_arena_Is=mean(Treat_diff_Female_arena_Is,na.rm=TRUE)
t_Treat_diff_Female_arena_Is_lower=quantile(Treat_diff_Female_arena_Is,.025,na.rm=TRUE)
t_Treat_diff_Female_arena_Is_upper=quantile(Treat_diff_Female_arena_Is,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Large_arena$rel_f_cMS,D_data_Small_arena$rel_f_cMS)
diff.observed =  var(na.omit(c(D_data_Small_arena$rel_f_cMS)))-var(na.omit(c(D_data_Large_arena$rel_f_cMS))) 
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Large_arena$rel_f_cMS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Small_arena$rel_f_cMS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(a.random)) - var(na.omit(b.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Female_arena_Is_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Population size
# Males
Treat_diff_Male_pop_Is=c(Is_Large_pop_Male_bootvar$t)-c(Is_Small_pop_Male_bootvar$t)
t_Treat_diff_Male_pop_Is=mean(Treat_diff_Male_pop_Is,na.rm=TRUE)
t_Treat_diff_Male_pop_Is_lower=quantile(Treat_diff_Male_pop_Is,.025,na.rm=TRUE)
t_Treat_diff_Male_pop_Is_upper=quantile(Treat_diff_Male_pop_Is,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Small_pop$rel_m_cMS,D_data_Large_pop$rel_m_cMS)
diff.observed =  var(na.omit(D_data_Large_pop$rel_m_cMS))-var(na.omit(D_data_Small_pop$rel_m_cMS),na.rm = T)
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(D_data_Small_pop$rel_m_cMS), TRUE)
  b.random = sample (na.omit(comb_data), length(D_data_Large_pop$rel_m_cMS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(a.random)) - var(na.omit(b.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Male_pop_Is_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Females
Treat_diff_Female_pop_Is=c(Is_Large_pop_Female_bootvar$t)-c(Is_Small_pop_Female_bootvar$t)
t_Treat_diff_Female_pop_Is=mean(Treat_diff_Female_pop_Is,na.rm=TRUE)
t_Treat_diff_Female_pop_Is_lower=quantile(Treat_diff_Female_pop_Is,.025,na.rm=TRUE)
t_Treat_diff_Female_pop_Is_upper=quantile(Treat_diff_Female_pop_Is,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Small_pop$rel_f_cMS,D_data_Large_pop$rel_f_cMS)
diff.observed =  var(na.omit(D_data_Large_pop$rel_f_cMS))-var(na.omit(D_data_Small_pop$rel_f_cMS))
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Small_pop$rel_f_cMS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Large_pop$rel_f_cMS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(a.random)) - var(na.omit(b.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Female_pop_Is_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
### Sexual selection gradient ####
# Arena size
# Males
Treat_diff_Male_arena_B=c(B_Small_arena_Male_bootvar$t)-c(B_Large_arena_Male_bootvar$t)
t_Treat_diff_Male_arena_B=mean(Treat_diff_Male_arena_B,na.rm=TRUE)
t_Treat_diff_Male_arena_B_lower=quantile(Treat_diff_Male_arena_B,.025,na.rm=TRUE)
t_Treat_diff_Male_arena_B_upper=quantile(Treat_diff_Male_arena_B,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Large_arena$rel_m_RS, D_data_Small_arena$rel_m_RS)
comb_data2=c(D_data_Large_arena$rel_m_cMS,D_data_Small_arena$rel_m_cMS)
diff.observed =  lm(D_data_Small_arena$rel_m_RS ~D_data_Small_arena$rel_m_cMS)$coefficients[2]-lm(D_data_Large_arena$rel_m_RS ~D_data_Large_arena$rel_m_cMS)$coefficients[2]
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Large_arena$rel_m_RS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Small_arena$rel_m_RS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Large_arena$rel_m_cMS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Small_arena$rel_m_cMS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(b.random ~d.random)$coefficients[2]-lm(a.random ~c.random)$coefficients[2] 
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Male_arena_B_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Females
Treat_diff_Female_arena_B=c(B_Small_arena_Female_bootvar$t)-c(B_Large_arena_Female_bootvar$t)
t_Treat_diff_Female_arena_B=mean(Treat_diff_Female_arena_B,na.rm=TRUE)
t_Treat_diff_Female_arena_B_lower=quantile(Treat_diff_Female_arena_B,.025,na.rm=TRUE)
t_Treat_diff_Female_arena_B_upper=quantile(Treat_diff_Female_arena_B,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Large_arena$rel_f_RS, D_data_Small_arena$rel_f_RS)
comb_data2=c(D_data_Large_arena$rel_f_cMS,D_data_Small_arena$rel_f_cMS)
diff.observed =  lm(D_data_Small_arena$rel_f_RS ~D_data_Small_arena$rel_f_cMS)$coefficients[2]-lm(D_data_Large_arena$rel_f_RS ~D_data_Large_arena$rel_f_cMS)$coefficients[2]
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Large_arena$rel_f_RS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Small_arena$rel_f_RS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Large_arena$rel_f_cMS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Small_arena$rel_f_cMS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(b.random ~d.random)$coefficients[2]-lm(a.random ~c.random)$coefficients[2] 
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Female_arena_B_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Population size
# Males
Treat_diff_Male_pop_B=c(B_Large_pop_Male_bootvar$t)-c(B_Small_pop_Male_bootvar$t)
t_Treat_diff_Male_pop_B=mean(Treat_diff_Male_pop_B,na.rm=TRUE)
t_Treat_diff_Male_pop_B_lower=quantile(Treat_diff_Male_pop_B,.025,na.rm=TRUE)
t_Treat_diff_Male_pop_B_upper=quantile(Treat_diff_Male_pop_B,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Small_pop$rel_m_RS, D_data_Large_pop$rel_m_RS)
comb_data2=c(D_data_Small_pop$rel_m_cMS,D_data_Large_pop$rel_m_cMS)
diff.observed = lm(D_data_Large_pop$rel_m_RS ~D_data_Large_pop$rel_m_cMS)$coefficients[2]-lm(D_data_Small_pop$rel_m_RS ~D_data_Small_pop$rel_m_cMS)$coefficients[2] 
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Small_pop$rel_m_RS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Large_pop$rel_m_RS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Small_pop$rel_m_cMS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Large_pop$rel_m_cMS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] =  lm(b.random ~d.random)$coefficients[2]-lm(a.random ~c.random)$coefficients[2]
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Male_pop_B_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Females
Treat_diff_Female_pop_B=c(B_Large_pop_Female_bootvar$t)-c(B_Small_pop_Female_bootvar$t)
t_Treat_diff_Female_pop_B=mean(Treat_diff_Female_pop_B,na.rm=TRUE)
t_Treat_diff_Female_pop_B_lower=quantile(Treat_diff_Female_pop_B,.025,na.rm=TRUE)
t_Treat_diff_Female_pop_B_upper=quantile(Treat_diff_Female_pop_B,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Small_pop$rel_f_RS, D_data_Large_pop$rel_f_RS)
comb_data2=c(D_data_Small_pop$rel_f_cMS,D_data_Large_pop$rel_f_cMS)
diff.observed =  lm(D_data_Large_pop$rel_f_RS ~D_data_Large_pop$rel_f_cMS)$coefficients[2]-lm(D_data_Small_pop$rel_f_RS ~D_data_Small_pop$rel_f_cMS)$coefficients[2]
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Small_pop$rel_f_RS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Large_pop$rel_f_RS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Small_pop$rel_f_cMS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Large_pop$rel_f_cMS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(b.random ~d.random)$coefficients[2]-lm(a.random ~c.random)$coefficients[2] 
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Female_pop_B_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
### Jones index ####
# Arena size
# Males
Treat_diff_Male_arena_S=c(S_Small_arena_Male_bootvar$t)-c(S_Large_arena_Male_bootvar$t)
t_Treat_diff_Male_arena_S=mean(Treat_diff_Male_arena_S,na.rm=TRUE)
t_Treat_diff_Male_arena_S_lower=quantile(Treat_diff_Male_arena_S,.025,na.rm=TRUE)
t_Treat_diff_Male_arena_S_upper=quantile(Treat_diff_Male_arena_S,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Large_arena$rel_m_cMS, D_data_Small_arena$rel_m_cMS)
comb_data2=c(D_data_Large_arena$rel_m_RS, D_data_Small_arena$rel_m_RS)
diff.observed =  lm(D_data_Small_arena$rel_m_RS ~D_data_Small_arena$rel_m_cMS)$coefficients[2]*sqrt(var(D_data_Small_arena$rel_m_cMS, na.rm=TRUE))-lm(D_data_Large_arena$rel_m_RS ~D_data_Large_arena$rel_m_cMS)$coefficients[2]*sqrt(var(D_data_Large_arena$rel_m_cMS, na.rm=TRUE))
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Large_arena$rel_m_cMS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Small_arena$rel_m_cMS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Large_arena$rel_m_RS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Small_arena$rel_m_RS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(d.random ~b.random)$coefficients[2]*sqrt(var(b.random, na.rm=TRUE))-lm(c.random ~a.random)$coefficients[2]*sqrt(var(a.random, na.rm=TRUE)) 
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Male_arena_S_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Females
Treat_diff_Female_arena_S=c(S_Small_arena_Female_bootvar$t)-c(S_Large_arena_Female_bootvar$t)
t_Treat_diff_Female_arena_S=mean(Treat_diff_Female_arena_S,na.rm=TRUE)
t_Treat_diff_Female_arena_S_lower=quantile(Treat_diff_Female_arena_S,.025,na.rm=TRUE)
t_Treat_diff_Female_arena_S_upper=quantile(Treat_diff_Female_arena_S,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Large_arena$rel_f_cMS, D_data_Small_arena$rel_f_cMS)
comb_data2=c(D_data_Large_arena$rel_f_RS, D_data_Small_arena$rel_f_RS)
diff.observed =  lm(D_data_Small_arena$rel_f_RS ~D_data_Small_arena$rel_f_cMS)$coefficients[2]*sqrt(var(D_data_Small_arena$rel_f_cMS, na.rm=TRUE))-lm(D_data_Large_arena$rel_f_RS ~D_data_Large_arena$rel_f_cMS)$coefficients[2]*sqrt(var(D_data_Large_arena$rel_f_cMS, na.rm=TRUE))
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Large_arena$rel_f_cMS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Small_arena$rel_f_cMS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Large_arena$rel_f_RS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Small_arena$rel_f_RS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(d.random ~b.random)$coefficients[2]*sqrt(var(b.random, na.rm=TRUE))-lm(c.random ~a.random)$coefficients[2]*sqrt(var(a.random, na.rm=TRUE)) 
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Female_arena_S_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Population size
# Males
Treat_diff_Male_pop_S=c(S_Large_pop_Male_bootvar$t)-c(S_Small_pop_Male_bootvar$t)
t_Treat_diff_Male_pop_S=mean(Treat_diff_Male_pop_S,na.rm=TRUE)
t_Treat_diff_Male_pop_S_lower=quantile(Treat_diff_Male_pop_S,.025,na.rm=TRUE)
t_Treat_diff_Male_pop_S_upper=quantile(Treat_diff_Male_pop_S,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Small_pop$rel_m_cMS, D_data_Large_pop$rel_m_cMS)
comb_data2=c(D_data_Small_pop$rel_m_RS, D_data_Large_pop$rel_m_RS)
diff.observed = lm(D_data_Large_pop$rel_m_RS ~D_data_Large_pop$rel_m_cMS)$coefficients[2]*sqrt(var(D_data_Large_pop$rel_m_cMS, na.rm=TRUE))-lm(D_data_Small_pop$rel_m_RS ~D_data_Small_pop$rel_m_cMS)$coefficients[2]*sqrt(var(D_data_Small_pop$rel_m_cMS, na.rm=TRUE))
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Small_pop$rel_m_cMS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Large_pop$rel_m_cMS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Small_pop$rel_m_RS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Large_pop$rel_m_RS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] =  lm(d.random ~b.random)$coefficients[2]*sqrt(var(b.random, na.rm=TRUE))-lm(c.random ~a.random)$coefficients[2]*sqrt(var(a.random, na.rm=TRUE))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Male_pop_S_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Females
Treat_diff_Female_pop_S=c(S_Large_pop_Female_bootvar$t)-c(S_Small_pop_Female_bootvar$t)
t_Treat_diff_Female_pop_S=mean(Treat_diff_Female_pop_S,na.rm=TRUE)
t_Treat_diff_Female_pop_S_lower=quantile(Treat_diff_Female_pop_S,.025,na.rm=TRUE)
t_Treat_diff_Female_pop_S_upper=quantile(Treat_diff_Female_pop_S,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Small_pop$rel_f_cMS, D_data_Large_pop$rel_f_cMS)
comb_data2=c(D_data_Small_pop$rel_f_RS, D_data_Large_pop$rel_f_RS)
diff.observed = lm(D_data_Large_pop$rel_f_RS ~D_data_Large_pop$rel_f_cMS)$coefficients[2]*sqrt(var(D_data_Large_pop$rel_f_cMS, na.rm=TRUE))-lm(D_data_Small_pop$rel_f_RS ~D_data_Small_pop$rel_f_cMS)$coefficients[2]*sqrt(var(D_data_Small_pop$rel_f_cMS, na.rm=TRUE))
diff.observed
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Small_pop$rel_f_cMS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Large_pop$rel_f_cMS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Small_pop$rel_f_RS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Large_pop$rel_f_RS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] =  lm(d.random ~b.random)$coefficients[2]*sqrt(var(b.random, na.rm=TRUE))-lm(c.random ~a.random)$coefficients[2]*sqrt(var(a.random, na.rm=TRUE))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Treat_diff_Female_pop_S_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
### Extract data and write results table ####
CompTreat_Table_Male_arena_I <- as.data.frame(cbind("Male", "Arena size", "Opportunity for selection", t_Treat_diff_Male_arena_I, t_Treat_diff_Male_arena_I_lower, t_Treat_diff_Male_arena_I_upper, t_Treat_diff_Male_arena_I_p))
names(CompTreat_Table_Male_arena_I)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Male_pop_I <- as.data.frame(cbind("Male", "Population size", "Opportunity for selection", t_Treat_diff_Male_pop_I, t_Treat_diff_Male_pop_I_lower, t_Treat_diff_Male_pop_I_upper, t_Treat_diff_Male_pop_I_p))
names(CompTreat_Table_Male_pop_I)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Male_arena_Is <- as.data.frame(cbind("Male", "Arena size", "Opportunity for sexual selection", t_Treat_diff_Male_arena_Is, t_Treat_diff_Male_arena_Is_lower, t_Treat_diff_Male_arena_Is_upper, t_Treat_diff_Male_arena_Is_p))
names(CompTreat_Table_Male_arena_Is)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Male_pop_Is <- as.data.frame(cbind("Male", "Population size", "Opportunity for sexual selection", t_Treat_diff_Male_pop_Is, t_Treat_diff_Male_pop_Is_lower, t_Treat_diff_Male_pop_Is_upper, t_Treat_diff_Male_pop_Is_p))
names(CompTreat_Table_Male_pop_Is)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Male_arena_B <- as.data.frame(cbind("Male", "Arena size", "Bateman gradient", t_Treat_diff_Male_arena_B, t_Treat_diff_Male_arena_B_lower, t_Treat_diff_Male_arena_B_upper, t_Treat_diff_Male_arena_B_p))
names(CompTreat_Table_Male_arena_B)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Male_pop_B <- as.data.frame(cbind("Male", "Population size", "Bateman gradient", t_Treat_diff_Male_pop_B, t_Treat_diff_Male_pop_B_lower, t_Treat_diff_Male_pop_B_upper, t_Treat_diff_Male_pop_B_p))
names(CompTreat_Table_Male_pop_B)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Male_arena_S <- as.data.frame(cbind("Male", "Arena size", "Jones index", t_Treat_diff_Male_arena_S, t_Treat_diff_Male_arena_S_lower, t_Treat_diff_Male_arena_S_upper, t_Treat_diff_Male_arena_S_p))
names(CompTreat_Table_Male_arena_S)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Male_pop_S <- as.data.frame(cbind("Male", "Population size", "Jones index", t_Treat_diff_Male_pop_S, t_Treat_diff_Male_pop_S_lower, t_Treat_diff_Male_pop_S_upper, t_Treat_diff_Male_pop_S_p))
names(CompTreat_Table_Male_pop_S)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Female_arena_I <- as.data.frame(cbind("Female", "Arena size", "Opportunity for selection", t_Treat_diff_Female_arena_I, t_Treat_diff_Female_arena_I_lower, t_Treat_diff_Female_arena_I_upper, t_Treat_diff_Female_arena_I_p))
names(CompTreat_Table_Female_arena_I)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Female_pop_I <- as.data.frame(cbind("Female", "Population size", "Opportunity for selection", t_Treat_diff_Female_pop_I, t_Treat_diff_Female_pop_I_lower, t_Treat_diff_Female_pop_I_upper, t_Treat_diff_Female_pop_I_p))
names(CompTreat_Table_Female_pop_I)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Female_arena_Is <- as.data.frame(cbind("Female", "Arena size", "Opportunity for sexual selection", t_Treat_diff_Female_arena_Is, t_Treat_diff_Female_arena_Is_lower, t_Treat_diff_Female_arena_Is_upper, t_Treat_diff_Female_arena_Is_p))
names(CompTreat_Table_Female_arena_Is)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Female_pop_Is <- as.data.frame(cbind("Female", "Population size", "Opportunity for sexual selection", t_Treat_diff_Female_pop_Is, t_Treat_diff_Female_pop_Is_lower, t_Treat_diff_Female_pop_Is_upper, t_Treat_diff_Female_pop_Is_p))
names(CompTreat_Table_Female_pop_Is)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Female_arena_B <- as.data.frame(cbind("Female", "Arena size", "Bateman gradient", t_Treat_diff_Female_arena_B, t_Treat_diff_Female_arena_B_lower, t_Treat_diff_Female_arena_B_upper, t_Treat_diff_Female_arena_B_p))
names(CompTreat_Table_Female_arena_B)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Female_pop_B <- as.data.frame(cbind("Female", "Population size", "Bateman gradient", t_Treat_diff_Female_pop_B, t_Treat_diff_Female_pop_B_lower, t_Treat_diff_Female_pop_B_upper, t_Treat_diff_Female_pop_B_p))
names(CompTreat_Table_Female_pop_B)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Female_arena_S <- as.data.frame(cbind("Female", "Arena size", "Jones index", t_Treat_diff_Female_arena_S, t_Treat_diff_Female_arena_S_lower, t_Treat_diff_Female_arena_S_upper, t_Treat_diff_Female_arena_S_p))
names(CompTreat_Table_Female_arena_S)=c('V1','V2','V3','V4','V5','V6','V7')
CompTreat_Table_Female_pop_S <- as.data.frame(cbind("Female", "Population size", "Jones index", t_Treat_diff_Female_pop_S, t_Treat_diff_Female_pop_S_lower, t_Treat_diff_Female_pop_S_upper, t_Treat_diff_Female_pop_S_p))
names(CompTreat_Table_Female_pop_S)=c('V1','V2','V3','V4','V5','V6','V7')
Table_BatemanMetrics_TreatComp <- as.data.frame(as.matrix(rbind(CompTreat_Table_Male_arena_I,CompTreat_Table_Male_arena_Is,
                                                                CompTreat_Table_Male_arena_B,CompTreat_Table_Male_arena_S,
                                                                CompTreat_Table_Male_pop_I,CompTreat_Table_Male_pop_Is,
                                                                CompTreat_Table_Male_pop_B,CompTreat_Table_Male_pop_S,
                                                                CompTreat_Table_Female_arena_I,CompTreat_Table_Female_arena_Is,
                                                                CompTreat_Table_Female_arena_B,CompTreat_Table_Female_arena_S,
                                                                CompTreat_Table_Female_pop_I,CompTreat_Table_Female_pop_Is,
                                                                CompTreat_Table_Female_pop_B,CompTreat_Table_Female_pop_S
)))
Table_BatemanMetrics_TreatComp[,4]=as.numeric(Table_BatemanMetrics_TreatComp[,4])
Table_BatemanMetrics_TreatComp[,5]=as.numeric(Table_BatemanMetrics_TreatComp[,5])
Table_BatemanMetrics_TreatComp[,6]=as.numeric(Table_BatemanMetrics_TreatComp[,6])
Table_BatemanMetrics_TreatComp[,7]=as.numeric(Table_BatemanMetrics_TreatComp[,7])
colnames(Table_BatemanMetrics_TreatComp)[1] <- "Sex"
colnames(Table_BatemanMetrics_TreatComp)[2] <- "Treatment"
colnames(Table_BatemanMetrics_TreatComp)[3] <- "Selection_metric"
colnames(Table_BatemanMetrics_TreatComp)[4] <- "Variance"
colnames(Table_BatemanMetrics_TreatComp)[5] <- "l95_CI"
colnames(Table_BatemanMetrics_TreatComp)[6] <- "u95_CI"
colnames(Table_BatemanMetrics_TreatComp)[7] <- "p-value"
Table_BatemanMetrics_TreatComp[,4]=round(as.numeric(Table_BatemanMetrics_TreatComp[,4]),digits=2)
Table_BatemanMetrics_TreatComp[,5]=round(as.numeric(Table_BatemanMetrics_TreatComp[,5]),digits=2)
Table_BatemanMetrics_TreatComp[,6]=round(as.numeric(Table_BatemanMetrics_TreatComp[,6]),digits=2)
Table_BatemanMetrics_TreatComp[,7]=round(as.numeric(Table_BatemanMetrics_TreatComp[,7]),digits=3)
rownames(Table_BatemanMetrics_TreatComp) <- c()Table A1: Treatment comparisons for sexual selection metrics including 95% confidence intervals. Negative effect sizes indicate larger values at lower density and positive effect sizes larger values at higher density.
kable(Table_BatemanMetrics_TreatComp)| Sex | Treatment | Selection_metric | Variance | l95_CI | u95_CI | p-value | 
|---|---|---|---|---|---|---|
| Male | Arena size | Opportunity for selection | 0.24 | -0.25 | 0.81 | 0.184 | 
| Male | Arena size | Opportunity for sexual selection | -0.11 | -0.32 | 0.08 | 0.129 | 
| Male | Arena size | Bateman gradient | 0.70 | 0.14 | 1.33 | 0.005 | 
| Male | Arena size | Jones index | 0.30 | -0.04 | 0.65 | 0.026 | 
| Male | Population size | Opportunity for selection | -0.02 | -0.59 | 0.48 | 0.927 | 
| Male | Population size | Opportunity for sexual selection | 0.17 | -0.01 | 0.36 | 0.021 | 
| Male | Population size | Bateman gradient | -0.56 | -1.22 | 0.06 | 0.020 | 
| Male | Population size | Jones index | -0.18 | -0.54 | 0.17 | 0.179 | 
| Female | Arena size | Opportunity for selection | 0.14 | -0.10 | 0.37 | 0.088 | 
| Female | Arena size | Opportunity for sexual selection | 0.16 | -0.08 | 0.40 | 0.060 | 
| Female | Arena size | Bateman gradient | -0.24 | -0.63 | 0.15 | 0.271 | 
| Female | Arena size | Jones index | -0.06 | -0.32 | 0.21 | 0.677 | 
| Female | Population size | Opportunity for selection | -0.03 | -0.26 | 0.19 | 0.712 | 
| Female | Population size | Opportunity for sexual selection | 0.34 | 0.11 | 0.60 | 0.000 | 
| Female | Population size | Bateman gradient | 0.30 | -0.18 | 0.80 | 0.185 | 
| Female | Population size | Jones index | 0.37 | 0.11 | 0.65 | 0.005 | 
We used permutation tests to see if the mating differential of body mass differed between treatments.
## Permutation test for treatment effect on mating differential of body mass ####
# Group size
# Males
Treat_diff_male_pop=c(boot_BW_males_group_size_large$t)-c(boot_BW_males_group_size_small$t)
t_Treat_diff_male_pop=mean(Treat_diff_male_pop,na.rm=TRUE)
t_Treat_diff_male_pop_lower=quantile(Treat_diff_male_pop,.025,na.rm=TRUE)
t_Treat_diff_male_pop_upper=quantile(Treat_diff_male_pop,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS),
               D_data_m[D_data_m$Gr_size=='SG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS))
comb_data_BM=c(D_data_m[D_data_m$Gr_size=='LG',]$stder_BM_focal,
               D_data_m[D_data_m$Gr_size=='SG',]$stder_BM_focal)
diff.observed_male_pop = cov(D_data_m[D_data_m$Gr_size=='LG',]$stder_BM_focal,D_data_m[D_data_m$Gr_size=='LG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS),use="complete.obs",method = "pearson") - cov(D_data_m[D_data_m$Gr_size=='SG',]$stder_BM_focal,D_data_m[D_data_m$Gr_size=='SG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_male_pop = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS))), TRUE)
  
  # Null (permuated) difference
  diff.random_male_pop[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Treat_diff_male_pop = sum(abs(diff.random_male_pop) >= as.numeric(abs(diff.observed_male_pop)))/   number_of_permutations
# Females
Treat_diff_female_pop=c(boot_BW_females_group_size_large$t)-c(boot_BW_females_group_size_small$t)
t_Treat_diff_female_pop=mean(Treat_diff_female_pop,na.rm=TRUE)
t_Treat_diff_female_pop_lower=quantile(Treat_diff_female_pop,.025,na.rm=TRUE)
t_Treat_diff_female_pop_upper=quantile(Treat_diff_female_pop,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS),
               D_data_f[D_data_f$Gr_size=='SG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_cMS))
comb_data_BM=c(D_data_f[D_data_f$Gr_size=='LG',]$stder_BM_focal,
               D_data_f[D_data_f$Gr_size=='SG',]$stder_BM_focal)
diff.observed_female_pop = cov(D_data_f[D_data_f$Gr_size=='LG',]$stder_BM_focal,D_data_f[D_data_f$Gr_size=='LG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS),use="complete.obs",method = "pearson") - cov(D_data_f[D_data_f$Gr_size=='SG',]$stder_BM_focal,D_data_f[D_data_f$Gr_size=='SG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_cMS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_female_pop = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Gr_size=='SG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_cMS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Gr_size=='SG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_cMS))), TRUE)
  
  # Null (permuated) difference
  diff.random_female_pop[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Treat_diff_female_pop = sum(abs(diff.random_female_pop) >= as.numeric(abs(diff.observed_female_pop)))/   number_of_permutations
# Arena size
# Males
Treat_diff_male_arena=c(boot_BW_males_arena_large$t)-c(boot_BW_males_arena_small$t)
t_Treat_diff_male_arena=mean(Treat_diff_male_arena,na.rm=TRUE)
t_Treat_diff_male_arena_lower=quantile(Treat_diff_male_arena,.025,na.rm=TRUE)
t_Treat_diff_male_arena_upper=quantile(Treat_diff_male_arena,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_m[D_data_m$Arena=='Small',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Small',]$m_cMS),
               D_data_m[D_data_m$Arena=='Large',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Large',]$m_cMS))
comb_data_BM=c(D_data_m[D_data_m$Arena=='Small',]$stder_BM_focal,
               D_data_m[D_data_m$Arena=='Large',]$stder_BM_focal)
diff.observed_male_arena = cov(D_data_m[D_data_m$Arena=='Small',]$stder_BM_focal,D_data_m[D_data_m$Arena=='Small',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Small',]$m_cMS),use="complete.obs",method = "pearson") - cov(D_data_m[D_data_m$Arena=='Large',]$stder_BM_focal,D_data_m[D_data_m$Arena=='Large',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Large',]$m_cMS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_male_arena = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Arena=='Small',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Small',]$m_cMS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Arena=='Small',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Small',]$m_cMS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Arena=='Large',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Large',]$m_cMS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Arena=='Large',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Large',]$m_cMS))), TRUE)
  
  # Null (permuated) difference
  diff.random_male_arena[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Treat_diff_male_arena = sum(abs(diff.random_male_arena) >= as.numeric(abs(diff.observed_male_arena)))/   number_of_permutations
# Females
Treat_diff_female_arena=c(boot_BW_females_arena_large$t)-c(boot_BW_females_arena_small$t)
t_Treat_diff_female_arena=mean(Treat_diff_female_arena,na.rm=TRUE)
t_Treat_diff_female_arena_lower=quantile(Treat_diff_female_arena,.025,na.rm=TRUE)
t_Treat_diff_female_arena_upper=quantile(Treat_diff_female_arena,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_f[D_data_f$Arena=='Small',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Small',]$f_cMS),
               D_data_f[D_data_f$Arena=='Large',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Large',]$f_cMS))
comb_data_BM=c(D_data_f[D_data_f$Arena=='Small',]$stder_BM_focal,
               D_data_f[D_data_f$Arena=='Large',]$stder_BM_focal)
diff.observed_female_arena = cov(D_data_f[D_data_f$Arena=='Small',]$stder_BM_focal,D_data_f[D_data_f$Arena=='Small',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Small',]$f_cMS),use="complete.obs",method = "pearson") - cov(D_data_f[D_data_f$Arena=='Large',]$stder_BM_focal,D_data_f[D_data_f$Arena=='Large',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Large',]$f_cMS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_female_arena = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Arena=='Small',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Small',]$f_cMS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Arena=='Small',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Small',]$f_cMS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Arena=='Large',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Large',]$f_cMS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Arena=='Large',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Large',]$f_cMS))), TRUE)
  
  # Null (permuated) difference
  diff.random_female_arena[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Treat_diff_female_arena = sum(abs(diff.random_female_arena) >= as.numeric(abs(diff.observed_female_arena)))/   number_of_permutations
### Extract data and write results table ####
boot_data_BW_males_treat_group_size <-  as.data.frame(cbind("Male", "Population size", "Body mass", t_Treat_diff_male_pop, t_Treat_diff_male_pop_lower, t_Treat_diff_male_pop_upper, p_Treat_diff_male_pop))
names(boot_data_BW_males_treat_group_size)=c('V1','V2','V3','V4','V5','V6','V7')
boot_data_BW_females_treat_group_size <-  as.data.frame(cbind("Female", "Population size", "Body mass",t_Treat_diff_female_pop, t_Treat_diff_female_pop_lower, t_Treat_diff_female_pop_upper, p_Treat_diff_female_pop))
names(boot_data_BW_females_treat_group_size)=c('V1','V2','V3','V4','V5','V6','V7')
boot_data_BW_males_treat_arena <-  as.data.frame(cbind("Male", "Arena size", "Body mass", t_Treat_diff_male_arena, t_Treat_diff_male_arena_lower, t_Treat_diff_male_arena_upper, p_Treat_diff_male_arena))
names(boot_data_BW_males_treat_arena)=c('V1','V2','V3','V4','V5','V6','V7')
boot_data_BW_females_treat_arena<- as.data.frame(cbind("Female", "Arena size", "Body mass", t_Treat_diff_female_arena, t_Treat_diff_female_arena_lower, t_Treat_diff_female_arena_upper, p_Treat_diff_female_arena))
names(boot_data_BW_females_treat_arena)=c('V1','V2','V3','V4','V5','V6','V7')
Table_TreatComp_BM_MatingDif <- as.data.frame(as.matrix(rbind(boot_data_BW_males_treat_group_size,boot_data_BW_females_treat_group_size,
                                                    boot_data_BW_males_treat_arena,boot_data_BW_females_treat_arena)))
colnames(Table_TreatComp_BM_MatingDif)[1] <- "Sex"
colnames(Table_TreatComp_BM_MatingDif)[2] <- "Treatment"
colnames(Table_TreatComp_BM_MatingDif)[3] <- "Variance_component"
colnames(Table_TreatComp_BM_MatingDif)[4] <- "Variance"
colnames(Table_TreatComp_BM_MatingDif)[5] <- "l95_CI"
colnames(Table_TreatComp_BM_MatingDif)[6] <- "u95_CI"
colnames(Table_TreatComp_BM_MatingDif)[7] <- "p-value"
Table_TreatComp_BM_MatingDif[,4]=round(as.numeric(Table_TreatComp_BM_MatingDif[,4]),digits=2)
Table_TreatComp_BM_MatingDif[,5]=round(as.numeric(Table_TreatComp_BM_MatingDif[,5]),digits=2)
Table_TreatComp_BM_MatingDif[,6]=round(as.numeric(Table_TreatComp_BM_MatingDif[,6]),digits=2)
Table_TreatComp_BM_MatingDif[,7]=round(as.numeric(Table_TreatComp_BM_MatingDif[,7]),digits=3)
rownames(Table_TreatComp_BM_MatingDif) <- c()Table A2: Treatment comparisons for mating differentials on body mass including 95% confidence intervals. Negative effect sizes indicate larger values at lower density and positive effect sizes larger values at higher density.
kable(Table_TreatComp_BM_MatingDif)| Sex | Treatment | Variance_component | Variance | l95_CI | u95_CI | p-value | 
|---|---|---|---|---|---|---|
| Male | Population size | Body mass | 0.18 | -0.14 | 0.51 | 0.411 | 
| Female | Population size | Body mass | 0.24 | -0.11 | 0.59 | 0.545 | 
| Male | Arena size | Body mass | 0.12 | -0.21 | 0.45 | 0.704 | 
| Female | Arena size | Body mass | -0.27 | -0.61 | 0.09 | 0.512 | 
We used permutation tests to see if the selection differential of body mass differed between treatments.
## Permutation test for treatment effect on selection differential of body mass ####
# Group size
# Males
Treat_diff_male_pop=c(boot_BW_males_group_size_large$t)-c(boot_BW_males_group_size_small$t)
t_Treat_diff_male_pop=mean(Treat_diff_male_pop,na.rm=TRUE)
t_Treat_diff_male_pop_lower=quantile(Treat_diff_male_pop,.025,na.rm=TRUE)
t_Treat_diff_male_pop_upper=quantile(Treat_diff_male_pop,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_m[D_data_m$Gr_size=='LG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_RS),
               D_data_m[D_data_m$Gr_size=='SG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_RS))
comb_data_BM=c(D_data_m[D_data_m$Gr_size=='LG',]$stder_BM_focal,
               D_data_m[D_data_m$Gr_size=='SG',]$stder_BM_focal)
diff.observed_male_pop = cov(D_data_m[D_data_m$Gr_size=='LG',]$stder_BM_focal,D_data_m[D_data_m$Gr_size=='LG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_RS),use="complete.obs",method = "pearson") - cov(D_data_m[D_data_m$Gr_size=='SG',]$stder_BM_focal,D_data_m[D_data_m$Gr_size=='SG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_RS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_male_pop = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Gr_size=='LG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_RS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Gr_size=='LG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_RS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Gr_size=='SG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_RS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Gr_size=='SG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_RS))), TRUE)
  
  # Null (permuated) difference
  diff.random_male_pop[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Treat_diff_male_pop = sum(abs(diff.random_male_pop) >= as.numeric(abs(diff.observed_male_pop)))/   number_of_permutations
# Females
Treat_diff_female_pop=c(boot_BW_females_group_size_large$t)-c(boot_BW_females_group_size_small$t)
t_Treat_diff_female_pop=mean(Treat_diff_female_pop,na.rm=TRUE)
t_Treat_diff_female_pop_lower=quantile(Treat_diff_female_pop,.025,na.rm=TRUE)
t_Treat_diff_female_pop_upper=quantile(Treat_diff_female_pop,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_f[D_data_f$Gr_size=='LG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_RS),
               D_data_f[D_data_f$Gr_size=='SG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_RS))
comb_data_BM=c(D_data_f[D_data_f$Gr_size=='LG',]$stder_BM_focal,
               D_data_f[D_data_f$Gr_size=='SG',]$stder_BM_focal)
diff.observed_female_pop = cov(D_data_f[D_data_f$Gr_size=='LG',]$stder_BM_focal,D_data_f[D_data_f$Gr_size=='LG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_RS),use="complete.obs",method = "pearson") - cov(D_data_f[D_data_f$Gr_size=='SG',]$stder_BM_focal,D_data_f[D_data_f$Gr_size=='SG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_RS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_female_pop = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Gr_size=='LG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_RS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Gr_size=='LG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_RS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Gr_size=='SG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_RS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Gr_size=='SG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_RS))), TRUE)
  
  # Null (permuated) difference
  diff.random_female_pop[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Treat_diff_female_pop = sum(abs(diff.random_female_pop) >= as.numeric(abs(diff.observed_female_pop)))/   number_of_permutations
# Arena size
# Males
Treat_diff_male_arena=c(boot_BW_males_arena_large$t)-c(boot_BW_males_arena_small$t)
t_Treat_diff_male_arena=mean(Treat_diff_male_arena,na.rm=TRUE)
t_Treat_diff_male_arena_lower=quantile(Treat_diff_male_arena,.025,na.rm=TRUE)
t_Treat_diff_male_arena_upper=quantile(Treat_diff_male_arena,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_m[D_data_m$Arena=='Small',]$m_RS/mean(D_data_m[D_data_m$Arena=='Small',]$m_RS),
               D_data_m[D_data_m$Arena=='Large',]$m_RS/mean(D_data_m[D_data_m$Arena=='Large',]$m_RS))
comb_data_BM=c(D_data_m[D_data_m$Arena=='Small',]$stder_BM_focal,
               D_data_m[D_data_m$Arena=='Large',]$stder_BM_focal)
diff.observed_male_arena = cov(D_data_m[D_data_m$Arena=='Small',]$stder_BM_focal,D_data_m[D_data_m$Arena=='Small',]$m_RS/mean(D_data_m[D_data_m$Arena=='Small',]$m_RS),use="complete.obs",method = "pearson") - cov(D_data_m[D_data_m$Arena=='Large',]$stder_BM_focal,D_data_m[D_data_m$Arena=='Large',]$m_RS/mean(D_data_m[D_data_m$Arena=='Large',]$m_RS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_male_arena = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Arena=='Small',]$m_RS/mean(D_data_m[D_data_m$Arena=='Small',]$m_RS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Arena=='Small',]$m_RS/mean(D_data_m[D_data_m$Arena=='Small',]$m_RS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Arena=='Large',]$m_RS/mean(D_data_m[D_data_m$Arena=='Large',]$m_RS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Arena=='Large',]$m_RS/mean(D_data_m[D_data_m$Arena=='Large',]$m_RS))), TRUE)
  
  # Null (permuated) difference
  diff.random_male_arena[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Treat_diff_male_arena = sum(abs(diff.random_male_arena) >= as.numeric(abs(diff.observed_male_arena)))/   number_of_permutations
# Females
Treat_diff_female_arena=c(boot_BW_females_arena_large$t)-c(boot_BW_females_arena_small$t)
t_Treat_diff_female_arena=mean(Treat_diff_female_arena,na.rm=TRUE)
t_Treat_diff_female_arena_lower=quantile(Treat_diff_female_arena,.025,na.rm=TRUE)
t_Treat_diff_female_arena_upper=quantile(Treat_diff_female_arena,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_f[D_data_f$Arena=='Small',]$f_RS/mean(D_data_f[D_data_f$Arena=='Small',]$f_RS),
               D_data_f[D_data_f$Arena=='Large',]$f_RS/mean(D_data_f[D_data_f$Arena=='Large',]$f_RS))
comb_data_BM=c(D_data_f[D_data_f$Arena=='Small',]$stder_BM_focal,
               D_data_f[D_data_f$Arena=='Large',]$stder_BM_focal)
diff.observed_female_arena = cov(D_data_f[D_data_f$Arena=='Small',]$stder_BM_focal,D_data_f[D_data_f$Arena=='Small',]$f_RS/mean(D_data_f[D_data_f$Arena=='Small',]$f_RS),use="complete.obs",method = "pearson") - cov(D_data_f[D_data_f$Arena=='Large',]$stder_BM_focal,D_data_f[D_data_f$Arena=='Large',]$f_RS/mean(D_data_f[D_data_f$Arena=='Large',]$f_RS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_female_arena = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Arena=='Small',]$f_RS/mean(D_data_f[D_data_f$Arena=='Small',]$f_RS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Arena=='Small',]$f_RS/mean(D_data_f[D_data_f$Arena=='Small',]$f_RS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Arena=='Large',]$f_RS/mean(D_data_f[D_data_f$Arena=='Large',]$f_RS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Arena=='Large',]$f_RS/mean(D_data_f[D_data_f$Arena=='Large',]$f_RS))), TRUE)
  
  # Null (permuated) difference
  diff.random_female_arena[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Treat_diff_female_arena = sum(abs(diff.random_female_arena) >= as.numeric(abs(diff.observed_female_arena)))/   number_of_permutations
### Extract data and write results table ####
boot_data_BW_males_treat_group_size <-  as.data.frame(cbind("Male", "Population size", "Body mass", t_Treat_diff_male_pop, t_Treat_diff_male_pop_lower, t_Treat_diff_male_pop_upper, p_Treat_diff_male_pop))
names(boot_data_BW_males_treat_group_size)=c('V1','V2','V3','V4','V5','V6','V7')
boot_data_BW_females_treat_group_size <-  as.data.frame(cbind("Female", "Population size", "Body mass",t_Treat_diff_female_pop, t_Treat_diff_female_pop_lower, t_Treat_diff_female_pop_upper, p_Treat_diff_female_pop))
names(boot_data_BW_females_treat_group_size)=c('V1','V2','V3','V4','V5','V6','V7')
boot_data_BW_males_treat_arena <-  as.data.frame(cbind("Male", "Arena size", "Body mass", t_Treat_diff_male_arena, t_Treat_diff_male_arena_lower, t_Treat_diff_male_arena_upper, p_Treat_diff_male_arena))
names(boot_data_BW_males_treat_arena)=c('V1','V2','V3','V4','V5','V6','V7')
boot_data_BW_females_treat_arena<- as.data.frame(cbind("Female", "Arena size", "Body mass", t_Treat_diff_female_arena, t_Treat_diff_female_arena_lower, t_Treat_diff_female_arena_upper, p_Treat_diff_female_arena))
names(boot_data_BW_females_treat_arena)=c('V1','V2','V3','V4','V5','V6','V7')
Table_TreatComp_BM <- as.data.frame(as.matrix(rbind(boot_data_BW_males_treat_group_size,boot_data_BW_females_treat_group_size,
                                                    boot_data_BW_males_treat_arena,boot_data_BW_females_treat_arena)))
colnames(Table_TreatComp_BM)[1] <- "Sex"
colnames(Table_TreatComp_BM)[2] <- "Treatment"
colnames(Table_TreatComp_BM)[3] <- "Variance_component"
colnames(Table_TreatComp_BM)[4] <- "Variance"
colnames(Table_TreatComp_BM)[5] <- "l95_CI"
colnames(Table_TreatComp_BM)[6] <- "u95_CI"
colnames(Table_TreatComp_BM)[7] <- "p-value"
Table_TreatComp_BM[,4]=round(as.numeric(Table_TreatComp_BM[,4]),digits=2)
Table_TreatComp_BM[,5]=round(as.numeric(Table_TreatComp_BM[,5]),digits=2)
Table_TreatComp_BM[,6]=round(as.numeric(Table_TreatComp_BM[,6]),digits=2)
Table_TreatComp_BM[,7]=round(as.numeric(Table_TreatComp_BM[,7]),digits=3)
rownames(Table_TreatComp_BM) <- c()Table A3: Treatment comparisons for selection differentials on body mass including 95% confidence intervals. Negative effect sizes indicate larger values at lower density and positive effect sizes larger values at higher density.
kable(Table_TreatComp_BM)| Sex | Treatment | Variance_component | Variance | l95_CI | u95_CI | p-value | 
|---|---|---|---|---|---|---|
| Male | Population size | Body mass | 0.18 | -0.14 | 0.51 | 0.342 | 
| Female | Population size | Body mass | 0.24 | -0.11 | 0.59 | 0.208 | 
| Male | Arena size | Body mass | 0.12 | -0.21 | 0.45 | 0.530 | 
| Female | Arena size | Body mass | -0.27 | -0.61 | 0.09 | 0.164 | 
We used permutation tests to see if the (sexual) selection metrics differed between the sexes.
## Permutation tests for sex comparisons of (sexual) selection metrics ####
### Opportunity for sexual selection (I) ####
# Arena size
# Large
Sex_diff_Large_arena_I=c(I_Large_arena_Male_bootvar$t)-c(I_Large_arena_Female_bootvar$t)
t_Sex_diff_Large_arena_I=mean(Sex_diff_Large_arena_I,na.rm=TRUE)
t_Sex_diff_Large_arena_I_lower=quantile(Sex_diff_Large_arena_I,.025,na.rm=TRUE)
t_Sex_diff_Large_arena_I_upper=quantile(Sex_diff_Large_arena_I,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Large_arena$rel_m_RS,D_data_Large_arena$rel_f_RS)
diff.observed = var(na.omit((D_data_Large_arena$rel_m_RS))) - var(na.omit((D_data_Large_arena$rel_f_RS)))
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Large_arena$rel_m_RS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Large_arena$rel_f_RS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(b.random)) - var(na.omit(a.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Large_arena_I_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Small
Sex_diff_Small_arena_I=c(I_Small_arena_Male_bootvar$t)-c(I_Small_arena_Female_bootvar$t)
t_Sex_diff_Small_arena_I=mean(Sex_diff_Small_arena_I,na.rm=TRUE)
t_Sex_diff_Small_arena_I_lower=quantile(Sex_diff_Small_arena_I,.025,na.rm=TRUE)
t_Sex_diff_Small_arena_I_upper=quantile(Sex_diff_Small_arena_I,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Small_arena$rel_m_RS,D_data_Small_arena$rel_f_RS)
diff.observed = var(na.omit((D_data_Small_arena$rel_m_RS))) - var(na.omit((D_data_Small_arena$rel_f_RS)))
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Small_arena$rel_m_RS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Small_arena$rel_f_RS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(b.random)) - var(na.omit(a.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Small_arena_I_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Population size
# Small
Sex_diff_Small_pop_I=c(I_Small_pop_Male_bootvar$t)-c(I_Small_pop_Female_bootvar$t)
t_Sex_diff_Small_pop_I=mean(Sex_diff_Small_pop_I,na.rm=TRUE)
t_Sex_diff_Small_pop_I_lower=quantile(Sex_diff_Small_pop_I,.025,na.rm=TRUE)
t_Sex_diff_Small_pop_I_upper=quantile(Sex_diff_Small_pop_I,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Small_pop$rel_m_RS,D_data_Small_pop$rel_f_RS)
diff.observed = var(na.omit((D_data_Small_pop$rel_m_RS))) - var(na.omit((D_data_Small_pop$rel_f_RS)))
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Small_pop$rel_m_RS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Small_pop$rel_f_RS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(b.random)) - var(na.omit(a.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Small_pop_I_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Large
Sex_diff_Large_pop_I=c(I_Large_pop_Male_bootvar$t)-c(I_Large_pop_Female_bootvar$t)
t_Sex_diff_Large_pop_I=mean(Sex_diff_Large_pop_I,na.rm=TRUE)
t_Sex_diff_Large_pop_I_lower=quantile(Sex_diff_Large_pop_I,.025,na.rm=TRUE)
t_Sex_diff_Large_pop_I_upper=quantile(Sex_diff_Large_pop_I,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Large_pop$rel_m_RS,D_data_Large_pop$rel_f_RS)
diff.observed = var(na.omit(c(D_data_Large_pop$rel_m_RS))) - var(na.omit(c(D_data_Large_pop$rel_f_RS)))
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Large_pop$rel_m_RS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Large_pop$rel_f_RS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(b.random)) - var(na.omit(a.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Large_pop_I_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
### Opportnity for sexual selection (Is) ####
# Arena size
# Small
Sex_diff_Small_arena_Is=c(Is_Small_arena_Male_bootvar$t)-c(Is_Small_arena_Female_bootvar$t)
t_Sex_diff_Small_arena_Is=mean(Sex_diff_Small_arena_Is,na.rm=TRUE)
t_Sex_diff_Small_arena_Is_lower=quantile(Sex_diff_Small_arena_Is,.025,na.rm=TRUE)
t_Sex_diff_Small_arena_Is_upper=quantile(Sex_diff_Small_arena_Is,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Small_arena$rel_m_cMS,D_data_Small_arena$rel_f_cMS)
diff.observed = var(na.omit(c(D_data_Small_arena$rel_m_cMS))) - var(na.omit(c(D_data_Small_arena$rel_f_cMS)))
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Small_arena$rel_m_cMS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Small_arena$rel_f_cMS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(b.random)) - var(na.omit(a.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Small_arena_Is_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Large
Sex_diff_Large_arena_Is=c(Is_Large_arena_Male_bootvar$t)-c(Is_Large_arena_Female_bootvar$t)
t_Sex_diff_Large_arena_Is=mean(Sex_diff_Large_arena_Is,na.rm=TRUE)
t_Sex_diff_Large_arena_Is_lower=quantile(Sex_diff_Large_arena_Is,.025,na.rm=TRUE)
t_Sex_diff_Large_arena_Is_upper=quantile(Sex_diff_Large_arena_Is,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Large_arena$rel_m_cMS,D_data_Large_arena$rel_f_cMS)
diff.observed = var(na.omit(c(D_data_Large_arena$rel_m_cMS))) - var(na.omit(c(D_data_Large_arena$rel_f_cMS)))
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Large_arena$rel_m_cMS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Large_arena$rel_f_cMS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(b.random)) - var(na.omit(a.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Large_arena_Is_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Population size
# Small
Sex_diff_Small_pop_Is=c(Is_Small_pop_Male_bootvar$t)-c(Is_Small_pop_Female_bootvar$t)
t_Sex_diff_Small_pop_Is=mean(Sex_diff_Small_pop_Is,na.rm=TRUE)
t_Sex_diff_Small_pop_Is_lower=quantile(Sex_diff_Small_pop_Is,.025,na.rm=TRUE)
t_Sex_diff_Small_pop_Is_upper=quantile(Sex_diff_Small_pop_Is,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Small_pop$rel_m_cMS,D_data_Small_pop$rel_f_cMS)
diff.observed = var(na.omit(c(D_data_Small_pop$rel_m_cMS))) - var(na.omit(c(D_data_Small_pop$rel_f_cMS)))
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Small_pop$rel_m_cMS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Small_pop$rel_f_cMS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(b.random)) - var(na.omit(a.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Small_pop_Is_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Large
Sex_diff_Large_pop_Is=c(Is_Large_pop_Male_bootvar$t)-c(Is_Large_pop_Female_bootvar$t)
t_Sex_diff_Large_pop_Is=mean(Sex_diff_Large_pop_Is,na.rm=TRUE)
t_Sex_diff_Large_pop_Is_lower=quantile(Sex_diff_Large_pop_Is,.025,na.rm=TRUE)
t_Sex_diff_Large_pop_Is_upper=quantile(Sex_diff_Large_pop_Is,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data=c(D_data_Large_pop$rel_m_cMS,D_data_Large_pop$rel_f_cMS)
diff.observed = var(na.omit(c(D_data_Large_pop$rel_m_cMS))) - var(na.omit(c(D_data_Large_pop$rel_f_cMS)))
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data), length(c(D_data_Large_pop$rel_m_cMS)), TRUE)
  b.random = sample (na.omit(comb_data), length(c(D_data_Large_pop$rel_f_cMS)), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = var(na.omit(b.random)) - var(na.omit(a.random))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Large_pop_Is_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
### Sexual selection gradient ####
# Arena size
# Large
Sex_diff_Large_arena_B=c(B_Large_arena_Male_bootvar$t)-c(B_Large_arena_Female_bootvar$t)
t_Sex_diff_Large_arena_B=mean(Sex_diff_Large_arena_B,na.rm=TRUE)
t_Sex_diff_Large_arena_B_lower=quantile(Sex_diff_Large_arena_B,.025,na.rm=TRUE)
t_Sex_diff_Large_arena_B_upper=quantile(Sex_diff_Large_arena_B,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Large_arena$rel_m_RS, D_data_Large_arena$rel_f_RS)
comb_data2=c(D_data_Large_arena$rel_m_cMS,D_data_Large_arena$rel_f_cMS)
diff.observed = lm(D_data_Large_arena$rel_m_RS ~D_data_Large_arena$rel_m_cMS)$coefficients[2] - lm(D_data_Large_arena$rel_f_RS ~D_data_Large_arena$rel_f_cMS)$coefficients[2]
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Large_arena$rel_m_RS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Small_arena$rel_m_RS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Large_arena$rel_m_cMS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Small_arena$rel_m_cMS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(a.random ~c.random)$coefficients[2] - lm(b.random ~d.random)$coefficients[2]
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Large_arena_B_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Small
Sex_diff_Small_arena_B=c(B_Small_arena_Male_bootvar$t)-c(B_Small_arena_Female_bootvar$t)
t_Sex_diff_Small_arena_B=mean(Sex_diff_Small_arena_B,na.rm=TRUE)
t_Sex_diff_Small_arena_B_lower=quantile(Sex_diff_Small_arena_B,.025,na.rm=TRUE)
t_Sex_diff_Small_arena_B_upper=quantile(Sex_diff_Small_arena_B,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Small_arena$rel_m_RS, D_data_Small_arena$rel_f_RS)
comb_data2=c(D_data_Small_arena$rel_m_cMS,D_data_Small_arena$rel_f_cMS)
diff.observed = lm(D_data_Small_arena$rel_m_RS ~D_data_Small_arena$rel_m_cMS)$coefficients[2] - lm(D_data_Small_arena$rel_f_RS ~D_data_Small_arena$rel_f_cMS)$coefficients[2]
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Small_arena$rel_m_RS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Small_arena$rel_f_RS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Small_arena$rel_m_cMS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Small_arena$rel_f_cMS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(a.random ~c.random)$coefficients[2] - lm(b.random ~d.random)$coefficients[2]
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Small_arena_B_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Population size
# Large
Sex_diff_Large_pop_B=c(B_Large_pop_Male_bootvar$t)-c(B_Large_pop_Female_bootvar$t)
t_Sex_diff_Large_pop_B=mean(Sex_diff_Large_pop_B,na.rm=TRUE)
t_Sex_diff_Large_pop_B_lower=quantile(Sex_diff_Large_pop_B,.025,na.rm=TRUE)
t_Sex_diff_Large_pop_B_upper=quantile(Sex_diff_Large_pop_B,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Large_pop$rel_m_RS, D_data_Large_pop$rel_f_RS)
comb_data2=c(D_data_Large_pop$rel_m_cMS,D_data_Large_pop$rel_f_cMS)
diff.observed = lm(D_data_Large_pop$rel_m_RS ~D_data_Large_pop$rel_m_cMS)$coefficients[2] - lm(D_data_Large_pop$rel_f_RS ~D_data_Large_pop$rel_f_cMS)$coefficients[2]
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Small_pop$rel_m_RS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Large_pop$rel_m_RS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Small_pop$rel_m_cMS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Large_pop$rel_m_cMS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(a.random ~c.random)$coefficients[2] - lm(b.random ~d.random)$coefficients[2]
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Large_pop_B_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Small
Sex_diff_Small_pop_B=c(B_Small_pop_Male_bootvar$t)-c(B_Small_pop_Female_bootvar$t)
t_Sex_diff_Small_pop_B=mean(Sex_diff_Small_pop_B,na.rm=TRUE)
t_Sex_diff_Small_pop_B_lower=quantile(Sex_diff_Small_pop_B,.025,na.rm=TRUE)
t_Sex_diff_Small_pop_B_upper=quantile(Sex_diff_Small_pop_B,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Small_pop$rel_m_RS, D_data_Small_pop$rel_f_RS)
comb_data2=c(D_data_Small_pop$rel_m_cMS,D_data_Small_pop$rel_f_cMS)
diff.observed = lm(D_data_Small_pop$rel_m_RS ~D_data_Small_pop$rel_m_cMS)$coefficients[2] - lm(D_data_Small_pop$rel_f_RS ~D_data_Small_pop$rel_f_cMS)$coefficients[2]
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Small_pop$rel_m_RS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Small_pop$rel_f_RS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Small_pop$rel_m_cMS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Small_pop$rel_f_cMS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(a.random ~c.random)$coefficients[2] - lm(b.random ~d.random)$coefficients[2]
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Small_pop_B_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
### Jones index ####
# Arena size
# Large
Sex_diff_Large_arena_S=c(S_Large_arena_Male_bootvar$t)-c(S_Large_arena_Female_bootvar$t)
t_Sex_diff_Large_arena_S=mean(Sex_diff_Large_arena_S,na.rm=TRUE)
t_Sex_diff_Large_arena_S_lower=quantile(Sex_diff_Large_arena_S,.025,na.rm=TRUE)
t_Sex_diff_Large_arena_S_upper=quantile(Sex_diff_Large_arena_S,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Large_arena$rel_m_cMS, D_data_Large_arena$rel_f_cMS)
comb_data2=c(D_data_Large_arena$rel_m_RS, D_data_Large_arena$rel_f_RS)
diff.observed = lm(D_data_Large_arena$rel_m_RS ~D_data_Large_arena$rel_m_cMS)$coefficients[2]*sqrt(var(D_data_Large_arena$rel_m_cMS, na.rm=TRUE)) - lm(D_data_Large_arena$rel_f_RS ~D_data_Large_arena$rel_f_cMS)$coefficients[2]*sqrt(var(D_data_Large_arena$rel_f_cMS, na.rm=TRUE))
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Large_arena$rel_m_cMS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Large_arena$rel_f_cMS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Large_arena$rel_m_RS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Large_arena$rel_f_RS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(c.random ~a.random)$coefficients[2]*sqrt(var(a.random, na.rm=TRUE)) - lm(d.random ~b.random)$coefficients[2]*sqrt(var(b.random, na.rm=TRUE))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Large_arena_S_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Small
Sex_diff_Small_arena_S=c(S_Small_arena_Male_bootvar$t)-c(S_Small_arena_Female_bootvar$t)
t_Sex_diff_Small_arena_S=mean(Sex_diff_Small_arena_S,na.rm=TRUE)
t_Sex_diff_Small_arena_S_lower=quantile(Sex_diff_Small_arena_S,.025,na.rm=TRUE)
t_Sex_diff_Small_arena_S_upper=quantile(Sex_diff_Small_arena_S,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Small_arena$rel_m_cMS, D_data_Small_arena$rel_f_cMS)
comb_data2=c(D_data_Small_arena$rel_m_RS, D_data_Small_arena$rel_f_RS)
diff.observed = lm(D_data_Small_arena$rel_m_RS ~D_data_Small_arena$rel_m_cMS)$coefficients[2]*sqrt(var(D_data_Small_arena$rel_m_cMS, na.rm=TRUE)) - lm(D_data_Small_arena$rel_f_RS ~D_data_Small_arena$rel_f_cMS)$coefficients[2]*sqrt(var(D_data_Small_arena$rel_f_cMS, na.rm=TRUE))
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Small_arena$rel_m_cMS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Small_arena$rel_f_cMS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Small_arena$rel_m_RS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Small_arena$rel_f_RS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(c.random ~a.random)$coefficients[2]*sqrt(var(a.random, na.rm=TRUE)) - lm(d.random ~b.random)$coefficients[2]*sqrt(var(b.random, na.rm=TRUE))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Small_arena_S_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Population size
# Small
Sex_diff_Small_pop_S=c(S_Small_pop_Male_bootvar$t)-c(S_Small_pop_Female_bootvar$t)
t_Sex_diff_Small_pop_S=mean(Sex_diff_Small_pop_S,na.rm=TRUE)
t_Sex_diff_Small_pop_S_lower=quantile(Sex_diff_Small_pop_S,.025,na.rm=TRUE)
t_Sex_diff_Small_pop_S_upper=quantile(Sex_diff_Small_pop_S,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Small_pop$rel_m_cMS, D_data_Small_pop$rel_f_cMS)
comb_data2=c(D_data_Small_pop$rel_m_RS, D_data_Small_pop$rel_f_RS)
diff.observed = lm(D_data_Small_pop$rel_m_RS ~D_data_Small_pop$rel_m_cMS)$coefficients[2]*sqrt(var(D_data_Small_pop$rel_m_cMS, na.rm=TRUE)) - lm(D_data_Small_pop$rel_f_RS ~D_data_Small_pop$rel_f_cMS)$coefficients[2]*sqrt(var(D_data_Small_pop$rel_f_cMS, na.rm=TRUE))
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Small_pop$rel_m_cMS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Small_pop$rel_f_cMS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Small_pop$rel_m_RS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Small_pop$rel_f_RS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(c.random ~a.random)$coefficients[2]*sqrt(var(a.random, na.rm=TRUE)) - lm(d.random ~b.random)$coefficients[2]*sqrt(var(b.random, na.rm=TRUE))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Small_pop_S_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
# Large
Sex_diff_Large_pop_S=c(S_Large_pop_Male_bootvar$t)-c(S_Large_pop_Female_bootvar$t)
t_Sex_diff_Large_pop_S=mean(Sex_diff_Large_pop_S,na.rm=TRUE)
t_Sex_diff_Large_pop_S_lower=quantile(Sex_diff_Large_pop_S,.025,na.rm=TRUE)
t_Sex_diff_Large_pop_S_upper=quantile(Sex_diff_Large_pop_S,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data1=c(D_data_Large_pop$rel_m_cMS, D_data_Large_pop$rel_f_cMS)
comb_data2=c(D_data_Large_pop$rel_m_RS, D_data_Large_pop$rel_f_RS)
diff.observed = lm(D_data_Large_pop$rel_m_RS ~D_data_Large_pop$rel_m_cMS)$coefficients[2]*sqrt(var(D_data_Large_pop$rel_m_cMS, na.rm=TRUE)) - lm(D_data_Large_pop$rel_f_RS ~D_data_Large_pop$rel_f_cMS)$coefficients[2]*sqrt(var(D_data_Large_pop$rel_f_cMS, na.rm=TRUE))
number_of_permutations = 100000
diff.random = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data1), length(D_data_Large_pop$rel_m_cMS), TRUE)
  b.random = sample (na.omit(comb_data1), length(D_data_Large_pop$rel_f_cMS), TRUE)
  c.random = sample (na.omit(comb_data2), length(D_data_Large_pop$rel_f_RS), TRUE)
  d.random = sample (na.omit(comb_data2), length(D_data_Large_pop$rel_m_RS), TRUE)
  
  # Null (permuated) difference
  diff.random[i] = lm(c.random ~a.random)$coefficients[2]*sqrt(var(a.random, na.rm=TRUE)) - lm(d.random ~b.random)$coefficients[2]*sqrt(var(b.random, na.rm=TRUE))
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
t_Sex_diff_Large_pop_S_p = sum(abs(diff.random) >= as.numeric(abs(diff.observed)))/   number_of_permutations
### Extract data and write results table ####
CompSex_Table_Large_arena_I <- as.data.frame(cbind("Large arena size", "Opportunity for selection", t_Sex_diff_Large_arena_I, t_Sex_diff_Large_arena_I_lower, t_Sex_diff_Large_arena_I_upper, t_Sex_diff_Large_arena_I_p))
names(CompSex_Table_Large_arena_I)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Large_pop_I <- as.data.frame(cbind("Large population size", "Opportunity for selection", t_Sex_diff_Large_pop_I, t_Sex_diff_Large_pop_I_lower, t_Sex_diff_Large_pop_I_upper, t_Sex_diff_Large_pop_I_p))
names(CompSex_Table_Large_pop_I)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Large_arena_Is <- as.data.frame(cbind("Large arena size", "Opportunity for sexual selection", t_Sex_diff_Large_arena_Is, t_Sex_diff_Large_arena_Is_lower, t_Sex_diff_Large_arena_Is_upper, t_Sex_diff_Large_arena_Is_p))
names(CompSex_Table_Large_arena_Is)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Large_pop_Is <- as.data.frame(cbind("Large population size", "Opportunity for sexual selection", t_Sex_diff_Large_pop_Is, t_Sex_diff_Large_pop_Is_lower, t_Sex_diff_Large_pop_Is_upper, t_Sex_diff_Large_pop_Is_p))
names(CompSex_Table_Large_pop_Is)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Large_arena_B <- as.data.frame(cbind("Large arena size", "Bateman gradient", t_Sex_diff_Large_arena_B, t_Sex_diff_Large_arena_B_lower, t_Sex_diff_Large_arena_B_upper, t_Sex_diff_Large_arena_B_p))
names(CompSex_Table_Large_arena_B)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Large_pop_B <- as.data.frame(cbind("Large population size", "Bateman gradient", t_Sex_diff_Large_pop_B, t_Sex_diff_Large_pop_B_lower, t_Sex_diff_Large_pop_B_upper, t_Sex_diff_Large_pop_B_p))
names(CompSex_Table_Large_pop_B)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Large_arena_S <- as.data.frame(cbind("Large arena size", "Jones index", t_Sex_diff_Large_arena_S, t_Sex_diff_Large_arena_S_lower, t_Sex_diff_Large_arena_S_upper, t_Sex_diff_Large_arena_S_p))
names(CompSex_Table_Large_arena_S)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Large_pop_S <- as.data.frame(cbind("Large population size", "Jones index", t_Sex_diff_Large_pop_S, t_Sex_diff_Large_pop_S_lower, t_Sex_diff_Large_pop_S_upper, t_Sex_diff_Large_pop_S_p))
names(CompSex_Table_Large_pop_S)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Small_arena_I <- as.data.frame(cbind("Small arena size", "Opportunity for selection", t_Sex_diff_Small_arena_I, t_Sex_diff_Small_arena_I_lower, t_Sex_diff_Small_arena_I_upper, t_Sex_diff_Small_arena_I_p))
names(CompSex_Table_Small_arena_I)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Small_pop_I <- as.data.frame(cbind("Small population size", "Opportunity for selection", t_Sex_diff_Small_pop_I, t_Sex_diff_Small_pop_I_lower, t_Sex_diff_Small_pop_I_upper, t_Sex_diff_Small_pop_I_p))
names(CompSex_Table_Small_pop_I)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Small_arena_Is <- as.data.frame(cbind("Small arena size", "Opportunity for sexual selection", t_Sex_diff_Small_arena_Is, t_Sex_diff_Small_arena_Is_lower, t_Sex_diff_Small_arena_Is_upper, t_Sex_diff_Small_arena_Is_p))
names(CompSex_Table_Small_arena_Is)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Small_pop_Is <- as.data.frame(cbind("Small population size", "Opportunity for sexual selection", t_Sex_diff_Small_pop_Is, t_Sex_diff_Small_pop_Is_lower, t_Sex_diff_Small_pop_Is_upper, t_Sex_diff_Small_pop_Is_p))
names(CompSex_Table_Small_pop_Is)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Small_arena_B <- as.data.frame(cbind("Small arena size", "Bateman gradient", t_Sex_diff_Small_arena_B, t_Sex_diff_Small_arena_B_lower, t_Sex_diff_Small_arena_B_upper, t_Sex_diff_Small_arena_B_p))
names(CompSex_Table_Small_arena_B)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Small_pop_B <- as.data.frame(cbind("Small population size", "Bateman gradient", t_Sex_diff_Small_pop_B, t_Sex_diff_Small_pop_B_lower, t_Sex_diff_Small_pop_B_upper, t_Sex_diff_Small_pop_B_p))
names(CompSex_Table_Small_pop_B)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Small_arena_S <- as.data.frame(cbind("Small arena size", "Jones index", t_Sex_diff_Small_arena_S, t_Sex_diff_Small_arena_S_lower, t_Sex_diff_Small_arena_S_upper, t_Sex_diff_Small_arena_S_p))
names(CompSex_Table_Small_arena_S)=c('V1','V2','V3','V4','V5','V6')
CompSex_Table_Small_pop_S <- as.data.frame(cbind("Small population size", "Jones index", t_Sex_diff_Small_pop_S, t_Sex_diff_Small_pop_S_lower, t_Sex_diff_Small_pop_S_upper, t_Sex_diff_Small_pop_S_p))
names(CompSex_Table_Small_pop_S)=c('V1','V2','V3','V4','V5','V6')
Table_BatemanMetrics_SexComp <- as.data.frame(as.matrix(rbind(CompSex_Table_Small_pop_I,CompSex_Table_Small_pop_Is,
                                                              CompSex_Table_Small_pop_B,CompSex_Table_Small_pop_S,
                                                              CompSex_Table_Large_pop_I,CompSex_Table_Large_pop_Is,
                                                              CompSex_Table_Large_pop_B,CompSex_Table_Large_pop_S,
                                                              CompSex_Table_Large_arena_I,CompSex_Table_Large_arena_Is,
                                                              CompSex_Table_Large_arena_B,CompSex_Table_Large_arena_S,
                                                              CompSex_Table_Small_arena_I,CompSex_Table_Small_arena_Is,
                                                              CompSex_Table_Small_arena_B,CompSex_Table_Small_arena_S)))
colnames(Table_BatemanMetrics_SexComp)[1] <- "Treatment"
colnames(Table_BatemanMetrics_SexComp)[2] <- "Selection_metric"
colnames(Table_BatemanMetrics_SexComp)[3] <- "Variance"
colnames(Table_BatemanMetrics_SexComp)[4] <- "l95_CI"
colnames(Table_BatemanMetrics_SexComp)[5] <- "u95_CI"
colnames(Table_BatemanMetrics_SexComp)[6] <- "p-value"
Table_BatemanMetrics_SexComp[,3]=round(as.numeric(Table_BatemanMetrics_SexComp[,3]),digits=2)
Table_BatemanMetrics_SexComp[,4]=round(as.numeric(Table_BatemanMetrics_SexComp[,4]),digits=2)
Table_BatemanMetrics_SexComp[,5]=round(as.numeric(Table_BatemanMetrics_SexComp[,5]),digits=2)
Table_BatemanMetrics_SexComp[,6]=round(as.numeric(Table_BatemanMetrics_SexComp[,6]),digits=3)
rownames(Table_BatemanMetrics_SexComp) <- c()Table A4: Sex comparisons for (sexual) selection metrics including 95% confidence intervals. Negative effect sizes indicate larger values at lower density and positive effect sizes larger values at higher density.
kable(Table_BatemanMetrics_SexComp)| Treatment | Selection_metric | Variance | l95_CI | u95_CI | p-value | 
|---|---|---|---|---|---|
| Small population size | Opportunity for selection | -0.04 | -0.52 | 0.52 | 0.805 | 
| Small population size | Opportunity for sexual selection | -0.04 | -0.16 | 0.08 | 0.364 | 
| Small population size | Bateman gradient | 0.55 | -0.12 | 1.26 | 0.048 | 
| Small population size | Jones index | 0.23 | -0.11 | 0.59 | 0.079 | 
| Large population size | Opportunity for selection | -0.03 | -0.29 | 0.27 | 0.787 | 
| Large population size | Opportunity for sexual selection | -0.21 | -0.50 | 0.06 | 0.029 | 
| Large population size | Bateman gradient | -0.31 | -0.73 | 0.08 | 0.133 | 
| Large population size | Jones index | -0.32 | -0.60 | -0.04 | 0.018 | 
| Large arena size | Opportunity for selection | -0.09 | -0.36 | 0.23 | 0.413 | 
| Large arena size | Opportunity for sexual selection | 0.03 | -0.19 | 0.25 | 0.724 | 
| Large arena size | Bateman gradient | -0.44 | -0.94 | 0.03 | 0.055 | 
| Large arena size | Jones index | -0.23 | -0.54 | 0.08 | 0.061 | 
| Small arena size | Opportunity for selection | 0.02 | -0.44 | 0.57 | 0.907 | 
| Small arena size | Opportunity for sexual selection | -0.24 | -0.47 | -0.03 | 0.002 | 
| Small arena size | Bateman gradient | 0.51 | 0.01 | 1.07 | 0.039 | 
| Small arena size | Jones index | 0.12 | -0.18 | 0.44 | 0.404 | 
We used permutation tests to see if the mating differential of body mass differed between the sexes.
## Permutation test for sex differences in mating differential on body mass ####
# Population size
# Small
Sex_diff_Small_pop=c(boot_BW_males_group_size_small$t)-c(boot_BW_females_group_size_small$t)
t_Sex_diff_Small_pop=mean(Sex_diff_Small_pop,na.rm=TRUE)
t_Sex_diff_Small_pop_lower=quantile(Sex_diff_Small_pop,.025,na.rm=TRUE)
t_Sex_diff_Small_pop_upper=quantile(Sex_diff_Small_pop,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS),
               D_data_f[D_data_f$Gr_size=='SG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_cMS))
comb_data_BM=c(D_data_m[D_data_m$Gr_size=='SG',]$stder_BM_focal,
               D_data_f[D_data_f$Gr_size=='SG',]$stder_BM_focal)
diff.observed_Small_pop = cov(D_data_m[D_data_m$Gr_size=='SG',]$stder_BM_focal,D_data_m[D_data_m$Gr_size=='SG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS),use="complete.obs",method = "pearson") - cov(D_data_f[D_data_f$Gr_size=='SG',]$stder_BM_focal,D_data_f[D_data_f$Gr_size=='SG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_cMS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_Small_pop = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_cMS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Gr_size=='SG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_cMS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Gr_size=='SG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_cMS))), TRUE)
  
  # Null (permuated) difference
  diff.random_Small_pop[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Sex_diff_Small_pop = sum((diff.random_Small_pop) >= as.numeric((diff.observed_Small_pop)))/   number_of_permutations
# Population size
# Large
Sex_diff_large_pop=c(boot_BW_males_group_size_large$t)-c(boot_BW_females_group_size_large$t)
t_Sex_diff_large_pop=mean(p_Sex_diff_Small_pop,na.rm=TRUE)
t_Sex_diff_large_pop_lower=quantile(p_Sex_diff_Small_pop,.025,na.rm=TRUE)
t_Sex_diff_large_pop_upper=quantile(p_Sex_diff_Small_pop,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS),
               D_data_f[D_data_f$Gr_size=='LG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS))
comb_data_BM=c(D_data_m[D_data_m$Gr_size=='LG',]$stder_BM_focal,
               D_data_f[D_data_f$Gr_size=='LG',]$stder_BM_focal)
diff.observed_large_pop = cov(D_data_m[D_data_m$Gr_size=='LG',]$stder_BM_focal,D_data_m[D_data_m$Gr_size=='LG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS),use="complete.obs",method = "pearson") - cov(D_data_f[D_data_f$Gr_size=='LG',]$stder_BM_focal,D_data_f[D_data_f$Gr_size=='LG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_large_pop = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_cMS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_cMS))), TRUE)
  
  # Null (permuated) difference
  diff.random_large_pop[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Sex_diff_large_pop = sum(abs(diff.random_large_pop) >= as.numeric(abs(diff.observed_large_pop)))/   number_of_permutations
# Arena size
# Large
Sex_diff_large_arena=c(boot_BW_males_arena_large$t)-c(boot_BW_females_arena_large$t)
t_Sex_diff_large_arena=mean(Sex_diff_large_arena,na.rm=TRUE)
t_Sex_diff_large_arena_lower=quantile(Sex_diff_large_arena,.025,na.rm=TRUE)
t_Sex_diff_large_arena_upper=quantile(Sex_diff_large_arena,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_m[D_data_m$Arena=='Large',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Large',]$m_cMS),
               D_data_f[D_data_f$Arena=='Large',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Large',]$f_cMS))
comb_data_BM=c(D_data_m[D_data_m$Arena=='Large',]$stder_BM_focal,
               D_data_f[D_data_f$Arena=='Large',]$stder_BM_focal)
diff.observed_large_arena = cov(D_data_m[D_data_m$Arena=='Large',]$stder_BM_focal,D_data_m[D_data_m$Arena=='Large',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Large',]$m_cMS),use="complete.obs",method = "pearson") - cov(D_data_f[D_data_f$Arena=='Large',]$stder_BM_focal,D_data_f[D_data_f$Arena=='Large',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Large',]$f_cMS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_large_arena = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Arena=='Large',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Large',]$m_cMS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Arena=='Large',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Large',]$m_cMS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Arena=='Large',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Large',]$f_cMS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Arena=='Large',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Large',]$f_cMS))), TRUE)
  
  # Null (permuated) difference
  diff.random_large_arena[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Sex_diff_large_arena = sum(abs(diff.random_large_arena) >= as.numeric(abs(diff.observed_large_arena)))/   number_of_permutations
# Small
Sex_diff_small_arena=c(boot_BW_males_arena_small$t)-c(boot_BW_females_arena_small$t)
t_Sex_diff_small_arena=mean(Sex_diff_small_arena,na.rm=TRUE)
t_Sex_diff_small_arena_lower=quantile(Sex_diff_small_arena,.025,na.rm=TRUE)
t_Sex_diff_small_arena_upper=quantile(Sex_diff_small_arena,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_m[D_data_m$Arena=='Small',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Small',]$m_cMS),
               D_data_f[D_data_f$Arena=='Small',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Small',]$f_cMS))
comb_data_BM=c(D_data_m[D_data_m$Arena=='Small',]$stder_BM_focal,
               D_data_f[D_data_f$Arena=='Small',]$stder_BM_focal)
diff.observed_small_arena = cov(D_data_m[D_data_m$Arena=='Small',]$stder_BM_focal,D_data_m[D_data_m$Arena=='Small',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Small',]$m_cMS),use="complete.obs",method = "pearson") - cov(D_data_f[D_data_f$Arena=='Small',]$stder_BM_focal,D_data_f[D_data_f$Arena=='Small',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Small',]$f_cMS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_small_arena = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Arena=='Small',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Small',]$m_cMS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Arena=='Small',]$m_cMS/mean(D_data_m[D_data_m$Arena=='Small',]$m_cMS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Arena=='Small',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Small',]$f_cMS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Arena=='Small',]$f_cMS/mean(D_data_f[D_data_f$Arena=='Small',]$f_cMS))), TRUE)
  
  # Null (permuated) difference
  diff.random_small_arena[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Sex_diff_small_arena = sum(abs(diff.random_small_arena) >= as.numeric(abs(diff.observed_small_arena)))/   number_of_permutations
### Extract data and write results table ####
boot_data_matingDif_small_group_size <-  as.data.frame(cbind("Small group size", "Mating differential", t_Sex_diff_Small_pop, t_Sex_diff_Small_pop_lower, t_Sex_diff_Small_pop_upper, p_Sex_diff_Small_pop))
names(boot_data_matingDif_small_group_size)=c('V1','V2','V3','V4','V5','V6')
boot_data_matingDif_large_group_size <-  as.data.frame(cbind("Large group size", "Mating differential", t_Sex_diff_large_pop, t_Sex_diff_large_pop_lower, t_Sex_diff_large_pop_upper, p_Sex_diff_large_pop))
names(boot_data_matingDif_large_group_size)=c('V1','V2','V3','V4','V5','V6')
boot_data_matingDif_large_arena <-  as.data.frame(cbind("Large arena size", "Mating differential", t_Sex_diff_large_arena, t_Sex_diff_large_arena_lower, t_Sex_diff_large_arena_upper, p_Sex_diff_large_arena))
names(boot_data_matingDif_large_arena)=c('V1','V2','V3','V4','V5','V6')
boot_data_matingDif_small_arena_size <-  as.data.frame(cbind("Small arena size", "Mating differential", t_Sex_diff_small_arena, t_Sex_diff_small_arena_lower, t_Sex_diff_small_arena_upper, p_Sex_diff_small_arena))
names(boot_data_matingDif_small_arena_size)=c('V1','V2','V3','V4','V5','V6')
Table_SexComp_BM_MatDif <- as.data.frame(as.matrix(rbind(boot_data_matingDif_small_group_size,boot_data_matingDif_large_group_size,
                                                  boot_data_matingDif_large_arena,boot_data_matingDif_small_arena_size)))
colnames(Table_SexComp_BM_MatDif)[1] <- "Treatment"
colnames(Table_SexComp_BM_MatDif)[2] <- "Variance_component"
colnames(Table_SexComp_BM_MatDif)[3] <- "Variance"
colnames(Table_SexComp_BM_MatDif)[4] <- "l95_CI"
colnames(Table_SexComp_BM_MatDif)[5] <- "u95_CI"
colnames(Table_SexComp_BM_MatDif)[6] <- "p-value"
Table_SexComp_BM_MatDif[,3]=round(as.numeric(Table_SexComp_BM_MatDif[,3]),digits=2)
Table_SexComp_BM_MatDif[,4]=round(as.numeric(Table_SexComp_BM_MatDif[,4]),digits=2)
Table_SexComp_BM_MatDif[,5]=round(as.numeric(Table_SexComp_BM_MatDif[,5]),digits=2)
Table_SexComp_BM_MatDif[,6]=round(as.numeric(Table_SexComp_BM_MatDif[,6]),digits=3)
rownames(Table_SexComp_BM_MatDif) <- c()Table A5: Sex comparisons for mating differentials on body mass including 95% confidence intervals. Negative effect sizes indicate larger values at lower density and positive effect sizes larger values at higher density.
kable(Table_SexComp_BM_MatDif)| Treatment | Variance_component | Variance | l95_CI | u95_CI | p-value | 
|---|---|---|---|---|---|
| Small group size | Mating differential | -0.21 | -0.53 | 0.11 | 0.964 | 
| Large group size | Mating differential | 0.96 | 0.96 | 0.96 | 0.012 | 
| Large arena size | Mating differential | -0.06 | -0.39 | 0.27 | 0.078 | 
| Small arena size | Mating differential | -0.44 | -0.80 | -0.09 | 0.013 | 
We used permutation tests to see if the selection differential of body mass differed between the sexes.
## Permutation test for sex differences in selection differential on body mass ####
# Population size
# Small
Sex_diff_Small_pop=c(boot_BW_males_group_size_small$t)-c(boot_BW_females_group_size_small$t)
t_Sex_diff_Small_pop=mean(Sex_diff_Small_pop,na.rm=TRUE)
t_Sex_diff_Small_pop_lower=quantile(Sex_diff_Small_pop,.025,na.rm=TRUE)
t_Sex_diff_Small_pop_upper=quantile(Sex_diff_Small_pop,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_m[D_data_m$Gr_size=='SG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_RS),
               D_data_f[D_data_f$Gr_size=='SG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_RS))
comb_data_BM=c(D_data_m[D_data_m$Gr_size=='SG',]$stder_BM_focal,
               D_data_f[D_data_f$Gr_size=='SG',]$stder_BM_focal)
diff.observed_Small_pop = cov(D_data_m[D_data_m$Gr_size=='SG',]$stder_BM_focal,D_data_m[D_data_m$Gr_size=='SG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_RS),use="complete.obs",method = "pearson") - cov(D_data_f[D_data_f$Gr_size=='SG',]$stder_BM_focal,D_data_f[D_data_f$Gr_size=='SG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_RS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_Small_pop = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Gr_size=='SG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_RS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Gr_size=='SG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='SG',]$m_RS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Gr_size=='SG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_RS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Gr_size=='SG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='SG',]$f_RS))), TRUE)
  
  # Null (permuated) difference
  diff.random_Small_pop[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Sex_diff_Small_pop = sum((diff.random_Small_pop) >= as.numeric((diff.observed_Small_pop)))/   number_of_permutations
# Large
Sex_diff_large_pop=c(boot_BW_males_group_size_large$t)-c(boot_BW_females_group_size_large$t)
t_Sex_diff_large_pop=mean(Sex_diff_large_pop,na.rm=TRUE)
t_Sex_diff_large_pop_lower=quantile(Sex_diff_large_pop,.025,na.rm=TRUE)
t_Sex_diff_large_pop_upper=quantile(Sex_diff_large_pop,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_m[D_data_m$Gr_size=='LG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_RS),
               D_data_f[D_data_f$Gr_size=='LG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_RS))
comb_data_BM=c(D_data_m[D_data_m$Gr_size=='LG',]$stder_BM_focal,
               D_data_f[D_data_f$Gr_size=='LG',]$stder_BM_focal)
diff.observed_large_pop = cov(D_data_m[D_data_m$Gr_size=='LG',]$stder_BM_focal,D_data_m[D_data_m$Gr_size=='LG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_RS),use="complete.obs",method = "pearson") - cov(D_data_f[D_data_f$Gr_size=='LG',]$stder_BM_focal,D_data_f[D_data_f$Gr_size=='LG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_RS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_large_pop = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Gr_size=='LG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_RS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Gr_size=='LG',]$m_RS/mean(D_data_m[D_data_m$Gr_size=='LG',]$m_RS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Gr_size=='LG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_RS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Gr_size=='LG',]$f_RS/mean(D_data_f[D_data_f$Gr_size=='LG',]$f_RS))), TRUE)
  
  # Null (permuated) difference
  diff.random_large_pop[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Sex_diff_large_pop = sum(abs(diff.random_large_pop) >= as.numeric(abs(diff.observed_large_pop)))/   number_of_permutations
# Arena size
# Large
Sex_diff_large_arena=c(boot_BW_males_arena_large$t)-c(boot_BW_females_arena_large$t)
t_Sex_diff_large_arena=mean(Sex_diff_large_arena,na.rm=TRUE)
t_Sex_diff_large_arena_lower=quantile(Sex_diff_large_arena,.025,na.rm=TRUE)
t_Sex_diff_large_arena_upper=quantile(Sex_diff_large_arena,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_m[D_data_m$Arena=='Large',]$m_RS/mean(D_data_m[D_data_m$Arena=='Large',]$m_RS),
               D_data_f[D_data_f$Arena=='Large',]$f_RS/mean(D_data_f[D_data_f$Arena=='Large',]$f_RS))
comb_data_BM=c(D_data_m[D_data_m$Arena=='Large',]$stder_BM_focal,
               D_data_f[D_data_f$Arena=='Large',]$stder_BM_focal)
diff.observed_large_arena = cov(D_data_m[D_data_m$Arena=='Large',]$stder_BM_focal,D_data_m[D_data_m$Arena=='Large',]$m_RS/mean(D_data_m[D_data_m$Arena=='Large',]$m_RS),use="complete.obs",method = "pearson") - cov(D_data_f[D_data_f$Arena=='Large',]$stder_BM_focal,D_data_f[D_data_f$Arena=='Large',]$f_RS/mean(D_data_f[D_data_f$Arena=='Large',]$f_RS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_large_arena = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Arena=='Large',]$m_RS/mean(D_data_m[D_data_m$Arena=='Large',]$m_RS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Arena=='Large',]$m_RS/mean(D_data_m[D_data_m$Arena=='Large',]$m_RS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Arena=='Large',]$f_RS/mean(D_data_f[D_data_f$Arena=='Large',]$f_RS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Arena=='Large',]$f_RS/mean(D_data_f[D_data_f$Arena=='Large',]$f_RS))), TRUE)
  
  # Null (permuated) difference
  diff.random_large_arena[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Sex_diff_large_arena = sum(abs(diff.random_large_arena) >= as.numeric(abs(diff.observed_large_arena)))/   number_of_permutations
# Small
Sex_diff_small_arena=c(boot_BW_males_arena_small$t)-c(boot_BW_females_arena_small$t)
t_Sex_diff_small_arena=mean(Sex_diff_small_arena,na.rm=TRUE)
t_Sex_diff_small_arena_lower=quantile(Sex_diff_small_arena,.025,na.rm=TRUE)
t_Sex_diff_small_arena_upper=quantile(Sex_diff_small_arena,.975,na.rm=TRUE)
# Permutation test to calculate p value
comb_data_RS=c(D_data_m[D_data_m$Arena=='Small',]$m_RS/mean(D_data_m[D_data_m$Arena=='Small',]$m_RS),
               D_data_f[D_data_f$Arena=='Small',]$f_RS/mean(D_data_f[D_data_f$Arena=='Small',]$f_RS))
comb_data_BM=c(D_data_m[D_data_m$Arena=='Small',]$stder_BM_focal,
               D_data_f[D_data_f$Arena=='Small',]$stder_BM_focal)
diff.observed_small_arena = cov(D_data_m[D_data_m$Arena=='Small',]$stder_BM_focal,D_data_m[D_data_m$Arena=='Small',]$m_RS/mean(D_data_m[D_data_m$Arena=='Small',]$m_RS),use="complete.obs",method = "pearson") - cov(D_data_f[D_data_f$Arena=='Small',]$stder_BM_focal,D_data_f[D_data_f$Arena=='Small',]$f_RS/mean(D_data_f[D_data_f$Arena=='Small',]$f_RS),use="complete.obs",method = "pearson") 
number_of_permutations = 100000
diff.random_small_arena = NULL
for (i in 1 : number_of_permutations) {
  
  # Sample from the combined dataset
  a.random = sample (na.omit(comb_data_RS), length(c(D_data_m[D_data_m$Arena=='Small',]$m_RS/mean(D_data_m[D_data_m$Arena=='Small',]$m_RS))), TRUE)
  b.random = sample (na.omit(comb_data_BM), length(c(D_data_m[D_data_m$Arena=='Small',]$m_RS/mean(D_data_m[D_data_m$Arena=='Small',]$m_RS))), TRUE)
  c.random = sample (na.omit(comb_data_RS), length(c(D_data_f[D_data_f$Arena=='Small',]$f_RS/mean(D_data_f[D_data_f$Arena=='Small',]$f_RS))), TRUE)
  d.random = sample (na.omit(comb_data_BM), length(c(D_data_f[D_data_f$Arena=='Small',]$f_RS/mean(D_data_f[D_data_f$Arena=='Small',]$f_RS))), TRUE)
  
  # Null (permuated) difference
  diff.random_small_arena[i] = cov(b.random,a.random,use="complete.obs",method = "pearson") - cov(d.random,c.random,use="complete.obs",method = "pearson")
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
p_Sex_diff_small_arena = sum(abs(diff.random_small_arena) >= as.numeric(abs(diff.observed_small_arena)))/   number_of_permutations
### Extract data and write results table ####
boot_data_matingDif_small_group_size <-  as.data.frame(cbind("Small group size", "Mating differential", t_Sex_diff_Small_pop, t_Sex_diff_Small_pop_lower, t_Sex_diff_Small_pop_upper, p_Sex_diff_Small_pop))
names(boot_data_matingDif_small_group_size)=c('V1','V2','V3','V4','V5','V6')
boot_data_matingDif_large_group_size <-  as.data.frame(cbind("Large group size", "Mating differential", t_Sex_diff_large_pop, t_Sex_diff_large_pop_lower, t_Sex_diff_large_pop_upper, p_Sex_diff_large_pop))
names(boot_data_matingDif_large_group_size)=c('V1','V2','V3','V4','V5','V6')
boot_data_matingDif_large_arena <-  as.data.frame(cbind("Large arena size", "Mating differential", t_Sex_diff_large_arena, t_Sex_diff_large_arena_lower, t_Sex_diff_large_arena_upper, p_Sex_diff_large_arena))
names(boot_data_matingDif_large_arena)=c('V1','V2','V3','V4','V5','V6')
boot_data_matingDif_small_arena_size <-  as.data.frame(cbind("Small arena size", "Mating differential", t_Sex_diff_small_arena, t_Sex_diff_small_arena_lower, t_Sex_diff_small_arena_upper, p_Sex_diff_small_arena))
names(boot_data_matingDif_small_arena_size)=c('V1','V2','V3','V4','V5','V6')
Table_SexComp_BM <- as.data.frame(as.matrix(rbind(boot_data_matingDif_small_group_size,boot_data_matingDif_large_group_size,
                                                  boot_data_matingDif_large_arena,boot_data_matingDif_small_arena_size)))
colnames(Table_SexComp_BM)[1] <- "Treatment"
colnames(Table_SexComp_BM)[2] <- "Variance_component"
colnames(Table_SexComp_BM)[3] <- "Variance"
colnames(Table_SexComp_BM)[4] <- "l95_CI"
colnames(Table_SexComp_BM)[5] <- "u95_CI"
colnames(Table_SexComp_BM)[6] <- "p-value"
Table_SexComp_BM[,3]=round(as.numeric(Table_SexComp_BM[,3]),digits=2)
Table_SexComp_BM[,4]=round(as.numeric(Table_SexComp_BM[,4]),digits=2)
Table_SexComp_BM[,5]=round(as.numeric(Table_SexComp_BM[,5]),digits=2)
Table_SexComp_BM[,6]=round(as.numeric(Table_SexComp_BM[,6]),digits=3)
rownames(Table_SexComp_BM) <- c()Table A6: Sex comparisons for selection differentials on body mass including 95% confidence intervals. Negative effect sizes indicate larger values at lower density and positive effect sizes larger values at higher density.
kable(Table_SexComp_BM)| Treatment | Variance_component | Variance | l95_CI | u95_CI | p-value | 
|---|---|---|---|---|---|
| Small group size | Mating differential | -0.21 | -0.53 | 0.11 | 0.861 | 
| Large group size | Mating differential | -0.27 | -0.63 | 0.08 | 0.142 | 
| Large arena size | Mating differential | -0.06 | -0.39 | 0.27 | 0.742 | 
| Small arena size | Mating differential | -0.44 | -0.80 | -0.09 | 0.034 | 
sessionInfo()R version 4.2.0 (2022-04-22 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19045)
Matrix products: default
locale:
[1] LC_COLLATE=German_Germany.utf8  LC_CTYPE=German_Germany.utf8   
[3] LC_MONETARY=German_Germany.utf8 LC_NUMERIC=C                   
[5] LC_TIME=German_Germany.utf8    
attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods  
[8] base     
other attached packages:
 [1] knitr_1.42         ICC_2.4.0          data.table_1.14.8  boot_1.3-28       
 [5] RColorBrewer_1.1-3 car_3.1-1          carData_3.0-5      gridGraphics_0.5-1
 [9] cowplot_1.1.1      EnvStats_2.7.0     dplyr_1.1.0        readr_2.1.4       
[13] lmerTest_3.1-3     lme4_1.1-31        Matrix_1.5-3       gridExtra_2.3     
[17] ggplot2_3.4.1      ggeffects_1.2.0    workflowr_1.7.0   
loaded via a namespace (and not attached):
 [1] httr_1.4.5          sass_0.4.5          bit64_4.0.5        
 [4] vroom_1.6.1         jsonlite_1.8.4      splines_4.2.0      
 [7] bslib_0.4.2         getPass_0.2-2       highr_0.10         
[10] yaml_2.3.7          numDeriv_2016.8-1.1 pillar_1.8.1       
[13] lattice_0.20-45     glue_1.6.2          digest_0.6.31      
[16] promises_1.2.0.1    minqa_1.2.5         colorspace_2.1-0   
[19] htmltools_0.5.4     httpuv_1.6.9        pkgconfig_2.0.3    
[22] scales_1.2.1        processx_3.8.0      whisker_0.4.1      
[25] later_1.3.0         tzdb_0.3.0          git2r_0.31.0       
[28] tibble_3.2.0        mgcv_1.8-40         generics_0.1.3     
[31] farver_2.1.1        ellipsis_0.3.2      cachem_1.0.7       
[34] withr_2.5.0         cli_3.6.1           magrittr_2.0.3     
[37] crayon_1.5.2        evaluate_0.20       ps_1.7.2           
[40] fs_1.6.1            fansi_1.0.4         nlme_3.1-157       
[43] MASS_7.3-56         tools_4.2.0         hms_1.1.2          
[46] lifecycle_1.0.3     stringr_1.5.0       munsell_0.5.0      
[49] callr_3.7.3         compiler_4.2.0      jquerylib_0.1.4    
[52] rlang_1.0.6         nloptr_2.0.3        rstudioapi_0.14    
[55] labeling_0.4.2      rmarkdown_2.20      gtable_0.3.1       
[58] abind_1.4-5         R6_2.5.1            fastmap_1.1.1      
[61] bit_4.0.5           utf8_1.2.3          rprojroot_2.0.3    
[64] stringi_1.7.12      parallel_4.2.0      Rcpp_1.0.10        
[67] vctrs_0.5.2         tidyselect_1.2.0    xfun_0.37