``` r
# Data Cleaning
library(readxl)
## Warning: package 'readxl' was built under R version 4.5.3
# Site 1: Camorin-Jacarepaguá, Brazil
camorin<- read_excel("CAMORIN.xls")
## New names:
## • `voucher` -> `voucher...8`
## • `voucher` -> `voucher...10`
## • `voucher` -> `voucher...11`
## • `voucher` -> `voucher...12`
## • `STEMSDBH` -> `STEMSDBH...15`
## • `STEMSDBH` -> `STEMSDBH...16`
## • `STEMSDBH` -> `STEMSDBH...17`
## • `STEMSDBH` -> `STEMSDBH...18`
## • `STEMSDBH` -> `STEMSDBH...19`
camorin$Line<- as.numeric(camorin$Line)
camorin<- camorin[order(camorin$Line),]
# Remove rows with missing values (number of individuals)
camorin<- camorin[!is.na(camorin[,"N(IND.)"]),]
# Total individuals per transect (N. Ind)
camorin_line<- aggregate(camorin[,"N(IND.)"], list(Line=camorin$Line), sum)
colnames(camorin_line)[2]<- "N(IND.)"
# Per species calculations (proportions)
camorin[,"Prop"]<- camorin[,"N(IND.)"]/camorin_line[match(camorin$Line, camorin_line$Line), "N(IND.)"]
camorin[,"PropSquared"]<- camorin$Prop^2
# Simpson's index calculations
camorin_line[,"D"]<- aggregate(list(D=camorin$PropSquared), list(Line=camorin$Line), sum)$D
camorin_line[,"1-D"]<- 1-camorin_line[,"D"]
camorin_line[,"1/D"]<- 1/camorin_line[,"D"]
camorin_line[,"S"]<- aggregate(list(S=camorin$Line), list(Line=camorin$Line), length)$S
camorin_line[,"Esimpson"]<- camorin_line[,"1/D"]/camorin_line[,"S"]
# Shannon index calculations
# H = -sum(pi * ln(pi)) per transect
camorin[,"PlogP"]<- ifelse(camorin$Prop>0, camorin$Prop*log(camorin$Prop), 0)
camorin_line[,"H"]<- -aggregate(list(H=camorin$PlogP), list(Line=camorin$Line), sum)$H
camorin_line[,"Eshannon"]<- camorin_line[,"H"]/log(camorin_line[,"S"])#Evenness = H/ ln(S)
# Camorin averages
camorin_line$Mean_D<- mean(camorin_line$D)
camorin_line$Mean_1minusD<- mean(camorin_line$`1-D`)
camorin_line$Mean_1overD<- mean(camorin_line$`1/D`)
camorin_line$Mean_Esimpson<- mean(camorin_line$Esimpson)
camorin_line$Mean_H<- mean(camorin_line$H)
camorin_line$Mean_Eshannon<- mean(camorin_line$Eshannon)
camorin_line$Mean_S<- mean(camorin_line$S)
# DBH calculations
dbh_cols_camorin<- grep("STEMSDBH", colnames(camorin))
camorin[, dbh_cols_camorin]<- lapply(camorin[, dbh_cols_camorin], as.numeric)
camorin[,"DBHsum"]<- rowSums(camorin[, dbh_cols_camorin], na.rm=TRUE)
camorin_line[,"DBHsum"]<- aggregate(camorin$DBHsum, list(camorin$Line), sum)$x
camorin_line[,"DBHmean"]<- camorin_line[,"DBHsum"]/camorin_line[,"N(IND.)"]
# SITE 2: Ruissalo, Finland
ruissalo<- read_excel("RUISSALO.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`
## • `Stemdbh` -> `Stemdbh...26`
## • `Stemdbh` -> `Stemdbh...27`
## • `Stemdbh` -> `Stemdbh...28`
## • `Stemdbh` -> `Stemdbh...29`
## • `Stemdbh` -> `Stemdbh...30`
## • `Stemdbh` -> `Stemdbh...31`
## • `Stemdbh` -> `Stemdbh...32`
## • `Stemdbh` -> `Stemdbh...33`
ruissalo$Line<- as.numeric(ruissalo$Line)
ruissalo<- ruissalo[order(ruissalo$Line),]
# Remove rows with missing values (number of individuals)
ruissalo<- ruissalo[!is.na(ruissalo[,"N(Ind.)"]),]
# Total individuals per transect (N. Ind)
ruissalo_line<- aggregate(ruissalo[,"N(Ind.)"], list(Line=ruissalo$Line), sum)
colnames(ruissalo_line)[2]<- "N(IND.)"
# Per species calculations (proportions)
ruissalo[,"Prop"]<- ruissalo[,"N(Ind.)"]/ruissalo_line[match(ruissalo$Line, ruissalo_line$Line), "N(IND.)"]
ruissalo[,"PropSquared"]<- ruissalo$Prop^2
# Simpson's index calculations
ruissalo_line[,"D"]<- aggregate(list(D=ruissalo$PropSquared), list(Line=ruissalo$Line), sum)$D
ruissalo_line[,"1-D"]<- 1-ruissalo_line[,"D"]
ruissalo_line[,"1/D"]<- 1/ruissalo_line[,"D"]
ruissalo_line[,"S"]<- aggregate(list(S=ruissalo$Line), list(Line=ruissalo$Line), length)$S
ruissalo_line[,"Esimpson"]<- ruissalo_line[,"1/D"]/ruissalo_line[,"S"]
# Shannon index
ruissalo[,"PlogP"]<- ifelse(ruissalo$Prop > 0, ruissalo$Prop*log(ruissalo$Prop), 0)
ruissalo_line[,"H"]<- -aggregate(list(H=ruissalo$PlogP), list(Line=ruissalo$Line), sum)$H
ruissalo_line[,"Eshannon"]<- ruissalo_line[,"H"]/log(ruissalo_line[,"S"])
# Site averages
ruissalo_line$Mean_D<- mean(ruissalo_line$D)
ruissalo_line$Mean_1minusD<- mean(ruissalo_line$`1-D`)
ruissalo_line$Mean_1overD<- mean(ruissalo_line$`1/D`)
ruissalo_line$Mean_Esimpson<- mean(ruissalo_line$Esimpson)
ruissalo_line$Mean_H<- mean(ruissalo_line$H)
ruissalo_line$Mean_Eshannon<- mean(ruissalo_line$Eshannon)
ruissalo_line$Mean_S<- mean(ruissalo_line$S)
# DBH calculations
dbh_cols_ruissalo<- grep("Stemdbh", colnames(ruissalo))
ruissalo[, dbh_cols_ruissalo]<- lapply(ruissalo[, dbh_cols_ruissalo], as.numeric)
ruissalo[,"DBHsum"]<- rowSums(ruissalo[, dbh_cols_ruissalo], na.rm=TRUE)
ruissalo_line[,"DBHsum"]<- aggregate(ruissalo$DBHsum, list(ruissalo$Line), sum)$x
ruissalo_line[,"DBHmean"]<- ruissalo_line[,"DBHsum"]/ruissalo_line[,"N(IND.)"]
# Summary Tables
# Simpson's table
simpsons_table <-data.frame(
Site=c("Camorin, Brazil", "Ruissalo, Finland"),
D=c(camorin_line$Mean_D[1],ruissalo_line$Mean_D[1]),
"1-D"=c(camorin_line$Mean_1minusD[1],ruissalo_line$Mean_1minusD[1]),
"1/D"=c(camorin_line$Mean_1overD[1],ruissalo_line$Mean_1overD[1]),
Esimpson=c(camorin_line$Mean_Esimpson[1],ruissalo_line$Mean_Esimpson[1])
)
# Shannon table
shannon_table<- data.frame(
Site=c("Camorin, Brazil", "Ruissalo, Finland"),
H=c(camorin_line$Mean_H[1],ruissalo_line$Mean_H[1]),
Eshannon= c(camorin_line$Mean_Eshannon[1],ruissalo_line$Mean_Eshannon[1])
)
# Print both tables
print(simpsons_table)
## Site D X1.D X1.D.1 Esimpson
## 1 Camorin, Brazil 0.04758249 0.9524175 21.696706 0.7903022
## 2 Ruissalo, Finland 0.28832369 0.7116763 3.614451 0.7017526
print(shannon_table)
## Site H Eshannon
## 1 Camorin, Brazil 3.192966 0.9674377
## 2 Ruissalo, Finland 1.405109 0.8622421
# Visualizations
library(ggplot2)
library(ggridges)
# Rename columns
colnames(simpsons_table)<-c("Site", "D", "1-D", "1/D", "Esimpson")
# Plot 1: Side-by-side average DBH bar plot
dbh_matrix<-rbind(camorin_line$DBHmean, ruissalo_line$DBHmean)
rownames(dbh_matrix)<-c("Camorin, Brazil", "Ruissalo, Finland")
colnames(dbh_matrix)<-camorin_line$Line
barplot(dbh_matrix,
beside = TRUE,
col = c("forestgreen", "lightblue"),
xlab = "Transect Number",
ylab = "Average DBH (cm)",
main = "Average Diameter at Breast Height (DBH) per Transect",
legend.text = TRUE,
args.legend = list(x = "topleft"),
cex.main = 0.9)
