Loading packages

library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.4.3
## Warning: package 'tidyr' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.3
## Warning: package 'purrr' was built under R version 4.4.3
## Warning: package 'dplyr' was built under R version 4.4.3
## Warning: package 'lubridate' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)

Reading file

# Loading biodiversity dataset from Uppsala site
uppsala <- read_excel("/Users/uwu/Documents/Rstudio/Transect_Data_Set/europe/UPPSALA.xls")
## New names:
## • `voucher` -> `voucher...5`
## • `voucher` -> `voucher...6`
## • `voucher` -> `voucher...7`
## • `voucher` -> `voucher...8`
## • `voucher` -> `voucher...9`
## • `voucher` -> `voucher...10`
## • `voucher` -> `voucher...11`
## • `voucher` -> `voucher...12`
## • `Stemdbh` -> `Stemdbh...15`
## • `Stemdbh` -> `Stemdbh...16`
## • `Stemdbh` -> `Stemdbh...17`
## • `Stemdbh` -> `Stemdbh...18`
## • `Stemdbh` -> `Stemdbh...19`
## • `Stemdbh` -> `Stemdbh...20`
## • `Stemdbh` -> `Stemdbh...21`
## • `Stemdbh` -> `Stemdbh...22`
## • `Stemdbh` -> `Stemdbh...23`
## • `Stemdbh` -> `Stemdbh...24`
## • `Stemdbh` -> `Stemdbh...25`
# Checking column names
names(uppsala)
##  [1] "Line"         "Family"       "Genus"        "Species"      "voucher...5" 
##  [6] "voucher...6"  "voucher...7"  "voucher...8"  "voucher...9"  "voucher...10"
## [11] "voucher...11" "voucher...12" "Liana"        "N(Ind.)"      "Stemdbh...15"
## [16] "Stemdbh...16" "Stemdbh...17" "Stemdbh...18" "Stemdbh...19" "Stemdbh...20"
## [21] "Stemdbh...21" "Stemdbh...22" "Stemdbh...23" "Stemdbh...24" "Stemdbh...25"
# reading in second site
cuevas<- read_excel("/Users/uwu/Documents/Rstudio/Transect_Data_Set/samerica/CUEVAS.xls")
## New names:
## • `voucher` -> `voucher...8`
## • `voucher` -> `voucher...9`
## • `voucher` -> `voucher...10`
## • `voucher` -> `voucher...11`
## • `voucher` -> `voucher...12`
## • `STEMDBH` -> `STEMDBH...15`
## • `STEMDBH` -> `STEMDBH...16`
## • `STEMDBH` -> `STEMDBH...17`
## • `STEMDBH` -> `STEMDBH...18`
## • `STEMDBH` -> `STEMDBH...19`
## • `STEMDBH` -> `STEMDBH...20`
## • `STEMDBH` -> `STEMDBH...21`
## • `STEMDBH` -> `STEMDBH...22`
## • `STEMDBH` -> `STEMDBH...23`
# checking column names and header
names(cuevas)
##  [1] "Line"         "Family"       "Genus"        "species"      "voucher1"    
##  [6] "voucher2"     "voucher3"     "voucher...8"  "voucher...9"  "voucher...10"
## [11] "voucher...11" "voucher...12" "LIANA"        "N(IND)"       "STEMDBH...15"
## [16] "STEMDBH...16" "STEMDBH...17" "STEMDBH...18" "STEMDBH...19" "STEMDBH...20"
## [21] "STEMDBH...21" "STEMDBH...22" "STEMDBH...23"
head(cuevas)
## # A tibble: 6 × 23
##    Line Family  Genus species voucher1 voucher2 voucher3 voucher...8 voucher...9
##   <dbl> <chr>   <chr> <chr>   <chr>    <chr>       <dbl> <lgl>       <lgl>      
## 1     1 ACTINI… Saur… M1      75997    <NA>           NA NA          NA         
## 2     3 ANNONA… M1    M1      76025    <NA>           NA NA          NA         
## 3     1 ARACEAE Anth… M1      75990    76064A         NA NA          NA         
## 4     4 ARACEAE Anth… M1      75990    76064A         NA NA          NA         
## 5     7 ARACEAE Anth… M1      75990    76064A         NA NA          NA         
## 6     8 ARACEAE Anth… M1      75990    76064A         NA NA          NA         
## # ℹ 14 more variables: voucher...10 <lgl>, voucher...11 <lgl>,
## #   voucher...12 <lgl>, LIANA <chr>, `N(IND)` <dbl>, STEMDBH...15 <dbl>,
## #   STEMDBH...16 <dbl>, STEMDBH...17 <dbl>, STEMDBH...18 <dbl>,
## #   STEMDBH...19 <chr>, STEMDBH...20 <dbl>, STEMDBH...21 <chr>,
## #   STEMDBH...22 <chr>, STEMDBH...23 <chr>

Labeling/Combining datasets

# adding site labels
uppsala$Line <- as.numeric(uppsala$Line)

cuevas$Line <- as.numeric(cuevas$Line)

uppsala$site <- "Uppsala"

cuevas$site <- "Cuevas"

# renaming species to match Uppsala dataset
cuevas <- cuevas %>%
  
  rename(
    Species = species
  )

# combining datasets
biodiversity <- bind_rows(uppsala, cuevas)

# viewing combined dataset
glimpse(biodiversity)
## Rows: 301
## Columns: 40
## $ Line         <dbl> 7, 1, 10, 2, 3, 4, 5, 6, 9, 5, 7, 3, 1, 10, 2, 3, 4, 6, 7…
## $ Family       <chr> "ACERACEAE", "BETULACEAE", "BETULACEAE", "BETULACEAE", "B…
## $ Genus        <chr> "ACER", "BETULA", "BETULA", "BETULA", "BETULA", "BETULA",…
## $ Species      <chr> "PLATANOIDES", "PENDULA", "PENDULA", "PENDULA", "PENDULA"…
## $ voucher...5  <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ voucher...6  <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ voucher...7  <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ voucher...8  <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ voucher...9  <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ voucher...10 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ voucher...11 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ voucher...12 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ Liana        <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ `N(Ind.)`    <dbl> 1, 5, 3, 1, 3, 1, 3, 2, 5, 1, 1, 1, 2, 2, 5, 2, 3, 2, 2, …
## $ Stemdbh...15 <dbl> 3, 8, 5, 5, 4, 28, 12, 29, 27, 4, 4, 50, 5, 6, 18, 37, 6,…
## $ Stemdbh...16 <dbl> NA, 8, 11, NA, 14, NA, 3, 32, 6, 5, NA, NA, 6, 6, 16, 11,…
## $ Stemdbh...17 <dbl> NA, 6, 4, NA, 11, NA, 8, NA, 6, 5, NA, NA, NA, NA, 6, NA,…
## $ Stemdbh...18 <dbl> NA, 5, NA, NA, NA, NA, NA, NA, 6, 4, NA, NA, NA, NA, 6, N…
## $ Stemdbh...19 <dbl> NA, 4, NA, NA, NA, NA, NA, NA, 5, 5, NA, NA, NA, NA, 14, …
## $ Stemdbh...20 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, 5, NA, NA, NA, NA, NA…
## $ Stemdbh...21 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, 5, NA, NA, NA, NA, NA…
## $ Stemdbh...22 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, 4, NA, NA, NA, NA, NA…
## $ Stemdbh...23 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, 5, NA, NA, NA, NA, NA…
## $ Stemdbh...24 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, 4, NA, NA, NA, NA, NA…
## $ Stemdbh...25 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, 3, NA, NA, NA, NA, NA…
## $ site         <chr> "Uppsala", "Uppsala", "Uppsala", "Uppsala", "Uppsala", "U…
## $ voucher1     <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ voucher2     <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ voucher3     <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ LIANA        <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ `N(IND)`     <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ STEMDBH...15 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ STEMDBH...16 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ STEMDBH...17 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ STEMDBH...18 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ STEMDBH...19 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ STEMDBH...20 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ STEMDBH...21 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ STEMDBH...22 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ STEMDBH...23 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…

Calculating species richness

# calculating species richness by site and transect
species_richness <- biodiversity %>%
  filter(!is.na(Species)) %>%
  group_by(site, Line) %>%
  
  summarise(
    richness = n_distinct(Species)
  )
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by site and Line.
## ℹ Output is grouped by site.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(site, Line))` for per-operation grouping
##   (`?dplyr::dplyr_by`) instead.
# viewing richness table

species_richness
## # A tibble: 21 × 3
## # Groups:   site [2]
##    site    Line richness
##    <chr>  <dbl>    <int>
##  1 Cuevas     1        9
##  2 Cuevas     2       11
##  3 Cuevas     3       11
##  4 Cuevas     4        9
##  5 Cuevas     5        7
##  6 Cuevas     6       14
##  7 Cuevas     7       11
##  8 Cuevas     8       10
##  9 Cuevas     9       12
## 10 Cuevas    10       12
## # ℹ 11 more rows

Figure 1. Species Richness Site Comparison

# comparing species richness between sites

ggplot(species_richness,
       aes(x = site,
           y = richness,
           fill = site)) +
  
geom_violin(alpha = 0.7) +
  
geom_boxplot(width = 0.1) +
  
labs(
  title = "Species Richness Site Comparison",
  x = "Site",
  y = "Species Richness"
) +
  
theme_bw()

# calculating the Shannon index

shannon_index <- biodiversity %>%
  filter(!is.na(Species), !is.na(Line)) %>%
  group_by(site, Line, Species) %>%
  summarise(count = n(), .groups = "drop") %>%
  group_by(site, Line) %>%
  
mutate(
  proportion = count/ sum(count)
) %>%
  
  summarise(
    shannon = -sum(proportion * log(proportion)) # calculating shannon index
  )
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by site and Line.
## ℹ Output is grouped by site.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(site, Line))` for per-operation grouping
##   (`?dplyr::dplyr_by`) instead.
# viewing shannon diversity
shannon_index
## # A tibble: 20 × 3
## # Groups:   site [2]
##    site     Line shannon
##    <chr>   <dbl>   <dbl>
##  1 Cuevas      1    1.19
##  2 Cuevas      2    2.03
##  3 Cuevas      3    1.83
##  4 Cuevas      4    1.77
##  5 Cuevas      5    1.30
##  6 Cuevas      6    2.10
##  7 Cuevas      7    1.77
##  8 Cuevas      8    1.78
##  9 Cuevas      9    2.02
## 10 Cuevas     10    1.85
## 11 Uppsala     1    1.61
## 12 Uppsala     2    1.61
## 13 Uppsala     3    1.61
## 14 Uppsala     4    1.39
## 15 Uppsala     5    1.61
## 16 Uppsala     6    1.61
## 17 Uppsala     7    2.08
## 18 Uppsala     8    1.79
## 19 Uppsala     9    1.39
## 20 Uppsala    10    1.95

Figure 2. Shannon Index Site Comparison

# comparing Shannon diversity between sites

ggplot(shannon_index,
       aes(x = site,
           y = shannon,
           fill = site)) +
  
geom_boxplot() +
  
labs(
  title = "Shannon Diversity Site Comparison",
  x = "Site",
  y = "Shannon Diversity Index"
) +
  
theme_bw()

# calculating simpson diversity

simpson_index <- biodiversity %>%
  filter(!is.na(Species), !is.na(Line)) %>%
  group_by(site, Line, Species) %>%
  summarise(count = n(), .groups = "drop") %>%
  group_by(site, Line) %>%
  
mutate(
  proportion = count/ sum(count)
) %>%
  
  summarise(
    simpson = 1 - sum(proportion^2)
    ) 
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by site and Line.
## ℹ Output is grouped by site.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(site, Line))` for per-operation grouping
##   (`?dplyr::dplyr_by`) instead.
# viewing simpson diversity table
simpson_index
## # A tibble: 20 × 3
## # Groups:   site [2]
##    site     Line simpson
##    <chr>   <dbl>   <dbl>
##  1 Cuevas      1   0.488
##  2 Cuevas      2   0.796
##  3 Cuevas      3   0.723
##  4 Cuevas      4   0.75 
##  5 Cuevas      5   0.585
##  6 Cuevas      6   0.792
##  7 Cuevas      7   0.729
##  8 Cuevas      8   0.72 
##  9 Cuevas      9   0.788
## 10 Cuevas     10   0.744
## 11 Uppsala     1   0.8  
## 12 Uppsala     2   0.8  
## 13 Uppsala     3   0.8  
## 14 Uppsala     4   0.75 
## 15 Uppsala     5   0.8  
## 16 Uppsala     6   0.8  
## 17 Uppsala     7   0.875
## 18 Uppsala     8   0.833
## 19 Uppsala     9   0.75 
## 20 Uppsala    10   0.857

Figure 3. Simpson Index Site Comparison

# comparing simpson index between sites

ggplot(simpson_index,
       aes(x = site,
           y = simpson,
           fill = site)) +
  
  geom_boxplot() +
  
  labs(
    title = "Simpson Diversity Site Comparison",
    x = "Site",
    y = "Simpson Diversity Index"
  ) +
  
theme_bw()

# combining richness and shannon tables

evenness_index <- left_join(shannon_index,
                            species_richness,
                            by = c("site", "Line"))
# calculating evenness

evenness_index <- evenness_index %>%
  
  mutate(
    evenness_index = shannon / log(richness)
  )

# viewing eveness table

evenness_index
## # A tibble: 20 × 5
## # Groups:   site [2]
##    site     Line shannon richness evenness_index
##    <chr>   <dbl>   <dbl>    <int>          <dbl>
##  1 Cuevas      1    1.19        9          0.540
##  2 Cuevas      2    2.03       11          0.847
##  3 Cuevas      3    1.83       11          0.763
##  4 Cuevas      4    1.77        9          0.807
##  5 Cuevas      5    1.30        7          0.668
##  6 Cuevas      6    2.10       14          0.796
##  7 Cuevas      7    1.77       11          0.736
##  8 Cuevas      8    1.78       10          0.771
##  9 Cuevas      9    2.02       12          0.814
## 10 Cuevas     10    1.85       12          0.743
## 11 Uppsala     1    1.61        5          1    
## 12 Uppsala     2    1.61        5          1    
## 13 Uppsala     3    1.61        5          1    
## 14 Uppsala     4    1.39        4          1    
## 15 Uppsala     5    1.61        5          1    
## 16 Uppsala     6    1.61        5          1    
## 17 Uppsala     7    2.08        8          1    
## 18 Uppsala     8    1.79        6          1    
## 19 Uppsala     9    1.39        4          1    
## 20 Uppsala    10    1.95        7          1

Figure 4. Species Evenness Site Comparison

# comparing evenness between sites then making box plot

ggplot(evenness_index,
       aes(x = site,
           y = evenness_index,
           fill = site)) +
  
geom_boxplot() +
  
labs(
  title = "Species Evenness Site Comparison",
  x = "Site",
  y = "Evenness"
) +
  
theme_bw()

Figure 5. Relationship Between Shannon and Simpson Diversity Indices Across Sites

# Shannon vs Simpson scatterplot

combined_indices <- left_join(
  shannon_index,
  simpson_index,
  by = c("site", "Line")
)

ggplot(combined_indices,
       aes(x = shannon,
           y = simpson,
           color = site)) +
  
  geom_point(size = 3) +
  
labs(
  title = "Shannon vs Simpson Diversity",
  x = "Shannon Index",
  y = "Simpson Index"
) +
  
theme_bw()

Table 1. Mean Species Richness, Shannon Diversity, Simpson Diversity, and Evenness Values by Site

# creating final summary table by site

summary_table <- species_richness %>%
  
  group_by(site) %>%
  
  summarise(
    mean_richness = mean(richness)
  ) %>%
  
  left_join(
    shannon_index %>%
      group_by(site) %>%
      summarise(mean_shannon = mean(shannon)),
    by = "site"
  ) %>%
  
  left_join(
    simpson_index %>%
      group_by(site) %>%
      summarise(mean_simpson = mean(simpson)),
    by = "site"
  ) %>%
    
  left_join(
    evenness_index %>%
      group_by(site) %>%
      summarise(mean_evenness = mean(evenness_index)),
    by = "site"
  )

# viewing summary table

summary_table
## # A tibble: 2 × 5
##   site    mean_richness mean_shannon mean_simpson mean_evenness
##   <chr>           <dbl>        <dbl>        <dbl>         <dbl>
## 1 Cuevas           9.73         1.76        0.712         0.749
## 2 Uppsala          5.4          1.66        0.807         1