# Librerías requeridas
library(tidyverse) # Para procedimientos de las bases de datos
library(readxl) # Cargar bases de datos con Tidyverse
library(corrplot) # Para figuras de elipses
library(vegan) # Para el PCA y Transf. Hellinger
library(factoextra) # Para el PCA
library(kableExtra) # Para Editar las tablas1. Base de datos
1.1. Contextualización
Variables biológicas: Factores o variables agrupadoras: Observaciones:
2. Componente teórico.
2.1. Introducción
2.2. Objetivos
2.3. Pregunta Investigativa
2.4. Bibliografía
3. Organización de la base de datos y exploración gráfica inicial
3.1 cargar las librerias
3.2 cargar base de datos
datos1 <- read_xlsx("DatosPecesMexicanos.xlsx","organizados") # paquete "readxl"
View(datos1)# Variables biológicas
spe <- datos1[,7:96]
head(spe)# A tibble: 6 × 90
`Hypanus sabinus` `Atractosteus spatula` `Elops saurus` `Megalops atlanticus`
<dbl> <dbl> <dbl> <dbl>
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
5 0 0 0 0
6 0 0 0 0
# ℹ 86 more variables: `Albula vulpes` <dbl>, `Anguila rostrata` <dbl>,
# `Myrophis punctatus` <dbl>, `Anchoa mitchilli` <dbl>,
# `Anchoa hepsetus` <dbl>, `Brevoortia gunteri` <dbl>,
# `Brevoortia patronus` <dbl>, `Dorosoma cepedianum` <dbl>,
# `Dorosoma petenense` <dbl>, `Harengula jaguana` <dbl>,
# `Opisthonema oglinum` <dbl>, `Campostoma anomalum` <dbl>,
# `Cyprinella lutrensis` <dbl>, `Cyprinus carpio` <dbl>, …
# Variables ambientales
amb <- datos1[,2:6]
head(amb)# A tibble: 6 × 5
Altitude Conductivity Salinity TDS Turbidez
<dbl> <dbl> <dbl> <dbl> <dbl>
1 455 361 2 219 0
2 773 475 2 317 0
3 594 462. 2 100 0
4 444 533. 1.67 211 0.67
5 632 388 2.5 100 1
6 530 301 2 100 1
3.3 Extraer las 15 especies más abundantes
3.3.1 Filtrado con comandos generales
# Extraer los promedios de las abundancias
prom = colMeans(spe)
# Extraer las 15 especies más abundantes
# FALSE muestra las 15 menos abundantes
ab <- names(sort(prom, decreasing = TRUE)[1:15])
# Crear un nuevo dataframe con las dos columnas seleccionadas
spe.ab <- data.frame(datos1[, ab])
# Otra opción de dataframe: spe.ab <- datos1[, ab]
head(spe.ab) Poecilia.mexicana Astyanax..mexicanus Herichthys.cyanoguttatus
1 21 32 4
2 0 0 3
3 0 76 0
4 432 41 143
5 210 55 5
6 333 47 73
Gambusia.regani Poecilia.formosa Notropis.aguirrepequeñoi Gambusia.affinis
1 0 5 0 0
2 0 0 0 0
3 0 0 0 0
4 1 0 48 0
5 0 0 76 0
6 0 0 250 14
Gambusia.sp. Micropterus.spp. Aplodinotus.grunniens Dorosoma.petenense
1 0 14 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
5 0 0 0 0
6 0 0 0 0
Oreochromis.aureus Moxostoma.congestum Dorosoma.cepedianum Ariopsis.felis
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 56 0 0
5 0 17 0 0
6 0 18 0 0
3.3.2 Filtrado con comandos del tidyverse
# Extraer los promedios de las abundancias
prom <- spe %>%
summarise_all(mean)
# Obtener los nombres de las 15 especies más abundantes
ab <- prom %>%
pivot_longer(cols = everything()) %>%
arrange(desc(value)) %>%
slice(1:15) %>%
pull(name)
# Crear un nuevo dataframe con las dos columnas seleccionadas
spe_ab <- datos1 %>%
select(all_of(ab))
# Mostrar las primeras filas del nuevo dataframe
head(spe_ab)# A tibble: 6 × 15
`Poecilia mexicana` `Astyanax mexicanus` `Herichthys cyanoguttatus`
<dbl> <dbl> <dbl>
1 21 32 4
2 0 0 3
3 0 76 0
4 432 41 143
5 210 55 5
6 333 47 73
# ℹ 12 more variables: `Gambusia regani` <dbl>, `Poecilia formosa` <dbl>,
# `Notropis aguirrepequeñoi` <dbl>, `Gambusia affinis` <dbl>,
# `Gambusia sp.` <dbl>, `Micropterus spp.` <dbl>,
# `Aplodinotus grunniens` <dbl>, `Dorosoma petenense` <dbl>,
# `Oreochromis aureus` <dbl>, `Moxostoma congestum` <dbl>,
# `Dorosoma cepedianum` <dbl>, `Ariopsis felis` <dbl>

4. Exploración de relaciones
4.1 elipses para las mas abundantes
# Elipses para especies
# Elipses para especies
M1 <- cor(spe.ab) # Matriz de Correlación (M)
#| label: fig-fig1
#| fig-cap: Relaciones entre parejas de variables ficoquímicas y biológicas, las elipses azules representan a las relaciones lineales positivas y las rojas a las relaciones negativas.
#Elipses con colores
corrplot(M1, method = "ellipse", title = "Relaciones entre parejas de variables ficoquímicas y biológicas", mar = c(0,0,2,0)) # Selección de variables numéricas
str(amb)tibble [43 × 5] (S3: tbl_df/tbl/data.frame)
$ Altitude : num [1:43] 455 773 594 444 632 530 509 520 501 447 ...
$ Conductivity: num [1:43] 361 475 462 533 388 ...
$ Salinity : num [1:43] 2 2 2 1.67 2.5 2 2 3 2 1 ...
$ TDS : num [1:43] 219 317 100 211 100 ...
$ Turbidez : num [1:43] 0 0 0 0.67 1 1 1 0 0 1 ...
5. Técnica de PCA - factoExtra
5.1 Linealización de las abundancias
# Siete primeros Taxones transformados con Hellinger
spe.hel= decostand(spe,"hellinger")
round(head(spe.hel[,1:7]),2) Hypanus sabinus Atractosteus spatula Elops saurus Megalops atlanticus
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
5 0 0 0 0
6 0 0 0 0
Albula vulpes Anguila rostrata Myrophis punctatus
1 0 0 0
2 0 0 0
3 0 0 0
4 0 0 0
5 0 0 0
6 0 0 0
5.2 PCA para variables ambientales
# str(amb)
# Rangos de prof a factor
amb$`Altitude`=as.factor(amb$`Altitude`)
str(amb)tibble [43 × 5] (S3: tbl_df/tbl/data.frame)
$ Altitude : Factor w/ 42 levels "2","7","11","17",..: 32 42 38 30 39 37 34 36 33 31 ...
$ Conductivity: num [1:43] 361 475 462 533 388 ...
$ Salinity : num [1:43] 2 2 2 1.67 2.5 2 2 3 2 1 ...
$ TDS : num [1:43] 219 317 100 211 100 ...
$ Turbidez : num [1:43] 0 0 0 0.67 1 1 1 0 0 1 ...
pca1 <- prcomp(amb[,2:5],scale.=T)
summary(pca1)Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.5654 0.9092 0.7253 0.44379
Proportion of Variance 0.6126 0.2066 0.1315 0.04924
Cumulative Proportion 0.6126 0.8193 0.9508 1.00000
fviz_pca_ind(pca1,
geom.ind = "point", # Representar con puntos
col.ind = amb$`Altitude`, # Color por grupos (en este caso, Altitud)
palette = "set3", # Definir colores personalizados
addEllipses = TRUE, # Agregar elipses
legend.title = "Species" # Título de la leyenda
) +
ggtitle("Distribución de especies basada en análisis de componentes principales (PCA) con símbolos diferenciados")# str(amb)
# Rangos de prof a factor
amb$`Turbidez`=as.factor(amb$`Turbidez`)
str(amb)tibble [43 × 5] (S3: tbl_df/tbl/data.frame)
$ Altitude : Factor w/ 42 levels "2","7","11","17",..: 32 42 38 30 39 37 34 36 33 31 ...
$ Conductivity: num [1:43] 361 475 462 533 388 ...
$ Salinity : num [1:43] 2 2 2 1.67 2.5 2 2 3 2 1 ...
$ TDS : num [1:43] 219 317 100 211 100 ...
$ Turbidez : Factor w/ 5 levels "0","0.67","1",..: 1 1 1 2 3 3 3 1 1 3 ...
pca2 <- prcomp(amb[,2:4],scale.=T)
summary(pca2)Importance of components:
PC1 PC2 PC3
Standard deviation 1.4500 0.8263 0.46343
Proportion of Variance 0.7008 0.2276 0.07159
Cumulative Proportion 0.7008 0.9284 1.00000
fviz_pca_ind(pca2,
geom.ind = "point", # Representar con puntos
col.ind = amb$`Turbidez`, # Color por grupos (en este caso, Turbidez)
palette = "set3", # Definir colores personalizados
addEllipses = TRUE, # Agregar elipses
legend.title = "Species" # Título de la leyenda
) +
ggtitle("Análisis PCA de especies con elipses de confianza para evaluar la variabilidad grupal")Too few points to calculate an ellipse
5.3
# Check data types
str(amb)tibble [43 × 5] (S3: tbl_df/tbl/data.frame)
$ Altitude : Factor w/ 42 levels "2","7","11","17",..: 32 42 38 30 39 37 34 36 33 31 ...
$ Conductivity: num [1:43] 361 475 462 533 388 ...
$ Salinity : num [1:43] 2 2 2 1.67 2.5 2 2 3 2 1 ...
$ TDS : num [1:43] 219 317 100 211 100 ...
$ Turbidez : Factor w/ 5 levels "0","0.67","1",..: 1 1 1 2 3 3 3 1 1 3 ...
sapply(amb, class) Altitude Conductivity Salinity TDS Turbidez
"factor" "numeric" "numeric" "numeric" "factor"
# Convert non-numeric columns to numeric (if appropriate) or exclude them
numeric_amb <- amb[, sapply(amb, is.numeric)]
# Handle missing values (if any)
numeric_amb <- na.omit(numeric_amb)# Perform PCA
pca3 <- rda(numeric_amb, scale = TRUE)
# View summary of PCA results
summary(pca3)
Call:
rda(X = numeric_amb, scale = TRUE)
Partitioning of correlations:
Inertia Proportion
Total 3 1
Unconstrained 3 1
Eigenvalues, and their contribution to the correlations
Importance of components:
PC1 PC2 PC3
Eigenvalue 2.1025 0.6827 0.21477
Proportion Explained 0.7008 0.2276 0.07159
Cumulative Proportion 0.7008 0.9284 1.00000
biplot(pca3, main = "Relación entre sitios y variables ambientales mediante análisis de componentes principales (PCA)")