## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  warning = FALSE,
  message = FALSE,
  fig.width = 10,
  fig.height = 5.5
)

## ----data_simulation----------------------------------------------------------
library(ascent)

# 1. Functional Trait Space
set.seed(42)
aves_traits <- data.frame(
  Body_Mass   = c(15, 20, 30, 45, 60, 90, 150, 250, 400, 600),
  Beak_Length = c(10, 12, 15, 22, 28, 35,  45,  60,  85, 120),
  Frugivore   = factor(c(0, 0, 1, 1, 1, 0,  1,  1,  1,  0)),
  Forest_Dep  = factor(c(0, 0, 0, 0, 1, 1,  1,  1,  1,  1))
)
rownames(aves_traits) <- paste0("Av_sp", 1:10)

# 2a. Temporal Matrix (Deforestation)
abund_time <- rbind(
  Site1_Ref = c( 0,  0, 10, 15, 25, 20, 10, 8, 4, 2), # Mature forest
  Site1_Imp = c(40, 35, 15,  5,  0,  0,  0, 0, 0, 0)  # Logged area
)

# 2b. Spatial Matrix (Landscape Gradient)
abund_space <- rbind(
  Primary   = c( 0,  0,  5, 10, 20, 25, 15, 10, 5, 2),
  Secondary = c( 0,  5, 10, 20, 35, 20, 10,  0, 0, 0),
  Agri      = c( 0,  0,  0,  5, 45, 45,  5,  0, 0, 0)
)

## ----temporal_shift-----------------------------------------------------------
res_paired <- asc_paired(
  traits = aves_traits, abund = abund_time, 
  sites = c("Site1", "Site1"), time = c("Reference", "Impacted"),
  ref_time = "Reference", dist_method = "gower"
)
res_paired <- asc_null(res_paired, n_perm = 99, seed = 123)
summary(res_paired)

## ----leverage-----------------------------------------------------------------
# Extract the specific topological drivers
drivers_time <- asc_transitions(res_paired)
head(drivers_time$Site1$species_leverage, 4)

# Plot the PCoA trajectory and the leverage divergence
plot(res_paired, contrast = "Site1", type = "both", n_sp = 5)

## ----spatial_network----------------------------------------------------------
res_pw <- asc_pairwise(traits = aves_traits, abund = abund_space, dist_method = "gower")
res_pw <- asc_null(res_pw, n_perm = 99, seed = 42)
summary(res_pw)

# Visualize the functional gap between Primary and Secondary Forest
plot(res_pw, contrast = "Primary_vs_Secondary", type = "both", n_sp = 5)

# Visualize the severe functional gap between Secondary Forest and Agriculture
plot(res_pw, contrast = "Secondary_vs_Agri", type = "both", n_sp = 5)

## ----baseline-----------------------------------------------------------------
base_topo <- asc_baseline(traits = aves_traits, abund = abund_space, dist_method = "gower")
summary(base_topo)

## ----entities, fig.width=7, fig.height=5--------------------------------------
# Cluster the species into 3 functional entities using Gower distance
func_ent <- asc_entities(traits = aves_traits, dist_method = "gower", k = 3)
summary(func_ent)

# Visualize the functional dendrogram
plot(func_ent)

