--- title: "Exploración de la Base de Datos `threatenedperu`" author: "Paul E. Santos Andrade" date: "`r Sys.Date()`" output: rmarkdown::html_vignette: toc: true toc_depth: 3 vignette: > %\VignetteIndexEntry{Exploración de la Base de Datos threatenedperu} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include=FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) library(peruflorads43) library(dplyr) library(tibble) library(ggplot2) library(scales) library(gt) ``` # Introducción La base de datos threatenedperu incluida en el paquete `peruflorads43` contiene la lista oficial de especies de plantas amenazadas del Perú según el **Decreto Supremo N° 043-2006-AG** y su actualización taxonómica utilizando la información de **Plants of the World Online (POWO)** del Royal Botanic Gardens, Kew. ## Carga del conjunto de datos ```{r} threatenedperu <- get_threatened_database(type = "original") ``` El objeto threatenedperu es un tibble con 776 registros y 13 columnas, estructurado de la siguiente manera: | Tipo de columna | Variables principales | Descripción | | ------------------------------------- | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------- | | **Datos originales (DS 043-2006-AG)** | `scientific_name`, `author`, `family`, `threat_category`, `genus`, `species`, `infraspecies`, `tag`, `infraspecies_2` | Información original del listado de especies amenazadas publicado en 2006. | | **Datos actualizados (POWO)** | `accepted_name`, `accepted_name_author`, `accepted_family`, `taxonomic_status` | Información validada con taxonomía actualizada según POWO. | ## Revisión de escritura y normalización Durante la depuración se realizaron las siguientes acciones: - Corrección de errores tipográficos en nombres científicos y autores. - Homogeneización de abreviaturas de autores. - Normalización de mayúsculas en géneros y epítetos. - Eliminación de espacios dobles y caracteres especiales. Ejemplo comparativo de los de errores tipográficos en nombres científicos: ```{r} threatenedperu |> dplyr::mutate(compara = scientific_name != accepted_name) |> dplyr::mutate( # Calcula la distancia solo cuando los nombres difieren string_distance = ifelse( compara, stringdist::stringdist(scientific_name, accepted_name, method = "lv"), # 'lv' = Levenshtein 0 ) ) |> dplyr::filter(string_distance > 0 & string_distance < 3) |> dplyr::select(scientific_name, accepted_name, string_distance) |> gt::gt() ``` ## Variable taxonomic_status Esta variable describe la relación entre el nombre original y su estado taxonómico según POWO: - **"Accepted"** El nombre original se mantiene vigente. - **"Synonym"** El nombre original fue reemplazado por otro aceptado. - **"No opinion"** No se dispone de información actual o existe ambigüedad taxonómica. Ejemplos de cada categoría: ```{r} # Nombres aceptados threatenedperu |> filter(taxonomic_status == "Accepted") |> select(scientific_name, accepted_name) |> slice_head(n = 5) #Nombres sinónimos threatenedperu |> filter(taxonomic_status == "Synonym") |> select(scientific_name, accepted_name) |> slice_head(n = 5) #Casos sin opinión threatenedperu |> filter(taxonomic_status == "No opinion") |> select(scientific_name, accepted_name) |> slice_head(n = 5) ``` ## Análisis cuantitativo de la actualización taxonómica 1. Proporción de especies según su estatus taxonómico ```{r} status_summary <- threatenedperu |> count(taxonomic_status) |> mutate(pct = round(100 * n / sum(n), 1), label = paste0(pct, "% (", n, ")")) gt::gt(status_summary) ``` ```{r fig.width=20, fig.height=10, out.width='90%', fig.align='center'} ggplot(status_summary, aes( x = reorder(taxonomic_status, -pct), y = pct, fill = taxonomic_status )) + geom_col(width = 0.7, show.legend = FALSE) + geom_text(aes(label = label), vjust = -0.4, size = 10, fontface = "bold") + scale_fill_manual( values = c( "Accepted" = "#4CAF50", # verde para nombres válidos "Synonym" = "#2196F3", # azul para sinónimos "No opinion" = "#FFC107" # amarillo para indeterminados ) ) + labs( title = "Proporción de nombres por estado taxonómico", x = "Estatus taxonómico", y = "Porcentaje (%)" ) + scale_y_continuous(expand = expansion(mult = c(0, 0.1))) + theme_bw() + theme( plot.title = element_text(size = 28, face = "bold", hjust = 0.5), axis.title.x = element_text(size = 22, margin = margin(t = 10)), axis.title.y = element_text(size = 22,margin = margin(r = 10)), axis.text = element_text(size = 22, color = "black"), panel.grid.minor = element_blank(), panel.grid.major.x = element_blank() ) ``` 2. Distribución de especies por categoría de amenaza ```{r} category_summary <- threatenedperu |> count(threat_category, .drop = FALSE) |> mutate( threat_category = factor(threat_category, levels = c("CR","EN","VU","NT")), pct = round(100 * n / sum(n), 1), label = paste0(n, " (", pct, "%)") ) gt::gt(category_summary) ``` ```{r fig.width=20, fig.height=10, out.width='90%', fig.align='center'} ggplot(category_summary, aes(x = forcats::fct_reorder(threat_category, n), y = n, fill = threat_category)) + geom_col(width = 0.7, show.legend = FALSE) + geom_text(aes(label = label), vjust = -0.35, size = 10, fontface = "bold") + scale_fill_manual(values = c( "CR" = "#D32F2F", "EN" = "#F57C00", "VU" = "#FBC02D", "NT" = "#388E3C" )) + labs( title = "Distribución de especies por categoría de amenaza (IUCN)", x = "Categoría IUCN", y = "Número de especies" ) + scale_y_continuous(expand = expansion(mult = c(0, 0.10))) + theme_bw() + theme( plot.title = element_text(size = 28, face = "bold", hjust = 0.5), axis.text = element_text(size = 22, color = "black"), axis.title = element_text(size = 22, color = "black"), panel.grid.major.x = element_blank() ) ``` ## Ejemplos de cambios taxonómicos relevantes Algunos casos de sinónimos actualizados con sus equivalentes aceptados: ```{r} threatenedperu |> filter(taxonomic_status == "Synonym") |> select(scientific_name, accepted_name, accepted_family, threat_category) |> head(n=20) |> gt::gt() ``` Estos ejemplos muestran cómo especies registradas originalmente bajo un nombre hoy obsoleto fueron actualizadas conforme a la nomenclatura moderna (por ejemplo, Pucara leucantha ~ Stenomesson leucanthum). ## Evaluación de coincidencias entre nombres originales y aceptados El siguiente código calcula la proporción de coincidencia directa entre scientific_name y accepted_name: ```{r} threatenedperu |> summarise( total = n(), iguales = sum(scientific_name == accepted_name, na.rm = TRUE), porcentaje_iguales = round(100 * iguales / total, 1) ) ``` Esto permite cuantificar el grado de estabilidad nomenclatural en el decreto original frente a la taxonomía actual. ## Conclusiones - La base de datos `threatenedperu` integra información oficial del **DS 043-2006-AG** con nomenclatura validada por **POWO**, permitiendo análisis actualizados sobre especies protegidas. - La variable `taxonomic_status` es clave para identificar cambios taxonómicos: alrededor de 23.1% de los nombres originales corresponden a sinónimos. ```{r} threatenedperu |> dplyr::count(taxonomic_status) |> dplyr::mutate(porcentaje = scales::percent(n / sum(n), accuracy = 0.1)) |> gt::gt() ``` - La homogeneización de la escritura y la normalización de abreviaturas garantizan la interoperabilidad con otras bases de datos botánicas. - Este recurso constituye una herramienta util para la investigación, conservación y gestión de la flora amenazada del Perú. Referencias Ministerio de Agricultura del Perú (2006). Decreto Supremo N° 043-2006-AG: Listado de especies de flora amenazada del Perú. Plants of the World Online (POWO). Royal Botanic Gardens, Kew. https://powo.science.kew.org