-
Notifications
You must be signed in to change notification settings - Fork 1
/
05_foraging-guild.Rmd
178 lines (150 loc) · 6.79 KB
/
05_foraging-guild.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
---
editor_options:
chunk_output_type: console
---
# Foraging guild
Here, we ask if species of a certain foraging guild have higher vocal activity at dawn compared to dusk. Our null hypothesis/expectation is that there would be no differences in vocal activity across foraging guilds irrespective of time of day.
## Install necessary libraries
```{r}
library(tidyverse)
library(dplyr)
library(stringr)
library(vegan)
library(ggplot2)
library(scico)
library(data.table)
library(extrafont)
library(ggstatsplot)
library(ggpubr)
library(ggrepel)
library(patchwork)
library(rstatix)
```
## Load acoustic data and species scientific names data
```{r}
acoustic_data <- read.csv("results/acoustic_data.csv")
species_codes <- read.csv("data/species-annotation-codes.csv")
trait <- read.csv("data/species-trait-dat.csv")
```
## Filtering acoustic data to ensure sampling periods are even across dawn and dusk
Since our recording schedule was uneven (6am to 10am in the morning and 4pm to 7pm in the evening), we filter acoustic data to retain recordings between 6am and 830am and recordings made between 4pm and 630pm so that the two sampling windows capture a similar amount of time right after dawn and right before dusk.
```{r}
dawn <- acoustic_data %>%
group_by(time_of_day == "dawn") %>%
filter(start_time >= 060000 & start_time <= 083000)
dusk <- acoustic_data %>%
group_by(time_of_day == "dusk") %>%
filter(start_time >= 160000 & start_time <= 183000)
acoustic_data <- bind_rows(dawn[, -10], dusk[, -10])
```
## Vocal activity across time periods
A number of factors need to be considered in further analysis: accounting for time_of_day, observed_identity for example. However, we run analyses that account for differences in calling activity by species for dawn and dusk.
```{r}
# sampling effort by time_of_day
effort <- acoustic_data %>%
dplyr::select(site_id, date, time_of_day) %>%
distinct() %>%
arrange(time_of_day) %>%
count(time_of_day) %>%
rename(., nVisits = n)
# Above, we note that we had sampled ~145 site-date combinations at dawn, while ~230 site-date combinations were sampled at dusk
# total number of acoustic detections summarized across every 10-s audio file
# here, we estimate % detections at dawn and dusk, while accounting for sampling effort
vocal_act <- acoustic_data %>%
group_by(time_of_day, eBird_codes) %>%
summarise(detections = sum(number)) %>%
left_join(., species_codes[, c(1, 2, 5)],
by = "eBird_codes"
) %>%
group_by(eBird_codes) %>%
mutate(total_detections = sum(detections)) %>%
mutate(percent_detections = (detections / total_detections) * 100) %>%
ungroup()
## accouting for sampling effort and normalizing data
vocal_act <- vocal_act %>%
left_join(., effort, by = "time_of_day") %>%
mutate(normalized_detections = detections / nVisits) %>%
group_by(eBird_codes) %>%
mutate(total_normalized_detections = sum(normalized_detections)) %>%
mutate(percent_normalized_detections = (normalized_detections / total_normalized_detections) * 100) %>%
ungroup() %>%
# in our case, we have 4 species which have 100% detections in dawn, Indian blackbird, Little spiderhunter, Oriental-Magpie Robin and Purple sunbird. For these, we add a additional row specifying no detections in dusk.
add_row(
time_of_day = "dusk", eBird_codes = "pursun4", detections = 0, scientific_name = "Cinnyris asiaticus", common_name = "Purple Sunbird", total_detections = 96, percent_detections = 0, normalized_detections = 0,
percent_normalized_detections = 0, nVisits = 230, total_normalized_detections = 0.6620690
) %>%
add_row(
time_of_day = "dusk", eBird_codes = "eurbla2", detections = 0, scientific_name = "Turdus simillimus", common_name = "Indian Blackbird", total_detections = 179, percent_detections = 0, normalized_detections = 0,
percent_normalized_detections = 0, nVisits = 230,
total_normalized_detections = 1.2344828
) %>%
add_row(
time_of_day = "dusk", eBird_codes = "litspi1", detections = 0, scientific_name = "Arachnothera longirostra", common_name = "Little Spiderhunter", total_detections = 204, percent_detections = 0,
normalized_detections = 0, nVisits = 230,
percent_normalized_detections = 0,
total_normalized_detections = 1.4068966
) %>%
add_row(
time_of_day = "dusk", eBird_codes = "magrob", detections = 0, scientific_name = "Copsychus saularis", common_name = "Oriental Magpie-Robin",
total_detections = 119, percent_detections = 0,
normalized_detections = 0, nVisits = 230,
percent_normalized_detections = 0,
total_normalized_detections = 0.6620690
)
```
## Join the vocal_activity data and species trait data
```{r}
vocal_act <- vocal_act %>%
left_join(trait[, c(1, 2, 29)], by = c(
"scientific_name",
"common_name"
))
## remove species that are poorly represented by a particular trophic niche
## we get rid of nectarivore species, aquatic predator and granivore
vocal_act <- vocal_act %>%
filter(trophic_niche != "Aquatic predator") %>%
filter(trophic_niche != "Granivore") %>%
filter(trophic_niche != "Nectarivore") %>%
filter(trophic_niche != "Vertivore")
## We retained 62 out of 69 species after the above filters
```
## Testing the differences among foraging guild categories using Wilcoxon test
Here, we see whether there are differences in the vocal activity between invertivores, frugivores, and omnivores in dawn and dusk individually.
```{r}
stat.test <- vocal_act %>%
group_by(time_of_day) %>%
wilcox_test(percent_normalized_detections ~ trophic_niche)
```
Significant differences were observed between frugivore and omnivore species at dawn and dusk.
## Comparing vocal activity at dawn between foraging guilds
```{r}
fig_between_foragingGuild_vocAct <- vocal_act %>%
filter(time_of_day == "dawn") %>%
ggbetweenstats(
x = trophic_niche,
y = percent_normalized_detections,
xlab = "Foraging guild",
ylab = "% Vocal activity at Dawn",
pairwise.display = "significant",
package = "ggsci",
palette = "default_jco",
violin.args = list(width = 0),
ggplot.component = list(theme(
text = element_text(family = "Century Gothic", size = 15, face = "bold"), plot.title = element_text(
family = "Century Gothic",
size = 18, face = "bold"
),
plot.subtitle = element_text(
family = "Century Gothic",
size = 15, face = "bold", color = "#1b2838"
),
axis.title = element_text(
family = "Century Gothic",
size = 15, face = "bold"
)
))
)
ggsave(fig_between_foragingGuild_vocAct, filename = "figs/fig_percentDetections_vs_foragingGuild.png", width = 16, height = 14, device = png(), units = "in", dpi = 300)
dev.off()
```
![We found significant differences in the dawn vocal activity between invertivore and frugivore species and omnivore and frugivore species.](figs/fig_percentDetections_vs_foragingGuild.png)