# ==============================
# ETAPA 1: Cargar datos
# ==============================

library(readxl)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)
library(vegan)
## Cargando paquete requerido: permute
library(tibble)

datos <- read_excel("C:/Users/rodas/Downloads/Evaluacion Frecuente rodas/Datos_Ecologia_Unidad2_4parcelas_160registros_set5.xlsx")

head(datos)
## # A tibble: 6 × 20
##   Fecha_medicion      Medicion Parcela Etapa  Sp01  Sp02  Sp03  Sp04  Sp05  Sp06
##   <dttm>                 <dbl> <chr>   <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2025-01-05 00:00:00        1 P01     Pion…    32    14    36     9     5     6
## 2 2025-01-05 00:00:00        1 P02     Inte…    27    35     9     3    15     9
## 3 2025-01-05 00:00:00        1 P03     Tard…     6     5     4     9     6    11
## 4 2025-01-05 00:00:00        1 P04     Madu…     1     3     2    12     5     7
## 5 2025-01-12 00:00:00        2 P01     Pion…    27    17    11    16     0    13
## 6 2025-01-12 00:00:00        2 P02     Inte…     9    11    10     4    16    21
## # ℹ 10 more variables: Sp07 <dbl>, Sp08 <dbl>, Sp09 <dbl>, Sp10 <dbl>,
## #   Sp11 <dbl>, Sp12 <dbl>, Sp13 <dbl>, Sp14 <dbl>, Sp15 <dbl>, Total_ind <dbl>
str(datos)
## tibble [160 × 20] (S3: tbl_df/tbl/data.frame)
##  $ Fecha_medicion: POSIXct[1:160], format: "2025-01-05" "2025-01-05" ...
##  $ Medicion      : num [1:160] 1 1 1 1 2 2 2 2 3 3 ...
##  $ Parcela       : chr [1:160] "P01" "P02" "P03" "P04" ...
##  $ Etapa         : chr [1:160] "Pionera" "Intermedia" "Tardia" "Madura" ...
##  $ Sp01          : num [1:160] 32 27 6 1 27 9 9 6 36 8 ...
##  $ Sp02          : num [1:160] 14 35 5 3 17 11 2 7 10 19 ...
##  $ Sp03          : num [1:160] 36 9 4 2 11 10 4 0 34 7 ...
##  $ Sp04          : num [1:160] 9 3 9 12 16 4 8 2 5 10 ...
##  $ Sp05          : num [1:160] 5 15 6 5 0 16 3 4 3 14 ...
##  $ Sp06          : num [1:160] 6 9 11 7 13 21 3 8 1 5 ...
##  $ Sp07          : num [1:160] 3 12 10 14 2 8 1 21 0 5 ...
##  $ Sp08          : num [1:160] 2 3 13 14 3 11 44 19 3 10 ...
##  $ Sp09          : num [1:160] 9 2 10 5 2 6 5 16 1 4 ...
##  $ Sp10          : num [1:160] 18 7 28 5 2 9 5 1 0 13 ...
##  $ Sp11          : num [1:160] 2 5 12 6 6 3 1 1 0 0 ...
##  $ Sp12          : num [1:160] 0 11 9 14 2 9 2 25 1 34 ...
##  $ Sp13          : num [1:160] 2 1 7 5 8 0 9 24 1 1 ...
##  $ Sp14          : num [1:160] 1 1 5 22 3 3 3 3 0 2 ...
##  $ Sp15          : num [1:160] 0 1 2 3 0 0 0 12 1 10 ...
##  $ Total_ind     : num [1:160] 139 141 137 118 112 120 99 149 96 142 ...
View (datos)
# ==============================
# ETAPA 2: Crear matriz de abundancias
# ==============================

# Seleccionar solo columnas de especies
especies <- paste0("Sp", sprintf("%02d", 1:15))

mat <- datos %>%
  select(all_of(especies)) %>%
  as.matrix()

# Asignar nombres únicos por fila
rownames(mat) <- paste(datos$Parcela, datos$Medicion, sep = "_")

dim(mat)
## [1] 160  15
View (mat)
# ==============================
# ETAPA 3: Diversidad Alfa
# ==============================

riqueza  <- vegan::specnumber(mat)
shannon  <- vegan::diversity(mat, index = "shannon")
simpson  <- vegan::diversity(mat, index = "simpson")
pielou   <- shannon / log(pmax(riqueza, 1))

res_alfa <- datos %>%
  select(Parcela, Etapa) %>%
  mutate(Riqueza = riqueza,
         Shannon = shannon,
         Simpson = simpson,
         Pielou  = pielou)

head(res_alfa)
## # A tibble: 6 × 6
##   Parcela Etapa      Riqueza Shannon Simpson Pielou
##   <chr>   <chr>        <int>   <dbl>   <dbl>  <dbl>
## 1 P01     Pionera         13    2.10   0.840  0.817
## 2 P02     Intermedia      15    2.26   0.864  0.834
## 3 P03     Tardia          15    2.54   0.906  0.937
## 4 P04     Madura          15    2.46   0.898  0.907
## 5 P01     Pionera         13    2.21   0.865  0.862
## 6 P02     Intermedia      13    2.43   0.902  0.947
colnames(res_alfa)
## [1] "Parcela" "Etapa"   "Riqueza" "Shannon" "Simpson" "Pielou"
res_etapa <- res_alfa %>%
  group_by(Etapa) %>%
  summarise(
    Riqueza_prom = mean(Riqueza),
    Shannon_prom = mean(Shannon),
    Simpson_prom = mean(Simpson),
    Pielou_prom  = mean(Pielou),
    .groups = "drop"
  )

view(res_etapa)

ggplot(res_alfa, aes(x = Etapa, y = Shannon)) +
  geom_boxplot() +
  geom_jitter(width = 0.15) +
  theme_minimal() +
  labs(title = "Diversidad (Shannon) por etapa de sucesión",
       x = "Etapa sucesional",
       y = "Índice de Shannon")

# ==============================
# ETAPA 5: Beta y NMDS
# ==============================

d_bray <- vegdist(mat, method = "bray")

nmds <- metaMDS(mat, distance = "bray", k = 2, trymax = 100)
## Square root transformation
## Wisconsin double standardization
## Run 0 stress 0.2209277 
## Run 1 stress 0.2311307 
## Run 2 stress 0.229948 
## Run 3 stress 0.2281652 
## Run 4 stress 0.2295452 
## Run 5 stress 0.2334529 
## Run 6 stress 0.2301743 
## Run 7 stress 0.223749 
## Run 8 stress 0.2323438 
## Run 9 stress 0.2301902 
## Run 10 stress 0.2280201 
## Run 11 stress 0.2293367 
## Run 12 stress 0.2244792 
## Run 13 stress 0.2208762 
## ... New best solution
## ... Procrustes: rmse 0.05191951  max resid 0.2043301 
## Run 14 stress 0.2257689 
## Run 15 stress 0.2228373 
## Run 16 stress 0.227394 
## Run 17 stress 0.2224178 
## Run 18 stress 0.2270086 
## Run 19 stress 0.2273085 
## Run 20 stress 0.2290535 
## Run 21 stress 0.2307192 
## Run 22 stress 0.2291067 
## Run 23 stress 0.2260145 
## Run 24 stress 0.2279572 
## Run 25 stress 0.2297179 
## Run 26 stress 0.2249279 
## Run 27 stress 0.2308815 
## Run 28 stress 0.2304708 
## Run 29 stress 0.2241027 
## Run 30 stress 0.232943 
## Run 31 stress 0.2305536 
## Run 32 stress 0.2262002 
## Run 33 stress 0.2313536 
## Run 34 stress 0.2295042 
## Run 35 stress 0.2280698 
## Run 36 stress 0.2262109 
## Run 37 stress 0.2286348 
## Run 38 stress 0.2302271 
## Run 39 stress 0.2276962 
## Run 40 stress 0.41554 
## Run 41 stress 0.2282155 
## Run 42 stress 0.2265641 
## Run 43 stress 0.2276147 
## Run 44 stress 0.2238581 
## Run 45 stress 0.232413 
## Run 46 stress 0.2334669 
## Run 47 stress 0.2268916 
## Run 48 stress 0.226984 
## Run 49 stress 0.2275687 
## Run 50 stress 0.2253969 
## Run 51 stress 0.2296187 
## Run 52 stress 0.2309227 
## Run 53 stress 0.2288836 
## Run 54 stress 0.2294104 
## Run 55 stress 0.2223727 
## Run 56 stress 0.228266 
## Run 57 stress 0.2328643 
## Run 58 stress 0.2296022 
## Run 59 stress 0.22369 
## Run 60 stress 0.229433 
## Run 61 stress 0.2231637 
## Run 62 stress 0.2256161 
## Run 63 stress 0.2311923 
## Run 64 stress 0.2259121 
## Run 65 stress 0.225825 
## Run 66 stress 0.2285478 
## Run 67 stress 0.2298571 
## Run 68 stress 0.22466 
## Run 69 stress 0.228668 
## Run 70 stress 0.2253438 
## Run 71 stress 0.2302683 
## Run 72 stress 0.2277623 
## Run 73 stress 0.2303946 
## Run 74 stress 0.2290141 
## Run 75 stress 0.229843 
## Run 76 stress 0.227198 
## Run 77 stress 0.233616 
## Run 78 stress 0.2241392 
## Run 79 stress 0.2265945 
## Run 80 stress 0.2264992 
## Run 81 stress 0.2308779 
## Run 82 stress 0.2242462 
## Run 83 stress 0.2215908 
## Run 84 stress 0.228971 
## Run 85 stress 0.2263423 
## Run 86 stress 0.2249868 
## Run 87 stress 0.2283182 
## Run 88 stress 0.2238053 
## Run 89 stress 0.2253197 
## Run 90 stress 0.2316124 
## Run 91 stress 0.2297313 
## Run 92 stress 0.2291357 
## Run 93 stress 0.2317228 
## Run 94 stress 0.2297508 
## Run 95 stress 0.2262398 
## Run 96 stress 0.2299067 
## Run 97 stress 0.2257949 
## Run 98 stress 0.2262326 
## Run 99 stress 0.2267431 
## Run 100 stress 0.2244638 
## *** Best solution was not repeated -- monoMDS stopping criteria:
##      8: no. of iterations >= maxit
##     92: stress ratio > sratmax
scores_nmds <- as.data.frame(scores(nmds, display = "sites")) %>%
  rownames_to_column("ID") %>%
  mutate(Etapa = datos$Etapa)

ggplot(scores_nmds, aes(x = NMDS1, y = NMDS2, shape = Etapa)) +
  geom_point(size = 3) +
  theme_minimal() +
  labs(title = paste("NMDS - Stress =", round(nmds$stress,3)))

#Diversidad Gamma
gamma_n <- sum(colSums(mat) > 0)

view(gamma_n)
#curvas de rango abundancia
rank_df <- datos %>%
  group_by(Etapa) %>%
  summarise(across(all_of(especies), mean), .groups = "drop") %>%
  pivot_longer(-Etapa, names_to = "Especie", values_to = "Abundancia") %>%
  group_by(Etapa) %>%
  arrange(desc(Abundancia), .by_group = TRUE) %>%
  mutate(Rango = row_number())

ggplot(rank_df, aes(x = Rango, y = Abundancia)) +
  geom_line() +
  facet_wrap(~Etapa, scales = "free_y") +
  theme_minimal() +
  labs(title = "Curvas rango-abundancia")