Introduction

In this analysis, I attempt to find evidence for site fidelity at TREES in Wood Thrushes.

Purpose

This study, conducted from 2012 to 2021, aims to confirm the migratory fidelity of songbirds to the TREES (Toucan Ridge Ecology and Education Society) site located in the Middlesex region of Belize in order to affirm the habitat’s viability. Regarding fidelity to microenvironments, it is predicted that the different species under analysis will theoretically return to the same tree, as familiarity with previously visited areas in past years will allow for better exploitation of available resources and higher survival rates (L. Figueira et al., 2020). This is one of the reasons why the vast majority of migratory birds demonstrate fidelity to their non-breeding sites (Lykke Pedersen et al., 2018). However, some songbirds may change sites if their current site is disrupted (D. Gibson et al., 2018). I am currently testing whether Wood Thrushes exhibit preference for certain locations at the research site / want to find out if they prefer some locations more than others in our location. In the future, I hope to expand my research to include a comparison between male and female warblers’ site fidelity. At our research site, Ovenbirds, Kentucky Warblers and Hooded Warblers have been captured at the same mist net 2 to 5 times, and females tend to be recaptured at the same net more than males.

Method

The main method used is bird banding. The birds were captured using mist nets set up at 27 different locations on the TREES site. This site is an orchard with a wide variety of fruit trees. The forest can be considered as a successional forest, meaning that a more mature forest has been replaced by new vegetation that thrives (Chokkalingam, U., & De Jong, W., 2001). The nets captured the birds, which were then transported in bags for rapid examination by a bander following a specific protocol, before being released. The data was collected between 2012 and 2021. The GPS locations of each of the mist nets’ midpoints were collected. Each individual’s centroid (center point) was calculated by averaging all the GPS points they have been captured at. Then, I calculated the mean distance from the centroid for each individual to find out how faithful an individual is to an area in the site.

Subsetting the population to recaptures

I dropped observations that did not have a valid net number. Then, I subset the data to all WOTH individuals that were captured 4 or more times. I replaced the net numbers with the the GPS coordinates of each net. The column captures shows the number of times an individual has been captured at the TREES site.

# Get the band numbers of recaptured individuals

recaps <-
  migrant %>%
  filter(code %in% c("R", "SD")) %>%
  distinct(band_full)

# Get the GPS points of each observation

recapture_pts <- 
  migrant %>%
  
  # Retain individuals that were captured more than once
  
  semi_join(recaps,
            by = "band_full") %>%
  
  # Drop observations with no valid net number
  
  drop_na(net_number) %>%
  
  # Create 'captures': no. of times an individual has been captured
  
  mutate(captures = n(),
         .by = band_full) %>%
  
  # Keep WOTH individuals that have been captured more than 4 times
  
  filter(
    species_code %in% "WOTH",
    captures > 3) %>%
  
  # Get GPS coordinates from 'net' data
  
  inner_join(nets, by = "net_number") %>%
  
  # Keep the following columns
  
  select(band_full, captures, gps)

recapture_pts
## # A tibble: 122 × 3
##    band_full captures                  gps
##    <chr>        <int>          <POINT [°]>
##  1 2641-9311        4 (-88.56897 17.05255)
##  2 2641-9311        4 (-88.56897 17.05255)
##  3 2641-9311        4 (-88.56753 17.05159)
##  4 2641-9311        4 (-88.56857 17.05196)
##  5 2641-9366        4  (-88.56709 17.0517)
##  6 2641-9366        4  (-88.5668 17.05156)
##  7 2641-9366        4  (-88.5668 17.05156)
##  8 2641-9366        4  (-88.5668 17.05156)
##  9 2641-9369        7 (-88.56754 17.05093)
## 10 2641-9369        7 (-88.56759 17.05142)
## # … with 112 more rows

The data I will work with in the next steps consists of 122 observations from 23 individuals (as seen above).

Calculating centroids

I took the GPS points for each individual and calculated their center point (i.e. centroid). The map below visualizes the centroid of each individual in yellow.

centroids <-
  recapture_pts %>%
  summarize(centroid = st_union(gps) %>%
              st_centroid(),
            .by = band_full) %>%
  left_join(recapture_pts %>%
              distinct(band_full, captures),
            by = "band_full")

# A map of the nets and individual's centroids

tmap_mode("view")
## tmap mode set to interactive viewing
# Add the tmap layer for points

tm_basemap("Esri.WorldImagery") +
  tm_shape(nets) +
  tm_dots(size = 0.15, col = "white") +
  tm_text("net_number", size = 0.75) +
  tm_shape(st_as_sf(centroids)) +
  tm_dots(col = "yellow", size = 0.1, alpha = 0.7)

Calculating average distance from centroids

I calculated the distance between the GPS coordinates of the observation and the centroid of the individual. Then I calculated the mean distance from centroid for each individual. The mean distances are plotted in the histogram below.

# Get the mean distance from centroids for each individual

distances_indv <-
  recapture_pts %>%
  select(band_full, gps) %>%
  
  # Calculate centroid for each individual
  
  group_by(band_full) %>%
  mutate(centroid = st_union(gps) %>%
           st_centroid()) %>%
  ungroup() %>%
  
  # Calculate distance from centroid for each individual
  
  rowwise() %>%
  mutate(distance = st_distance(gps, centroid)) %>%
  ungroup() %>%
  
  # Calculate the mean distance from centroid for each individual
  
  summarize(mean_distance = mean(distance) %>%
              as.numeric(),
            .by = band_full)
  
# Get the mean distance from centroid for all individuals

actual_mean <-
  distances_indv %>%
  summarize(avg = mean(mean_distance)) %>%
  pull(avg)

# Plot distances

ggplot(distances_indv, aes(x = mean_distance)) +
  geom_histogram(binwidth = 10) +
  geom_vline(xintercept = actual_mean,
             color = "red") +
  annotate("text",
           x = actual_mean + 2,
           y = 1.5,
           label = "Mean distance for all individuals",
           angle = 90,
           color = "white") +
  scale_y_continuous(expand = c(0,0),
                     limits = c(0,4)) +
  labs(title = "Mean distance from centroids by individual",
       x = "Mean distance from centroid (m)",
       y = "Number of individuals")
## Warning: Removed 1 rows containing missing values (`geom_bar()`).

The mean distance from the centroid for all individuals is 49.3300781 meters, and the median is 53.3877082 meters.

Permutation test

I performed a permutation test to verify if net visits are dependent on individual.

If individuals are randomly visiting nets, then permuting (mixing up) the net numbers will yield a similar mean distance to the actual mean.

On the other hand, if individuals have a specific preference for a small area, then the actual mean will be significantly smaller than the mean from permuting the net numbers in the data.

In the code below, I permuted the net numbers of the data, then calculated the mean distance from the centroid of each individual. I repeated this process 999 more times to generate 1000 permuted means in total. I plotted these means with the actual mean of the data in a histogram.

# Set seed for reproducibility
set.seed(54)

# Perform the permutation and calculation a thousand times

permuted_means <-
  
  # Perform the operation below 1000 times
  
  replicate(1000, {
    
    # Filter data for recaptured individuals
    
    migrant %>%
      semi_join(recaps,
                by = "band_full") %>%
      
      # Drop observations that have an invalid net number
      
      drop_na(net_number) %>%
      
      # Retain WOTH individuals with more than 4 captures
      
      filter(species_code %in% "WOTH") %>%
      filter(n() > 4,
             .by = band_full) %>%
      
      # Permute the net numbers of their observations
      
      mutate(net_number = sample(net_number)) %>%
      
      # Get GPS points of nets
      
      inner_join(nets, by = "net_number") %>%
      
      # Calculate the centroid of individuals
      
      group_by(band_full) %>%
      mutate(centroid = st_union(gps) %>%
               st_centroid()) %>%
      ungroup() %>%
      
      # Calculate the distance from centroid
      
      rowwise() %>%
      mutate(distance = st_distance(gps, centroid)) %>%
      ungroup() %>%
      
      # Calculate the mean distance for each individual
      
      summarize(mean_distance = mean(distance),
                .by = band_full) %>%
      
      # Calculate the average mean distance for all individuals
      
      summarize(avg = mean(mean_distance)) %>%
      pull(avg)
  })


# Create a histogram of the average values
ggplot(data.frame(
  avg = unlist(permuted_means)),
  aes(x = avg)) +
  geom_histogram(binwidth = 0.5) +
  geom_vline(xintercept = actual_mean,
             color = "red") +
  annotate("text",
           x = actual_mean + 1,
           y = 50,
           label = "Mean distance for all individuals",
           angle = 90,
           color = "black") +
  scale_y_continuous(expand = c(0,0),
                     breaks = seq(0,80,10),
                     limits = c(0,80)) +
  labs(title = "Permuted means vs. actual mean",
       x = "Permuted mean distance (m)",
       y = "Number of results")

As seen above, the actual mean is a lot lower than the means calculated from the permutation test.

Statistical difference of permuted and actual mean

I performed a right-tailed student’s t-test to verify that the permuted means are statistically higher than the actual mean in the data.

# Test statistical difference of original and permuted means
t.test(permuted_means,
       
       # Perform a right-tailed t-test
       
       alternative = "greater",
       mu = actual_mean)
## 
##  One Sample t-test
## 
## data:  permuted_means
## t = 234.25, df = 999, p-value < 2.2e-16
## alternative hypothesis: true mean is greater than 49.33008
## 95 percent confidence interval:
##  70.57862      Inf
## sample estimates:
## mean of x 
##  70.72902

The p-value is very low and suggests that the permuted means are statistically greater than the actual mean. This suggests that Wood Thrush individuals exhibit site fidelity.