###################################################################################### ######## ANALYSIS OF CONTEST DATA fw <- read.table("*************PATH***************\\INPUT_FILENAME.txt", header = TRUE) # INPUT FILE = = supplementary data 1, in txt format attach(fw) focus.winner <- fw[outcome=="W",] fw <- focus.winner attach(fw) fw$sex.rel <- relevel(fw$sex, ref="mm") RSD.cent <- scale(RSD, scale=TRUE) CFD.cent <- scale(CFD, scale=TRUE) RBD.cent <- scale(RBD, scale=TRUE) fw <- cbind(fw, RSD.cent, RBD.cent, CFD.cent) ################################################################ ########### Table 1 ################ ################################################################ ################### bar width m1.cent <- lm(RBD~sex + sex*RSD.cent + sex*CFD.cent, data=fw) summary(m1.cent) # Coefficients: # Estimate Std. Error t value Pr(>|t|) # (Intercept) 0.03876 0.01486 2.608 0.0143 * # sexmm -0.04860 0.02111 -2.302 0.0287 * # RSD.cent -0.03718 0.03144 -1.182 0.2467 # CFD.cent -0.06032 0.02938 -2.053 0.0492 * # sexmm:RSD.cent 0.02359 0.03485 0.677 0.5038 # sexmm:CFD.cent 0.06864 0.03306 2.076 0.0469 * m1.cent.rel <- lm(RBD~sex.rel + sex.rel*RSD.cent + sex.rel*CFD.cent, data=fw) summary(m1.cent.rel) # Coefficients: # Estimate Std. Error t value Pr(>|t|) # (Intercept) -0.009836 0.014993 -0.656 0.5170 # sex.relff 0.048596 0.021113 2.302 0.0287 * # RSD.cent -0.013585 0.015029 -0.904 0.3735 # CFD.cent 0.008318 0.015161 0.549 0.5874 # sex.relff:RSD.cent -0.023591 0.034851 -0.677 0.5038 # sex.relff:CFD.cent -0.068640 0.033063 -2.076 0.0469 * ############## condition m2.cent <- lm(CFD ~ sex + sex*RSD.cent + sex*RBD.cent, data=fw) summary(m2.cent) # Coefficients: # Estimate Std. Error t value Pr(>|t|) # (Intercept) 0.001948 0.016366 0.119 0.9061 # sexmm 0.004904 0.023308 0.210 0.8348 # RSD.cent -0.052738 0.023992 -2.198 0.0361 * # RBD.cent -0.020443 0.016541 -1.236 0.2264 # sexmm:RSD.cent 0.009772 0.027318 0.358 0.7231 # sexmm:RBD.cent 0.032708 0.024302 1.346 0.1888 m2.cent.rel <- lm(CFD ~ sex.rel + sex.rel*RSD.cent + sex.rel*RBD.cent, data=fw) summary(m2.cent.rel) # Coefficients: # Estimate Std. Error t value Pr(>|t|) # (Intercept) 0.006852 0.016596 0.413 0.68273 # sex.relff -0.004904 0.023308 -0.210 0.83483 # RSD.cent -0.042966 0.013064 -3.289 0.00264 ** # RBD.cent 0.012265 0.017803 0.689 0.49634 # sex.relff:RSD.cent -0.009772 0.027318 -0.358 0.72314 # sex.relff:RBD.cent -0.032708 0.024302 -1.346 0.18876 ########################### body size m3.cent <- lm(RSD ~ sex + sex*RBD.cent + sex*CFD.cent, data=fw) summary(m3.cent) # Coefficients: # Estimate Std. Error t value Pr(>|t|) # (Intercept) 0.0039656 0.0028977 1.369 0.1817 # sexmm 0.0006767 0.0041354 0.164 0.8712 # RBD.cent -0.0023146 0.0031859 -0.727 0.4733 # CFD.cent -0.0096891 0.0043179 -2.244 0.0326 * # sexmm:RBD.cent -0.0011862 0.0044438 -0.267 0.7914 # sexmm:CFD.cent 0.0021802 0.0048891 0.446 0.6590 m3.cent.rel <- lm(RSD ~ sex.rel + sex.rel*RBD.cent + sex.rel*CFD.cent, data=fw) summary(m3.cent.rel) # Coefficients: # Estimate Std. Error t value Pr(>|t|) # (Intercept) 0.0046423 0.0029504 1.573 0.12647 # sex.relff -0.0006767 0.0041354 -0.164 0.87116 # RBD.cent -0.0035009 0.0030980 -1.130 0.26771 # CFD.cent -0.0075089 0.0022933 -3.274 0.00274 ** # sex.relff:RBD.cent 0.0011862 0.0044438 0.267 0.79140 # sex.relff:CFD.cent -0.0021802 0.0048891 -0.446 0.65896 ################################################################ ########### Table 2 ################ ################################################################ #################### Contest duration: sqrt(duration) ~ |RBD| : sex + escalation : sex + |RSD| + |CFD|; ########## Gaussian error distribution; duration outliers (2 female and 3 male contests > 2 min) excluded summary(lm(sqrt(duration) ~ abs(RBD)*sex + abs(CFD) + abs(RSD) , data = fw[trial != 16 & trial != 31 & trial != 7 & trial != 8 & trial != 40,])) # Coefficients: # Estimate Std. Error t value Pr(>|t|) # (Intercept) 8.558 1.228 6.968 3.32e-07 *** # abs(RBD) -50.959 17.966 -2.836 0.00912 ** # sexmm -2.699 1.870 -1.443 0.16201 # abs(CFD) 3.039 11.733 0.259 0.79785 # abs(RSD) -24.810 51.324 -0.483 0.63319 # abs(RBD):sexmm 63.987 27.645 2.315 0.02951 * fw$sex.rel <- relevel(fw$sex, ref="mm") summary(lm(sqrt(duration) ~ abs(RBD)*sex.rel + abs(CFD) + abs(RSD) , data = fw[trial != 16 & trial != 31 & trial != 7 & trial != 8 & trial != 40,])) # Coefficients: # Estimate Std. Error t value Pr(>|t|) # (Intercept) 5.859 1.472 3.980 0.000554 *** # abs(RBD) 13.028 19.716 0.661 0.515039 # sex.relff 2.699 1.870 1.443 0.162014 # abs(CFD) 3.039 11.733 0.259 0.797854 # abs(RSD) -24.810 51.324 -0.483 0.633192 # abs(RBD):sex.relff -63.987 27.645 -2.315 0.029506 * ###################################################################################### ###################################################################################### ###################################################################################### ###################################################################################### ###################################################################################### ######## permuting winner/loser assignments and running models to estimate effect of RBD on contest outcome contest <- read.table("*************PATH***************\\INPUT_FILENAME.txt", header = TRUE) # INPUT FILE = = supplementary data 1, in txt format attach(contest) library(lme4) femcont <- contest[sex=="ff",] detach(contest) attach(femcont) intercept.ff <- c() stripe.ff <- c() #sex <- c() size.ff <-c() cond.ff <- c() aic.ff.stripe <- c() aic.ff.size <- c() aic.ff.cond <- c() focus <- c("a", "b") count <- 0 focus.choice <- c() for(i in 1:1000) { femcont$focus.choice <- c() focus.choice <- c() for(i in 1:18){ ### number of female contests focus.choice<- c(focus.choice, sample(focus)) } femcont <- cbind(femcont, focus.choice) #test whether distribution of W and L is even enough if ( nrow(femcont[femcont$focus.choice=="a" & femcont$outcome == "W",]) > 6 & nrow(femcont[femcont$focus.choice=="a" & femcont$outcome == "W",]) <12 ) { count <- count+1 mod.ff <- glm(outcome ~ RBD + RSD + CFD, data=femcont[focus.choice=="a",], family="binomial") sum.ff <- summary(mod.ff) sum.ff.stripe <- summary(glm(outcome ~ RSD + CFD, data=femcont[focus.choice=="a" ,], family="binomial")) sum.ff.size <- summary(glm(outcome ~ RBD + CFD, data=femcont[focus.choice=="a" ,], family="binomial")) sum.ff.cond <- summary(glm(outcome ~ RBD + RSD, data=femcont[focus.choice=="a" ,], family="binomial")) intercept.ff <- rbind(intercept.ff, cbind(sum.ff$coefficients[1,1], sum.ff$coefficients[1,4])) stripe.ff <- rbind(stripe.ff, cbind(sum.ff$coefficients[2,1], sum.ff$coefficients[2,4])) size.ff <- rbind(size.ff, cbind(sum.ff$coefficients[3,1], sum.ff$coefficients[3,4])) cond.ff <- rbind(cond.ff, cbind(sum.ff$coefficients[4,1], sum.ff$coefficients[4,4])) aic.ff.stripe <- rbind(aic.ff.stripe, (sum.ff.stripe$aic - sum.ff$aic)) aic.ff.size <- rbind(aic.ff.size, (sum.ff.size$aic - sum.ff$aic)) aic.ff.cond <- rbind(aic.ff.cond, (sum.ff.cond$aic - sum.ff$aic)) } } all <- cbind(intercept.ff, stripe.ff, size.ff, cond.ff, aic.ff.stripe, aic.ff.size, aic.ff.cond) write.table(all, file = "*************PATH***************\\ANY_FILENAME.txt") # returned supplementary data 2 ######################### perm.data <- read.table("*************PATH***************\\INPUT_FILENAME.txt", header = TRUE) # INPUT FILE = supplementary data 2, in txt format attach(perm.data) rownames <- seq(1,27,1) probs <- data.frame(row.names = rownames) x <- seq(min(RBD), max(RBD), 0.01) for (i in 1:731) { probW <- function(x) { exp(ff.intercept[i] + ff.stripe[i]*x)/(1+exp(ff.intercept[i] + ff.stripe[i]*x)) } probs <- cbind(probs, probW(x)) } matplot(x,probs,col="grey", type="l",lty=1, lwd=1,ylab="probability of winning", xlab="RBD between focus and opponent") mean.inter <- mean(ff.intercept) mean.stripe <- mean(ff.stripe) prob.mean <- function(x) { exp(mean.inter + mean.stripe*x)/(1+exp(mean.inter + mean.stripe*x)) } matlines(x,prob.mean(x),col="black", lwd=4) abline(h=0.5, lty=3) ################################# #### plot distributions of delta AIC with(perm.data, boxplot(aic.ff.stripe, aic.ff.size, aic.ff.cond, ylab="Delta AIC", names=c("bar", "size", "condition"), las=3)) ###################################################################################### ###################################################################################### ###################################################################################### ###################################################################################### ###################################################################################### ###### STABILITY OF BAR WIDTH OVER TIME data <- read.table("*************PATH***************\\INPUT_FILENAME.txt", header = TRUE) # INPUT FILE = supplementary data 3, in txt format attach(data) rel.mbw <- MBW/SL data <- cbind(data, rel.mbw) library(lattice) xyplot(rel.mbw ~ days | fish, data= data,layout = c(11,4), ylab="bar width / SL", as.table=TRUE, panel = function( x,y) { panel.abline(h = min(y), lty = "dotted") panel.abline(h = max(y), lty = "dotted") panel.xyplot(x,y, pch=19) }) anova <- aov(rel.mbw ~ fish) summary(anova) # # Df Sum Sq Mean Sq F value Pr(>F) # fish 43 0.09823 0.0022845 23.77 <2e-16 *** # Residuals 58 0.00557 0.0000961 #variance explained as omega2 (http://davidmlane.com/hyperstat/B171693.html) (0.09823 - 43*0.0000961) / (0.09823 + 0.00557 + 0.0000961) # 90.5 % of variation