#loading necessary libraries - install any of these that you do not already have
library(RColorBrewer)
## Warning: package 'RColorBrewer' was built under R version 4.4.0
library(plyr)
## Warning: package 'plyr' was built under R version 4.3.3
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'ggplot2' was built under R version 4.4.2
## Warning: package 'tidyr' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'purrr' was built under R version 4.3.3
## Warning: package 'dplyr' was built under R version 4.3.3
## Warning: package 'stringr' was built under R version 4.3.3
## Warning: package 'forcats' was built under R version 4.4.2
## Warning: package 'lubridate' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::arrange() masks plyr::arrange()
## ✖ purrr::compact() masks plyr::compact()
## ✖ dplyr::count() masks plyr::count()
## ✖ dplyr::desc() masks plyr::desc()
## ✖ dplyr::failwith() masks plyr::failwith()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::id() masks plyr::id()
## ✖ dplyr::lag() masks stats::lag()
## ✖ dplyr::mutate() masks plyr::mutate()
## ✖ dplyr::rename() masks plyr::rename()
## ✖ dplyr::summarise() masks plyr::summarise()
## ✖ dplyr::summarize() masks plyr::summarize()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(tidyr)
library(ggplot2)
library(ggpubr)
## Warning: package 'ggpubr' was built under R version 4.4.2
##
## Attaching package: 'ggpubr'
##
## The following object is masked from 'package:plyr':
##
## mutate
library(rstatix)
## Warning: package 'rstatix' was built under R version 4.3.3
##
## Attaching package: 'rstatix'
##
## The following objects are masked from 'package:plyr':
##
## desc, mutate
##
## The following object is masked from 'package:stats':
##
## filter
library(ggsignif)
## Warning: package 'ggsignif' was built under R version 4.4.2
library(glmmTMB)
## Warning: package 'glmmTMB' was built under R version 4.3.3
## Warning in checkMatrixPackageVersion(getOption("TMB.check.Matrix", TRUE)): Package version inconsistency detected.
## TMB was built with Matrix ABI version 1
## Current Matrix ABI version is 0
## Please re-install 'TMB' from source using install.packages('TMB', type = 'source') or ask CRAN for a binary version of 'TMB' matching CRAN's 'Matrix' package
## Warning in check_dep_version(): ABI version mismatch:
## lme4 was built with Matrix ABI version 1
## Current Matrix ABI version is 0
## Please re-install lme4 from source or restore original 'Matrix' package
library(lme4)
## Warning: package 'lme4' was built under R version 4.3.3
## Loading required package: Matrix
##
## Attaching package: 'Matrix'
##
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
library(MASS)
##
## Attaching package: 'MASS'
##
## The following object is masked from 'package:rstatix':
##
## select
##
## The following object is masked from 'package:dplyr':
##
## select
library(lmerTest)
## Warning: package 'lmerTest' was built under R version 4.3.3
##
## Attaching package: 'lmerTest'
##
## The following object is masked from 'package:lme4':
##
## lmer
##
## The following object is masked from 'package:stats':
##
## step
library(plotrix)
## Warning: package 'plotrix' was built under R version 4.3.2
library(reprex)
## Warning: package 'reprex' was built under R version 4.3.3
library(rcartocolor)
## Warning: package 'rcartocolor' was built under R version 4.3.3
library(paletteer)
## Warning: package 'paletteer' was built under R version 4.3.3
library(emmeans)
## Welcome to emmeans.
## Caution: You lose important information if you filter this package's results.
## See '? untidy'
library(tinytex)
## Warning: package 'tinytex' was built under R version 4.3.3
#loading in solo crab predator trial CSV - alter path to match the path for where you've downloaded the Solo Crab Pred csv on your own device
prf <- read.csv("C:/Users/Cassian/Downloads/SURF Control Proof - Solo Crab Experiments.csv", sep = ",", header = TRUE)
View(prf)
#Performing a Wilcoxon ranked-sum test to see if there are significant differences between males and females for the predator responses
compare_means(Time_to_Burrow ~ Treatment, data = prf, paired = FALSE)
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Time_to_Burrow Control Predator 0.434 0.43 0.43 ns Wilcoxon
compare_means(Aggression ~ Treatment, data = prf, paired = FALSE)
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Aggression Control Predator 0.0433 0.043 0.043 * Wilcoxon
compare_means(Flee ~ Treatment, data = prf, paired = FALSE)
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Flee Control Predator 0.000724 0.00072 0.00072 *** Wilcoxon
compare_means(Pace_Slow ~ Treatment, data = prf, paired = FALSE)
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Pace_Slow Control Predator 0.0227 0.023 0.023 * Wilcoxon
compare_means(Burrow_Dur ~ Treatment, data = prf, paired = FALSE)
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Burrow_Dur Control Predator 0.452 0.45 0.45 ns Wilcoxon
compare_means(Freeze_Dur ~ Treatment, data = prf, paired = FALSE)
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Freeze_Dur Control Predator 0.000000134 0.00000013 1.3e-07 **** Wilcoxon
compare_means(Water_Dur ~ Treatment, data = prf, paired = FALSE)
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Water_Dur Control Predator 0.0000248 0.000025 2.5e-05 **** Wilcoxon
compare_means(Climb_Dur ~ Treatment, data = prf, paired = FALSE)
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Climb_Dur Control Predator 0.0000922 0.000092 9.2e-05 **** Wilcoxon
#loading in solo crab predator (SCP) trial CSV - alter path to match the path for where you've downloaded the Solo Crab Pred csv on your own device
scp <- read.csv("C:/Users/Cassian/OneDrive/Documents/Ocean Environment/SURF Data Analysis - Solo Crab Pred.csv", sep = ",", header = TRUE)
View(scp)
#creating object for SCP males
male <- scp %>% filter(Sex == "M")
View(male)
#creating object for SCP females
female <- scp %>% filter(Sex == "F")
View(female)
#counting how many crabs showed each response - solo trials
#looking at male crabs only
magg <- male %>% filter(Aggression == 0)
View(magg)
#count: 21/25 did not show agg
mflee <- male %>% filter(Flee == 0)
View(mflee)
#count: 14/25 did not flee
mpace <- male %>% filter(Pace_Slow == 0)
View(mpace)
#count: 19/25 did not slow
mfreeze <- male %>% filter(Freeze_Dur == 0)
View(mfreeze)
#count: 3/25 did not freeze
mwater <- male %>% filter(Water_Dur == 0)
View(mwater)
#count: 15/25 did not submerge
#looking at female crabs only
fflee <- female %>% filter(Flee == 0)
View(fflee)
#count: 20/25 did not flee
fpace <- female %>% filter(Pace_Slow == 0)
View(fpace)
#count: 22/25 did not slow
ffreeze <- female %>% filter(Freeze_Dur == 0)
View(ffreeze)
#count: 7/25 did not freeze
fwater <- female %>% filter(Water_Dur == 0)
View(fwater)
#count: 16/25 did not submerge
#Performing a Wilcoxon ranked-sum test to see if there are significant differences between males and females for the predator responses
compare_means(Time_to_Burrow ~ Sex, data = scp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Time_to_Burrow M F 0.0455 0.046 0.046 * Wilcoxon
compare_means(Aggression ~ Sex, data = scp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Aggression M F 0.0410 0.041 0.041 * Wilcoxon
compare_means(Flee ~ Sex, data = scp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Flee M F 0.0453 0.045 0.045 * Wilcoxon
compare_means(Pace_Slow ~ Sex, data = scp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Pace_Slow M F 0.324 0.32 0.32 ns Wilcoxon
compare_means(Burrow_Dur ~ Sex, data = scp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Burrow_Dur M F 0.0345 0.034 0.034 * Wilcoxon
compare_means(Freeze_Dur ~ Sex, data = scp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Freeze_Dur M F 0.0194 0.019 0.019 * Wilcoxon
compare_means(Water_Dur ~ Sex, data = scp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Water_Dur M F 0.491 0.49 0.49 ns Wilcoxon
#calculating mean/SD for freeze durations and creating a dataframe to use in graph creation
sd(male$Freeze_Dur)
## [1] 23.81577
mean(male$Freeze_Dur)
## [1] 27.452
sd(female$Freeze_Dur)
## [1] 14.06097
mean(female$Freeze_Dur)
## [1] 12.968
freeze_df <- scp %>%
group_by(Sex) %>%
summarise(mean= mean(Freeze_Dur),
sd = std.error(Freeze_Dur)) #use standard error for the SD in the dataframe
View(freeze_df) #check that dataframe was created correctly
#making a bar graph of mean freeze times
freezegraph <- ggplot(freeze_df, aes(x = Sex, y = mean, fill=factor(Sex))) +
geom_bar(stat ="identity", position=position_dodge()) +
theme_classic() +
theme(axis.title.x = element_text(size=12), axis.title.y = element_text(size=12),
axis.text.x = element_text(size = 12, color = "black"),
axis.text.y = element_text(size = 12, color = "black")) + #set text sizes
labs (x="Sex", y="Average Freeze Duration (s)", fill="Sex") +
ggtitle("Freeze Duration") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_fill_manual(values=c("#D95F02","#D691C1FF")) + #add colors, first is for F, last is for M
theme(legend.position = "right") +
geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), position = position_dodge(width=0.5), width=0.2, colour="black", alpha=0.9, size=1) + #add error bars
geom_segment(aes(x="F", xend="M", y=35, yend=35)) + #add line for significance label
annotate("text", x=c(1.5),y=c(36.5),label=c("P=0.019"),size=4) #inclusion of significance label
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
freezegraph

ggsave("freezegraph.tiff") #save the graph
## Saving 7 x 5 in image
#calculate mean/SD for fleeing, make dataframe for graph creation
mean(female$Flee)
## [1] 0.24
sd(female$Flee)
## [1] 0.5228129
mean(male$Flee)
## [1] 0.76
sd(male$Flee)
## [1] 1.011599
flee_df <- scp %>% #making dataframe
group_by(Sex) %>%
summarise(mean= mean(Flee),
sd = std.error(Flee)) #use standard error
View(flee_df) #check to ensure dataframe generated correctly
#create graph for fleeing
fleegraph <- ggplot(flee_df, aes(x = Sex, y = mean, fill=factor(Sex))) +
geom_bar(stat ="identity", position=position_dodge()) +
theme_classic() +
theme(axis.title.x = element_text(size=12), axis.title.y = element_text(size=12),
axis.text.x = element_text(size = 12, color = "black"),
axis.text.y = element_text(size = 12, color = "black")) +
labs (x="Sex", y="Average # of Fleeing Occurrences", fill="Sex") +
ggtitle("Fleeing") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_fill_manual(values=c("#D95F02","#D691C1FF")) +
theme(legend.position = "right") +
geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), position = position_dodge(width=0.5), width=0.2, colour="black", alpha=0.9, size=1) +
geom_segment(aes(x="F", xend="M", y=1, yend=1)) +
annotate("text", x=c(1.5),y=c(1.05),label=c("P=0.045"),size=4)
fleegraph

ggsave("fleeplot.tiff")
## Saving 7 x 5 in image
#combine first two figures to make a more compact figure
predplotfig2 <- ggarrange(freezegraph, fleegraph,
labels = c("A", "B"), hjust=-2,vjust = 2,
ncol = 2, nrow =1,
widths = c(10,10),
heights=c(10, 10))
predplotfig2

ggsave("predplotfig2.tiff")
## Saving 7 x 5 in image
#loading in CSV of all solo crab data to analyze burrowing
bcp <- read.csv("C:/Users/Cassian/Downloads/SURF Control Proof - Solo Crab Experiments.csv", sep = ",", header = TRUE)
View(bcp)
#creating object for BCP males
mbcp <- bcp %>% filter(Sex == "M")
View(mbcp)
#creating object for BCP females
fbcp <- bcp %>% filter(Sex == "F")
View(fbcp)
#creating object for crabs that burrowed to count how many crabs burrowed
bbcp <- bcp %>% filter(Burrowed == "Y")
View(bbcp)
#testing significance between the number of female and male crabs that burrowed
binom.test(11,38, 0.5)
##
## Exact binomial test
##
## data: 11 and 38
## number of successes = 11, number of trials = 38, p-value = 0.01385
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.1542463 0.4590321
## sample estimates:
## probability of success
## 0.2894737
compare_means(Time_to_Burrow ~ Sex, data = bcp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Time_to_Burrow M F 0.00150 0.0015 0.0015 ** Wilcoxon
compare_means(Burrow_Dur ~ Sex, data = bcp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Burrow_Dur M F 0.00160 0.0016 0.0016 ** Wilcoxon
#calculating averages for time to burrow and making a dataframe for graph creation
mean(fbcp$Time_to_Burrow)
## [1] 427.1
sd(fbcp$Time_to_Burrow)
## [1] 207.5107
mean(mbcp$Time_to_Burrow)
## [1] 531.16
sd(mbcp$Time_to_Burrow)
## [1] 150.5627
ttb_df <- bcp %>%
group_by(Sex) %>%
summarise(mean= mean(Time_to_Burrow),
sd = std.error(Time_to_Burrow))
View(ttb_df)
#creating graph for burrow latency
ttbgraph <- ggplot(ttb_df, aes(x = Sex, y = mean, fill=factor(Sex))) +
geom_bar(stat ="identity", position=position_dodge()) +
theme_classic() +
theme(axis.title.x = element_text(size=12), axis.title.y = element_text(size=12),
axis.text.x = element_text(size = 12, color = "black"),
axis.text.y = element_text(size = 12, color = "black")) +
labs (x="Sex", y="Average Burrow Latency (s)", fill="Sex") +
ggtitle("Burrow Latency") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_fill_manual(values=c("#D95F02","#D691C1FF")) +
theme(legend.position = "right") +
geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), position = position_dodge(width=0.5), width=0.2, colour="black", alpha=0.9, size=1) +
geom_segment(aes(x="F", xend="M", y=595, yend=595)) +
annotate("text", x=c(1.5),y=c(615),label=c("P=1.50e-3"),size=4)
ttbgraph

ggsave("ttbgraph.tiff")
## Saving 7 x 5 in image
#calculating averages for burrow duration and making dataframe for graph creation
mean(mbcp$Burrow_Dur)
## [1] 61.65714
sd(mbcp$Burrow_Dur)
## [1] 143.7935
mean(fbcp$Burrow_Dur)
## [1] 174.9667
sd(fbcp$Burrow_Dur)
## [1] 210.2323
burrowtime_df <- bcp %>%
group_by(Sex) %>%
summarise(mean= mean(Burrow_Dur),
sd = std.error(Burrow_Dur))
View(burrowtime_df)
#create graph for burrow duration
burrowgraph <- ggplot(burrowtime_df, aes(x = Sex, y = mean, fill=factor(Sex))) +
geom_bar(stat ="identity", position=position_dodge()) +
theme_classic() +
theme(axis.title.x = element_text(size=12), axis.title.y = element_text(size=12),
axis.text.x = element_text(size = 12, color = "black"),
axis.text.y = element_text(size = 12, color = "black")) +
labs (x="Sex", y="Average Time in Burrow (s)", fill="Sex") +
ggtitle("Burrowing Duration") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_fill_manual(values=c("#D95F02","#D691C1FF")) +
theme(legend.position = "right") +
geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), position = position_dodge(width=0.5), width=0.2, colour="black", alpha=0.9, size=1) +
geom_segment(aes(x="F", xend="M", y=215, yend=215)) +
annotate("text", x=c(1.5),y=c(225),label=c("P=1.60e-3"),size=4)
burrowgraph

ggsave("burrowgraph.tiff")
## Saving 7 x 5 in image
#combine first two figures to make a more compact figure
predplotfig3 <- ggarrange(ttbgraph,burrowgraph,
labels = c("A", "B"), hjust=-3,vjust = 2,
ncol = 2, nrow =1,
widths = c(15,15),
heights=c(5, 5))
predplotfig3

ggsave("predplotfig3pt2.tiff")
## Saving 7 x 5 in image
paird <- read.csv("C:/Users/Cassian/Downloads/Dual Crab Pred - Dual Crab Experiments.csv", sep = ",", header = TRUE)
View(paird)
#counting how many crabs showed each response - paired trials
fpair <- paird %>% filter(Sex == "F")
View(fpair)
mpair <- paird %>% filter(Sex == "M")
#looking at male crabs only
mpagg <- mpair %>% filter(Aggression == 0)
View(mpagg)
#count: 19/30 did not show agg
mpflee <- mpair %>% filter(Flee == 0)
View(mpflee)
#count: 23/30 did not flee
mppace <- mpair %>% filter(Pace_Slow == 0)
View(mppace)
#count: 15/30 did not slow
mpfreeze <- mpair %>% filter(Freeze_Dur == 0)
View(mpfreeze)
#count: 7/30 did not freeze
mpwater <- mpair %>% filter(Water_Dur == 0)
View(mpwater)
#count: 25/30 did not submerge
#looking at female crabs only
fpflee <- fpair %>% filter(Flee == 0)
View(fpflee)
#count: 28/30 did not flee
fppace <- fpair %>% filter(Pace_Slow == 0)
View(fppace)
#count: 19/30 did not slow
fpfreeze <- fpair %>% filter(Freeze_Dur == 0)
View(fpfreeze)
#count: 9/30 did not freeze
fpwater <- fpair %>% filter(Water_Dur == 0)
View(fpwater)
#count: 26/30 did not submerge
#load in CSV for paired AND solo crabs - replace path with path for wherever you saved the mixed crab pred trials CSV on your device
#note: this CSV includes all paired and solo crab predator trial data and allows comparison between paired and solo trials
pcp <- read.csv("C:/Users/Cassian/Downloads/Dual Crab Pred - Mixed Crab Pred Trials (1).csv", sep = ",", header = TRUE)
View(pcp)
#Performing Wilcoxon ranked-sum tests on the predator response variables, using a Benjamini-Hochburg adjustment. Note that some of these will appear significant, and this significance will disappear upon a second run with data filtered down to include only one sex
compare_means(Time_to_Burrow ~ Trial_Type, data = pcp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 6 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Time_to_Burrow FF MF 0.617 0.74 0.62 ns Wilcoxon
## 2 Time_to_Burrow FF MM 0.200 0.6 0.20 ns Wilcoxon
## 3 Time_to_Burrow FF Solo 0.951 0.95 0.95 ns Wilcoxon
## 4 Time_to_Burrow MF MM 0.536 0.74 0.54 ns Wilcoxon
## 5 Time_to_Burrow MF Solo 0.570 0.74 0.57 ns Wilcoxon
## 6 Time_to_Burrow MM Solo 0.187 0.6 0.19 ns Wilcoxon
compare_means(Aggression ~ Trial_Type, data = pcp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 6 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Aggression FF MF 0.163 0.24 0.16259 ns Wilcoxon
## 2 Aggression FF MM 0.000926 0.0028 0.00093 *** Wilcoxon
## 3 Aggression FF Solo 0.202 0.24 0.20154 ns Wilcoxon
## 4 Aggression MF MM 0.0139 0.028 0.01392 * Wilcoxon
## 5 Aggression MF Solo 0.758 0.76 0.75798 ns Wilcoxon
## 6 Aggression MM Solo 0.000141 0.00084 0.00014 *** Wilcoxon
compare_means(Flee ~ Trial_Type, data = pcp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 6 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Flee FF MF 1 1 1.000 ns Wilcoxon
## 2 Flee FF MM 0.225 0.34 0.225 ns Wilcoxon
## 3 Flee FF Solo 0.0479 0.14 0.048 * Wilcoxon
## 4 Flee MF MM 0.225 0.34 0.225 ns Wilcoxon
## 5 Flee MF Solo 0.0479 0.14 0.048 * Wilcoxon
## 6 Flee MM Solo 0.401 0.48 0.401 ns Wilcoxon
compare_means(Pace_Slow ~ Trial_Type, data = pcp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 6 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Pace_Slow FF MF 0.331 0.43 0.331 ns Wilcoxon
## 2 Pace_Slow FF MM 0.859 0.86 0.859 ns Wilcoxon
## 3 Pace_Slow FF Solo 0.0209 0.063 0.021 * Wilcoxon
## 4 Pace_Slow MF MM 0.359 0.43 0.359 ns Wilcoxon
## 5 Pace_Slow MF Solo 0.184 0.37 0.184 ns Wilcoxon
## 6 Pace_Slow MM Solo 0.0146 0.063 0.015 * Wilcoxon
compare_means(Burrow_Dur ~ Trial_Type, data = pcp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 6 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Burrow_Dur FF MF 0.689 0.83 0.69 ns Wilcoxon
## 2 Burrow_Dur FF MM 0.227 0.68 0.23 ns Wilcoxon
## 3 Burrow_Dur FF Solo 0.927 0.93 0.93 ns Wilcoxon
## 4 Burrow_Dur MF MM 0.510 0.83 0.51 ns Wilcoxon
## 5 Burrow_Dur MF Solo 0.636 0.83 0.64 ns Wilcoxon
## 6 Burrow_Dur MM Solo 0.181 0.68 0.18 ns Wilcoxon
compare_means(Freeze_Dur ~ Trial_Type, data = pcp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 6 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Freeze_Dur FF MF 0.869 0.87 0.87 ns Wilcoxon
## 2 Freeze_Dur FF MM 0.530 0.81 0.53 ns Wilcoxon
## 3 Freeze_Dur FF Solo 0.292 0.81 0.29 ns Wilcoxon
## 4 Freeze_Dur MF MM 0.540 0.81 0.54 ns Wilcoxon
## 5 Freeze_Dur MF Solo 0.334 0.81 0.33 ns Wilcoxon
## 6 Freeze_Dur MM Solo 0.855 0.87 0.86 ns Wilcoxon
compare_means(Water_Dur ~ Trial_Type, data = pcp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 6 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Water_Dur FF MF 0.0895 0.21 0.0895 ns Wilcoxon
## 2 Water_Dur FF MM 0.299 0.36 0.2988 ns Wilcoxon
## 3 Water_Dur FF Solo 0.00908 0.054 0.0091 ** Wilcoxon
## 4 Water_Dur MF MM 0.510 0.51 0.5104 ns Wilcoxon
## 5 Water_Dur MF Solo 0.243 0.36 0.2430 ns Wilcoxon
## 6 Water_Dur MM Solo 0.104 0.21 0.1038 ns Wilcoxon
#creating objects for male paired crabs and female paired crabs
m_data <- pcp %>% filter(Sex== "M")
View(m_data)
f_data <- pcp %>% filter(Sex== "F")
View(f_data)
#Performing Wilcoxon ranked-sum tests on the predator response variables for males only, using a Benjamini-Hochburg adjustment
compare_means(Time_to_Burrow ~ Trial_Type, data = m_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Time_to_Burrow MF MM 0.489 0.73 0.49 ns Wilcoxon
## 2 Time_to_Burrow MF Solo 0.472 0.73 0.47 ns Wilcoxon
## 3 Time_to_Burrow MM Solo 0.797 0.8 0.80 ns Wilcoxon
compare_means(Aggression ~ Trial_Type, data = m_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Aggression MF MM 0.177 0.27 0.177 ns Wilcoxon
## 2 Aggression MF Solo 0.717 0.72 0.717 ns Wilcoxon
## 3 Aggression MM Solo 0.0139 0.042 0.014 * Wilcoxon
compare_means(Flee ~ Trial_Type, data = m_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Flee MF MM 0.787 0.79 0.787 ns Wilcoxon
## 2 Flee MF Solo 0.133 0.2 0.133 ns Wilcoxon
## 3 Flee MM Solo 0.0953 0.2 0.095 ns Wilcoxon
compare_means(Pace_Slow ~ Trial_Type, data = m_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Pace_Slow MF MM 0.732 0.73 0.73 ns Wilcoxon
## 2 Pace_Slow MF Solo 0.273 0.41 0.27 ns Wilcoxon
## 3 Pace_Slow MM Solo 0.115 0.35 0.12 ns Wilcoxon
compare_means(Burrow_Dur ~ Trial_Type, data = m_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Burrow_Dur MF MM 0.450 0.67 0.45 ns Wilcoxon
## 2 Burrow_Dur MF Solo 0.413 0.67 0.41 ns Wilcoxon
## 3 Burrow_Dur MM Solo 0.797 0.8 0.80 ns Wilcoxon
compare_means(Freeze_Dur ~ Trial_Type, data = m_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Freeze_Dur MF MM 0.493 0.49 0.493 ns Wilcoxon
## 2 Freeze_Dur MF Solo 0.0853 0.26 0.085 ns Wilcoxon
## 3 Freeze_Dur MM Solo 0.181 0.27 0.181 ns Wilcoxon
compare_means(Water_Dur ~ Trial_Type, data = m_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Water_Dur MF MM 0.760 0.76 0.760 ns Wilcoxon
## 2 Water_Dur MF Solo 0.253 0.38 0.253 ns Wilcoxon
## 3 Water_Dur MM Solo 0.0868 0.26 0.087 ns Wilcoxon
#Performing Wilcoxon ranked-sum tests on the predator response variables for females only, using a Benjamini-Hochburg adjustment
compare_means(Time_to_Burrow ~ Trial_Type, data = f_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Time_to_Burrow FF MF 0.533 0.53 0.53 ns Wilcoxon
## 2 Time_to_Burrow FF Solo 0.446 0.53 0.45 ns Wilcoxon
## 3 Time_to_Burrow MF Solo 0.180 0.53 0.18 ns Wilcoxon
compare_means(Flee ~ Trial_Type, data = f_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Flee FF MF 0.334 0.35 0.33 ns Wilcoxon
## 2 Flee FF Solo 0.354 0.35 0.35 ns Wilcoxon
## 3 Flee MF Solo 0.141 0.35 0.14 ns Wilcoxon
compare_means(Pace_Slow ~ Trial_Type, data = f_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Pace_Slow FF MF 0.267 0.4 0.27 ns Wilcoxon
## 2 Pace_Slow FF Solo 0.0200 0.06 0.02 * Wilcoxon
## 3 Pace_Slow MF Solo 0.568 0.57 0.57 ns Wilcoxon
compare_means(Burrow_Dur ~ Trial_Type, data = f_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Burrow_Dur FF MF 0.533 0.53 0.53 ns Wilcoxon
## 2 Burrow_Dur FF Solo 0.402 0.53 0.40 ns Wilcoxon
## 3 Burrow_Dur MF Solo 0.194 0.53 0.19 ns Wilcoxon
compare_means(Freeze_Dur ~ Trial_Type, data = f_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Freeze_Dur FF MF 0.772 0.91 0.77 ns Wilcoxon
## 2 Freeze_Dur FF Solo 0.908 0.91 0.91 ns Wilcoxon
## 3 Freeze_Dur MF Solo 0.593 0.91 0.59 ns Wilcoxon
compare_means(Water_Dur ~ Trial_Type, data = f_data, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 3 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Water_Dur FF MF 0.0740 0.11 0.074 ns Wilcoxon
## 2 Water_Dur FF Solo 0.0211 0.063 0.021 * Wilcoxon
## 3 Water_Dur MF Solo 0.746 0.75 0.746 ns Wilcoxon
#creating dataframes for each trial type and sex
pmm = filter(pcp, Trial_Type == "MM")
pff = filter(pcp, Trial_Type == "FF")
phetm = filter(m_data, Trial_Type == "MF")
phetf = filter(f_data, Trial_Type == "MF")
pms = filter(m_data, Trial_Type == "Solo")
pfs = filter(f_data, Trial_Type == "Solo")
#calculating means for significantly different behaviors to compare them between trial types
mean(pmm$Aggression)
## [1] 1.55
mean(pms$Aggression)
## [1] 0.16
mean(phetm$Aggression)
## [1] 0.5
mean(pff$Pace_Slow)
## [1] 0.75
mean(pfs$Pace_Slow)
## [1] 0.52
mean(phetf$Pace_Slow)
## [1] 0.4
mean(pff$Water_Dur)
## [1] 0.81
mean(pfs$Water_Dur)
## [1] 3.602
mean(phetf$Water_Dur)
## [1] 2.5
#creating dataframe for female submergence duration, to use in graph creation
water_df <- f_data %>%
group_by(Trial_Type) %>%
summarise(mean= mean(Water_Dur),
sd = std.error(Water_Dur))
View(water_df)
#creating a graph for female submergence duration, comparing between trial types
watergraph <- ggplot(water_df, aes(x = Trial_Type, y = mean, fill=factor(Trial_Type))) +
geom_bar(stat ="identity", color="black", position=position_dodge()) +
theme_classic() +
theme(axis.title.x = element_text(size=14), axis.title.y = element_text(size=14),
axis.text.x = element_text(size = 12, color = "black"),
axis.text.y = element_text(size = 12, color = "black")) +
labs (x="Trial Type", y="Average Submerge Duration (s)", fill="Trial Type") +
ggtitle("Average Water Duration - Females") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_fill_manual(values=c("#6C568CFF","#BFCDD9FF", "#E394BBFF")) + #these colors are for FF pairs, MF pairs, and solo females respectively
theme(legend.position = "right") +
geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), position = position_dodge(width=0.5), width=0.1, colour="black", alpha=0.9, size=0.5) +
geom_segment(aes(x="FF", xend="Solo", y=6.2, yend=6.2)) +
annotate("text", x=c(2),y=c(6.5),label=c("P=0.021"),size=4) +
geom_segment(aes(x="FF", xend="MF", y=5.7, yend=5.7)) +
annotate("text", x=c(1.5),y=c(6),label=c("P=0.074"),size=4) +
geom_segment(aes(x="MF", xend="Solo", y=5.3, yend=5.3)) +
annotate("text", x=c(2.5),y=c(5.6),label=c("P=0.746"),size=4)
watergraph

ggsave("waterplot.tiff")
## Saving 7 x 5 in image
#creating dataframe for female pace slowing behavior to use for graph creation
pace_df <- f_data %>%
group_by(Trial_Type) %>%
summarise(mean= mean(Pace_Slow),
sd = std.error(Pace_Slow))
View(pace_df)
#creating graph displaying differences in female pace slowing behavior between different trial types
pacegraph <- ggplot(pace_df, aes(x = Trial_Type, y = mean, fill=factor(Trial_Type))) +
geom_bar(stat ="identity", color="black", position=position_dodge()) +
theme_classic() +
theme(axis.title.x = element_text(size=14), axis.title.y = element_text(size=14),
axis.text.x = element_text(size = 12, color = "black"),
axis.text.y = element_text(size = 12, color = "black")) +
labs (x="Trial Type", y="Average # of Pace Slow Events", fill="Trial Type") +
ggtitle("Average Pace Slow Events - Females") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_fill_manual(values=c("#6C568CFF","#BFCDD9FF", "#E394BBFF")) +
theme(legend.position = "right") +
geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), position = position_dodge(width=0.5), width=0.1, colour="black", alpha=0.9, size=0.5) +
geom_segment(aes(x="FF", xend="Solo", y=1.6, yend=1.6)) +
annotate("text", x=c(2),y=c(1.68),label=c("P=0.02"),size=4) +
geom_segment(aes(x="FF", xend="MF", y=1.45, yend=1.45)) +
annotate("text", x=c(1.53),y=c(1.53),label=c("P=0.267"),size=4) +
geom_segment(aes(x="MF", xend="Solo", y=1.3, yend=1.3)) +
annotate("text", x=c(2.5),y=c(1.38),label=c("P=0.568"),size=4)
pacegraph

ggsave("pace slow plot.tiff")
## Saving 7 x 5 in image
#creating dataframe for male aggressive behavior to use in graph creation
agg_df <- m_data %>%
group_by(Trial_Type) %>%
summarise(mean= mean(Aggression),
sd = std.error(Aggression))
View(agg_df)
#graph of male aggression to compare between trial types
agggraph <- ggplot(agg_df, aes(x = Trial_Type, y = mean, fill=factor(Trial_Type))) +
geom_bar(stat ="identity", color="black", position=position_dodge()) +
theme_classic() +
theme(axis.title.x = element_text(size=14), axis.title.y = element_text(size=14),
axis.text.x = element_text(size = 12, color = "black"),
axis.text.y = element_text(size = 12, color = "black")) +
scale_x_discrete(limits = c("MM","MF","Solo")) +
labs (x="Trial Type", y="Average # of Aggression Events", fill="Trial Type") +
ggtitle("Average Aggression Events") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_fill_manual(breaks=c("MM","MF","Solo"),values=c("#5D761EFF","#BFCDD9FF","#E394BBFF")) + #these colors are for MM pairs, MF pairs, and solo males respectively
theme(legend.position = "right") +
geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), position = position_dodge(width=0.5), width=0.1, colour="black", alpha=0.9, size=0.5) +
geom_segment(aes(x="MM", xend="Solo", y=2.6, yend=2.6)) +
annotate("text", x=c(2),y=c(2.75),label=c("P=0.014"),size=4) +
geom_segment(aes(x="MM", xend="MF", y=2.2, yend=2.2)) +
annotate("text", x=c(1.5),y=c(2.35),label=c("P=0.177"),size=4) +
geom_segment(aes(x="MF", xend="Solo", y=2, yend=2)) +
annotate("text", x=c(2.5),y=c(2.15),label=c("P=0.717"),size=4)
agggraph

ggsave("agg male plot.tiff")
## Saving 7 x 5 in image
#combining the first two paired graphs
predplotfig4 <- ggarrange(watergraph, pacegraph,
labels = c("A", "B"), hjust=-1,vjust = 3,
ncol = 2, nrow =1,
widths = c(10,10),
heights=c(10, 10))
predplotfig4

ggsave("predplotfig4.tiff")
## Saving 7 x 5 in image
#annotating the last paired graph to make it a figure
predplotfig4pt2 <- ggarrange(agggraph,
labels = c("C"), hjust=-1,vjust = 3,
ncol = 1, nrow =1,
widths = c(10),
heights=c(10))
predplotfig4pt2

ggsave("predplotfig4pt2.tiff")
## Saving 7 x 5 in image
#loading in CSV of all crab data to analyze burrowing
pbcp <- read.csv("C:/Users/Cassian/Downloads/SURF Control Proof - Mixed Crab Proofs (2).csv", sep = ",", header = TRUE)
View(pbcp)
#creating object for all males
mbpp <- pbcp %>% filter(Sex == "M")
View(mbpp)
#creating object for all females
fbpp <- pbcp %>% filter(Sex == "F")
View(fbpp)
#creating object for paired crabs only
pairb <- pbcp %>% filter(Paired == "Y")
View(pairb)
#creating object for solo crabs only
solob <- pbcp %>% filter(Paired == "N")
View(solob)
#creating object for paired males
mpp <- pairb %>% filter(Sex == "M")
View(mpp)
#creating object for paired females
fpp <- pairb %>% filter(Sex == "F")
View(fpp)
#creating object for crabs that burrowed to count how many crabs burrowed
bpp <- pairb %>% filter(Burrowed == "Y")
View(bpp)
#testing significance between the number of female and male crabs that burrowed
binom.test(17,31, 0.5)
##
## Exact binomial test
##
## data: 17 and 31
## number of successes = 17, number of trials = 31, p-value = 0.7201
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.3603423 0.7268350
## sample estimates:
## probability of success
## 0.5483871
#testing significance between the number of solo and paired crabs that burrowed
binom.test(31,69, 0.5)
##
## Exact binomial test
##
## data: 31 and 69
## number of successes = 31, number of trials = 69, p-value = 0.4704
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.3292298 0.5738142
## sample estimates:
## probability of success
## 0.4492754
#testing if there are significant differences between paired and solo crabs in terms of burrowing behavior
compare_means(Time_to_Burrow ~ Paired, data = pbcp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Time_to_Burrow N Y 0.0990 0.099 0.099 ns Wilcoxon
compare_means(Burrow_Dur ~ Paired, data = pbcp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Burrow_Dur N Y 0.117 0.12 0.12 ns Wilcoxon
#testing if there are significant differences between male and female burrowing behavior for paired crabs
compare_means(Time_to_Burrow ~ Sex, data = pairb, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Time_to_Burrow M F 0.680 0.68 0.68 ns Wilcoxon
compare_means(Burrow_Dur ~ Sex, data = pairb, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Burrow_Dur M F 0.472 0.47 0.47 ns Wilcoxon
#testing if there are significant differences between paired and solo crabs of each sex in terms of burrowing behavior
compare_means(Time_to_Burrow ~ Paired, data = fbpp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Time_to_Burrow N Y 0.0104 0.01 0.01 * Wilcoxon
compare_means(Burrow_Dur ~ Paired, data = fbpp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Burrow_Dur N Y 0.0175 0.017 0.017 * Wilcoxon
compare_means(Time_to_Burrow ~ Paired, data = mbpp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Time_to_Burrow N Y 0.686 0.69 0.69 ns Wilcoxon
compare_means(Burrow_Dur ~ Paired, data = mbpp, method = "wilcox.test", paired = FALSE, p.adjust.method = "BH")
## # A tibble: 1 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 Burrow_Dur N Y 0.829 0.83 0.83 ns Wilcoxon
#calculating averages for burrow latency
mean(fpp$Time_to_Burrow)
## [1] 508.1833
sd(fpp$Time_to_Burrow)
## [1] 175.2288
mean(fbcp$Time_to_Burrow)
## [1] 427.1
sd(fbcp$Time_to_Burrow)
## [1] 207.5107
mean(mpp$Time_to_Burrow)
## [1] 504.15
sd(mpp$Time_to_Burrow)
## [1] 184.5238
mean(mbcp$Time_to_Burrow)
## [1] 531.16
sd(mbcp$Time_to_Burrow)
## [1] 150.5627
mean(solob$Time_to_Burrow)
## [1] 479.13
sd(solob$Time_to_Burrow)
## [1] 187.7962
mean(pairb$Time_to_Burrow)
## [1] 506.1667
sd(pairb$Time_to_Burrow)
## [1] 179.1902
latent_df <- fbpp %>%
group_by(Paired) %>%
summarise(mean= mean(Time_to_Burrow),
sd = std.error(Time_to_Burrow))
View(latent_df)
#creating graph for burrow latency between solo and paired females
latentgraph <- ggplot(latent_df, aes(x = Paired, y = mean, fill=factor(Paired))) +
geom_bar(stat ="identity", position=position_dodge()) +
theme_classic() +
theme(axis.title.x = element_text(size=12), axis.title.y = element_text(size=12),
axis.text.x = element_text(size = 12, color = "black"),
axis.text.y = element_text(size = 12, color = "black")) +
labs (x="Paired?", y="Average Burrow Latency (s)", fill="Paired") +
ggtitle("Burrow Latency - Females") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_fill_manual(values=c("#E394BBFF","#EEAD0E")) +
theme(legend.position = "right") +
geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), position = position_dodge(width=0.5), width=0.2, colour="black", alpha=0.9, size=1) +
geom_segment(aes(x="N", xend="Y", y=595, yend=595)) +
annotate("text", x=c(1.5),y=c(615),label=c("P=1.04e-2"),size=4)
latentgraph

#ggsave("ttbgraph.png")
#calculating averages for burrow duration
mean(mpp$Burrow_Dur)
## [1] 90.83978
sd(mpp$Burrow_Dur)
## [1] 181.9832
mean(mbcp$Burrow_Dur)
## [1] 61.65714
sd(mbcp$Burrow_Dur)
## [1] 143.7935
mean(fpp$Burrow_Dur)
## [1] 93.0216
sd(fpp$Burrow_Dur)
## [1] 168.593
mean(fbcp$Burrow_Dur)
## [1] 174.9667
sd(fbcp$Burrow_Dur)
## [1] 210.2323
mean(solob$Burrow_Dur)
## [1] 118.3119
sd(solob$Burrow_Dur)
## [1] 188.0203
mean(pairb$Burrow_Dur)
## [1] 91.93069
sd(pairb$Burrow_Dur)
## [1] 174.6808
burr_df <- fbpp %>%
group_by(Paired) %>%
summarise(mean= mean(Burrow_Dur),
sd = std.error(Burrow_Dur))
View(burr_df)
#create graph for burrow duration
burrowgraphfem <- ggplot(burr_df, aes(x = Paired, y = mean, fill=factor(Paired))) +
geom_bar(stat ="identity", position=position_dodge()) +
theme_classic() +
theme(axis.title.x = element_text(size=12), axis.title.y = element_text(size=12),
axis.text.x = element_text(size = 12, color = "black"),
axis.text.y = element_text(size = 12, color = "black")) +
labs (x="Paired?", y="Average Time in Burrow (s)", fill="Paired") +
ggtitle("Burrowing Duration - Females") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_fill_manual(values=c("#E394BBFF","#EEAD0E")) +
theme(legend.position = "right") +
geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), position = position_dodge(width=0.5), width=0.2, colour="black", alpha=0.9, size=1) +
geom_segment(aes(x="N", xend="Y", y=215, yend=215)) +
annotate("text", x=c(1.5),y=c(225),label=c("P=1.75e-2"),size=4)
burrowgraphfem

#ggsave("burrowgraph.png")
#combine first two figures to make a more compact figure
predplotfigx <- ggarrange(latentgraph,burrowgraphfem,
labels = c("A", "B"), hjust=-3,vjust = 2,
ncol = 2, nrow =1,
widths = c(15,15),
heights=c(5, 5))
predplotfigx

ggsave("predplotfigx.tiff")
## Saving 7 x 5 in image
#importing the CSV for both paired and solo crab movement metrics. Change the path to match the path for this CSV on your own device
msf <- read.csv("C:/Users/Cassian/Downloads/SURF Dual Site Fidelity - Mixed Crab Fidelity (2).csv", sep = ",", header = TRUE)
View(msf)
#creating a model to see if treatment and trial type have a mixed effect on movement
msfmodel1 <- glm(Quad_Transitions ~ Treatment * Trial_Type + Crab_ID, family = poisson, data = msf)
msfmodel1
##
## Call: glm(formula = Quad_Transitions ~ Treatment * Trial_Type + Crab_ID,
## family = poisson, data = msf)
##
## Coefficients:
## (Intercept) TreatmentPredator
## 1.7187332 -0.5464848
## Trial_TypeMF Trial_TypeMM
## -0.1724724 -0.0478567
## Trial_TypeSolo Crab_ID
## 0.0179714 0.0001037
## TreatmentPredator:Trial_TypeMF TreatmentPredator:Trial_TypeMM
## 0.4981229 0.7178019
## TreatmentPredator:Trial_TypeSolo
## 0.6230780
##
## Degrees of Freedom: 215 Total (i.e. Null); 207 Residual
## Null Deviance: 819.5
## Residual Deviance: 784 AIC: 1460
summary(msfmodel1)
##
## Call:
## glm(formula = Quad_Transitions ~ Treatment * Trial_Type + Crab_ID,
## family = poisson, data = msf)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.7187332 0.1129024 15.223 < 2e-16 ***
## TreatmentPredator -0.5464848 0.1590525 -3.436 0.000591 ***
## Trial_TypeMF -0.1724724 0.1471927 -1.172 0.241299
## Trial_TypeMM -0.0478567 0.1387447 -0.345 0.730150
## Trial_TypeSolo 0.0179714 0.1551726 0.116 0.907799
## Crab_ID 0.0001037 0.0009192 0.113 0.910146
## TreatmentPredator:Trial_TypeMF 0.4981229 0.2194669 2.270 0.023226 *
## TreatmentPredator:Trial_TypeMM 0.7178019 0.2061919 3.481 0.000499 ***
## TreatmentPredator:Trial_TypeSolo 0.6230780 0.1787850 3.485 0.000492 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 819.52 on 215 degrees of freedom
## Residual deviance: 783.96 on 207 degrees of freedom
## AIC: 1460
##
## Number of Fisher Scoring iterations: 5
anova(msfmodel1, test = "Chisq")
## Analysis of Deviance Table
##
## Model: poisson, link: log
##
## Response: Quad_Transitions
##
## Terms added sequentially (first to last)
##
##
## Df Deviance Resid. Df Resid. Dev Pr(>Chi)
## NULL 215 819.52
## Treatment 1 0.0813 214 819.44 0.7755203
## Trial_Type 3 20.6722 211 798.76 0.0001231 ***
## Crab_ID 1 0.0013 210 798.76 0.9708228
## Treatment:Trial_Type 3 14.7978 207 783.96 0.0019979 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#testing a second model for interaction between treatment and trial type affecting movement
msfmodel2 <- glm.nb(Quad_Transitions ~ Treatment * Trial_Type + Crab_ID, data = msf)
msfmodel2
##
## Call: glm.nb(formula = Quad_Transitions ~ Treatment * Trial_Type +
## Crab_ID, data = msf, init.theta = 1.83288897, link = log)
##
## Coefficients:
## (Intercept) TreatmentPredator
## 1.7375363 -0.5465410
## Trial_TypeMF Trial_TypeMM
## -0.1745820 -0.0461322
## Trial_TypeSolo Crab_ID
## 0.0559772 -0.0002222
## TreatmentPredator:Trial_TypeMF TreatmentPredator:Trial_TypeMM
## 0.5010418 0.7157007
## TreatmentPredator:Trial_TypeSolo
## 0.6219998
##
## Degrees of Freedom: 215 Total (i.e. Null); 207 Residual
## Null Deviance: 260.1
## Residual Deviance: 250.5 AIC: 1196
summary(msfmodel2)
##
## Call:
## glm.nb(formula = Quad_Transitions ~ Treatment * Trial_Type +
## Crab_ID, data = msf, init.theta = 1.83288897, link = log)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.7375363 0.2266158 7.667 1.76e-14 ***
## TreatmentPredator -0.5465410 0.2879988 -1.898 0.0577 .
## Trial_TypeMF -0.1745820 0.2869034 -0.609 0.5429
## Trial_TypeMM -0.0461322 0.2772017 -0.166 0.8678
## Trial_TypeSolo 0.0559772 0.3110602 0.180 0.8572
## Crab_ID -0.0002222 0.0018233 -0.122 0.9030
## TreatmentPredator:Trial_TypeMF 0.5010418 0.4042312 1.239 0.2152
## TreatmentPredator:Trial_TypeMM 0.7157007 0.3933362 1.820 0.0688 .
## TreatmentPredator:Trial_TypeSolo 0.6219998 0.3338137 1.863 0.0624 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for Negative Binomial(1.8329) family taken to be 1)
##
## Null deviance: 260.10 on 215 degrees of freedom
## Residual deviance: 250.48 on 207 degrees of freedom
## AIC: 1195.9
##
## Number of Fisher Scoring iterations: 1
##
##
## Theta: 1.833
## Std. Err.: 0.257
##
## 2 x log-likelihood: -1175.908
anova(msfmodel2, test = "Chisq")
## Warning in anova.negbin(msfmodel2, test = "Chisq"): tests made without
## re-estimating 'theta'
## Analysis of Deviance Table
##
## Model: Negative Binomial(1.8329), link: log
##
## Response: Quad_Transitions
##
## Terms added sequentially (first to last)
##
##
## Df Deviance Resid. Df Resid. Dev Pr(>Chi)
## NULL 215 260.11
## Treatment 1 0.0205 214 260.08 0.8862
## Trial_Type 3 5.3965 211 254.69 0.1450
## Crab_ID 1 0.0350 210 254.65 0.8516
## Treatment:Trial_Type 3 4.1730 207 250.48 0.2434
#checking which model fits the data the best
AIC(msfmodel1, msfmodel2)
## df AIC
## msfmodel1 9 1460.000
## msfmodel2 10 1195.908
#lowest AIC - best model fit
anova(msfmodel1, test = "Chisq")
## Analysis of Deviance Table
##
## Model: poisson, link: log
##
## Response: Quad_Transitions
##
## Terms added sequentially (first to last)
##
##
## Df Deviance Resid. Df Resid. Dev Pr(>Chi)
## NULL 215 819.52
## Treatment 1 0.0813 214 819.44 0.7755203
## Trial_Type 3 20.6722 211 798.76 0.0001231 ***
## Crab_ID 1 0.0013 210 798.76 0.9708228
## Treatment:Trial_Type 3 14.7978 207 783.96 0.0019979 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(msfmodel1)
##
## Call:
## glm(formula = Quad_Transitions ~ Treatment * Trial_Type + Crab_ID,
## family = poisson, data = msf)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.7187332 0.1129024 15.223 < 2e-16 ***
## TreatmentPredator -0.5464848 0.1590525 -3.436 0.000591 ***
## Trial_TypeMF -0.1724724 0.1471927 -1.172 0.241299
## Trial_TypeMM -0.0478567 0.1387447 -0.345 0.730150
## Trial_TypeSolo 0.0179714 0.1551726 0.116 0.907799
## Crab_ID 0.0001037 0.0009192 0.113 0.910146
## TreatmentPredator:Trial_TypeMF 0.4981229 0.2194669 2.270 0.023226 *
## TreatmentPredator:Trial_TypeMM 0.7178019 0.2061919 3.481 0.000499 ***
## TreatmentPredator:Trial_TypeSolo 0.6230780 0.1787850 3.485 0.000492 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 819.52 on 215 degrees of freedom
## Residual deviance: 783.96 on 207 degrees of freedom
## AIC: 1460
##
## Number of Fisher Scoring iterations: 5
#testing a model for no interaction between treatment and trial type when affecting movement
msfmodel_no_interaction <- glm(Quad_Transitions ~ Treatment + Trial_Type, family = poisson, data = msf)
msfmodel_no_interaction
##
## Call: glm(formula = Quad_Transitions ~ Treatment + Trial_Type, family = poisson,
## data = msf)
##
## Coefficients:
## (Intercept) TreatmentPredator Trial_TypeMF Trial_TypeMM
## 1.47972 -0.01012 0.05280 0.29177
## Trial_TypeSolo
## 0.31876
##
## Degrees of Freedom: 215 Total (i.e. Null); 211 Residual
## Null Deviance: 819.5
## Residual Deviance: 798.8 AIC: 1467
anova(msfmodel_no_interaction, test = "Chisq")
## Analysis of Deviance Table
##
## Model: poisson, link: log
##
## Response: Quad_Transitions
##
## Terms added sequentially (first to last)
##
##
## Df Deviance Resid. Df Resid. Dev Pr(>Chi)
## NULL 215 819.52
## Treatment 1 0.0813 214 819.44 0.7755203
## Trial_Type 3 20.6722 211 798.76 0.0001231 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
AIC(msfmodel1,msfmodel_no_interaction) #testing AIC for new model vs previous best model
## df AIC
## msfmodel1 9 1460.000
## msfmodel_no_interaction 5 1466.799
#testing which pairing types have a significant effect on movement rate
msfmodeltest <- emmeans(msfmodel1, pairwise ~ Treatment|Trial_Type, data = msf, adjust = "tukey")
summary(msfmodeltest)
## $emmeans
## Trial_Type = FF:
## Treatment emmean SE df asymp.LCL asymp.UCL
## Control 1.73 0.1110 Inf 1.513 1.95
## Predator 1.18 0.1320 Inf 0.925 1.44
##
## Trial_Type = MF:
## Treatment emmean SE df asymp.LCL asymp.UCL
## Control 1.56 0.1190 Inf 1.325 1.79
## Predator 1.51 0.1150 Inf 1.283 1.74
##
## Trial_Type = MM:
## Treatment emmean SE df asymp.LCL asymp.UCL
## Control 1.68 0.1070 Inf 1.472 1.89
## Predator 1.85 0.1000 Inf 1.657 2.05
##
## Trial_Type = Solo:
## Treatment emmean SE df asymp.LCL asymp.UCL
## Control 1.75 0.0805 Inf 1.591 1.91
## Predator 1.82 0.0788 Inf 1.670 1.98
##
## Results are given on the log (not the response) scale.
## Confidence level used: 0.95
##
## $contrasts
## Trial_Type = FF:
## contrast estimate SE df z.ratio p.value
## Control - Predator 0.5465 0.1590 Inf 3.436 0.0006
##
## Trial_Type = MF:
## contrast estimate SE df z.ratio p.value
## Control - Predator 0.0484 0.1510 Inf 0.320 0.7492
##
## Trial_Type = MM:
## contrast estimate SE df z.ratio p.value
## Control - Predator -0.1713 0.1310 Inf -1.306 0.1917
##
## Trial_Type = Solo:
## contrast estimate SE df z.ratio p.value
## Control - Predator -0.0766 0.0816 Inf -0.938 0.3482
##
## Results are given on the log (not the response) scale.
#creating graph to visualize best-fit model for how movement changes with treatment and trial type
movement <- ggplot(msf, aes(x = Treatment, y = Quad_Transitions, color = Trial_Type)) +
stat_summary(fun = mean, geom = "point", position = position_dodge(0.2), size = 2.5) +
stat_summary(fun = mean, geom = "line", aes(group = Trial_Type), size = 2) +
labs(title = "Interaction Between Treatment and Trial Type",
y = "Mean Quadrant Transitions",
x = "Treatment", color = "Trial Type") +
theme_classic2() +
theme(axis.title.x = element_text(size=14), axis.title.y = element_text(size=14),
axis.text.x = element_text(size = 12, color = "black"),
axis.text.y = element_text(size = 12, color = "black")) +
theme(plot.title = element_text(hjust = 0.5)) +
scale_color_manual(values=c("#6C568CFF","#BFCDD9FF", "#5D761EFF", "#E394BBFF")) + #these colors are for FF, MF, MM, and solo crab trials respectively
theme(legend.position = "right")
movement

ggsave("interaction graph.tiff")
## Saving 7 x 5 in image