2026-05-29

Propósito de la presentación

Esta presentación desarrolla un análisis MANOVA aplicado a la base de datos Fish.csv, integrando tres niveles de trabajo:

  1. Fundamento teórico del MANOVA en diseño de experimentos.
  2. Desarrollo matemático y estadístico mediante matrices.
  3. Implementación final en RStudio.

El análisis considera la variable Species como factor experimental y las variables Weight, Height y Width como respuestas multivariadas.

Contexto del diseño experimental

En un diseño de experimentos clásico, un investigador compara tratamientos para determinar si producen diferencias sobre una variable respuesta. Sin embargo, en muchos estudios reales no se mide una sola respuesta, sino varias características relacionadas entre sí.

En esta base de datos, cada especie de pez puede entenderse como un grupo o tratamiento. El interés estadístico consiste en determinar si las especies presentan diferencias conjuntas en sus características morfológicas.

El factor experimental es:

\[ Species \]

Las variables respuesta son:

\[ Y_1 = Weight \]

\[ Y_2 = Height \]

\[ Y_3 = Width \]

¿Por qué usar MANOVA?

El MANOVA se utiliza cuando se desea evaluar simultáneamente el efecto de un factor sobre dos o más variables dependientes continuas.

En este caso, no se busca estudiar únicamente si las especies difieren en peso, altura o ancho por separado. El objetivo es evaluar si existe una diferencia global en el vector morfológico compuesto por:

\[ \mathbf{Y}= \begin{pmatrix} Weight \\ Height \\ Width \end{pmatrix} \]

La ventaja del MANOVA es que incorpora la relación estadística entre las variables respuesta y reduce el riesgo de aumentar el error tipo I al realizar múltiples ANOVA independientes.

Modelo estadístico MANOVA

El modelo MANOVA para un diseño completamente aleatorizado con un factor se expresa como:

\[ \mathbf{Y}_{ij}=\boldsymbol{\mu}+\boldsymbol{\tau}_i+\boldsymbol{\varepsilon}_{ij} \]

Donde:

  • \(\mathbf{Y}_{ij}\) es el vector de respuestas del pez \(j\) perteneciente a la especie \(i\).
  • \(\boldsymbol{\mu}\) es el vector de medias generales.
  • \(\boldsymbol{\tau}_i\) es el efecto multivariado de la especie \(i\).
  • \(\boldsymbol{\varepsilon}_{ij}\) es el vector de errores aleatorios.

Vector de respuestas

Para cada pez observado en la base de datos, el vector de respuestas es:

\[ \mathbf{Y}_{ij}= \begin{pmatrix} Weight_{ij} \\ Height_{ij} \\ Width_{ij} \end{pmatrix} \]

En este análisis:

\[ i=1,2,\ldots,7 \]

porque existen siete especies de peces.

Además:

\[ p=3 \]

porque se analizan tres variables respuesta.

Hipótesis estadística general

La hipótesis nula plantea que todas las especies tienen el mismo vector promedio de respuestas:

\[ H_0:\boldsymbol{\mu}_{Bream}=\boldsymbol{\mu}_{Roach}=\boldsymbol{\mu}_{Whitefish}=\boldsymbol{\mu}_{Parkki}=\boldsymbol{\mu}_{Perch}=\boldsymbol{\mu}_{Pike}=\boldsymbol{\mu}_{Smelt} \]

La hipótesis alternativa plantea que al menos una especie presenta un vector promedio diferente:

\[ H_1: \exists\ i,j \quad \boldsymbol{\mu}_i \neq \boldsymbol{\mu}_j \]

La decisión estadística se toma con base en pruebas multivariadas como Wilks, Pillai, Hotelling-Lawley y Roy.

Matriz de variabilidad dentro de grupos

La matriz de error, también llamada matriz dentro de grupos, se define como:

\[ \mathbf{E}=\sum_{i=1}^{g}\sum_{j=1}^{n_i} (\mathbf{Y}_{ij}-\bar{\mathbf{Y}}_i) (\mathbf{Y}_{ij}-\bar{\mathbf{Y}}_i)' \]

Esta matriz mide la variabilidad de los peces alrededor del centroide de su propia especie.

Si esta variabilidad es muy alta, será más difícil detectar diferencias entre especies.

Matriz de variabilidad entre grupos

La matriz asociada al efecto del tratamiento se define como:

\[ \mathbf{H}=\sum_{i=1}^{g} n_i (\bar{\mathbf{Y}}_i-\bar{\mathbf{Y}}) (\bar{\mathbf{Y}}_i-\bar{\mathbf{Y}})' \]

Esta matriz mide cuánto se alejan los centroides de cada especie del centroide general.

Si esta variabilidad es alta en comparación con la variabilidad interna, se espera que el MANOVA sea estadísticamente significativo.

Descomposición multivariada de la variabilidad

En MANOVA, la variabilidad total se descompone como:

\[ \mathbf{T}=\mathbf{H}+\mathbf{E} \]

Donde:

  • \(\mathbf{T}\) representa la variabilidad total.
  • \(\mathbf{H}\) representa la variabilidad explicada por el factor Species.
  • \(\mathbf{E}\) representa la variabilidad no explicada o residual.

Esta descomposición es la extensión matricial de la descomposición de suma de cuadrados usada en ANOVA.

Lambda de Wilks

La prueba Lambda de Wilks se calcula mediante:

\[ \Lambda = \frac{|\mathbf{E}|}{|\mathbf{E}+\mathbf{H}|} \]

Interpretación:

  • Si \(\Lambda\) está cerca de 1, la variabilidad entre especies es pequeña frente a la variabilidad residual.
  • Si \(\Lambda\) está cerca de 0, la variabilidad entre especies es grande frente a la variabilidad residual.

Por tanto, valores pequeños de \(\Lambda\) proporcionan evidencia contra \(H_0\).

Otros estadísticos multivariados

Además de Wilks, RStudio reporta otros criterios de prueba:

\[ V = tr \left[ \mathbf{H}(\mathbf{H}+\mathbf{E})^{-1} \right] \]

Este corresponde a la traza de Pillai.

\[ T = tr(\mathbf{E}^{-1}\mathbf{H}) \]

Este corresponde al criterio de Hotelling-Lawley.

\[ \theta = \lambda_{max}(\mathbf{E}^{-1}\mathbf{H}) \]

Este corresponde a la raíz máxima de Roy.

Supuestos del MANOVA

Para aplicar MANOVA de forma adecuada, se deben revisar los siguientes supuestos:

  1. Las observaciones deben ser independientes.
  2. Las variables respuesta deben ser continuas.
  3. Debe existir normalidad multivariada dentro de cada grupo.
  4. Las matrices de covarianzas deben ser homogéneas entre especies.
  5. No deben existir valores atípicos multivariados extremos.
  6. Las variables respuesta deben estar correlacionadas, pero no perfectamente correlacionadas.

Preparación en RStudio

# Paquetes base usados en el análisis
# Si algún paquete no está instalado, se debe instalar previamente con install.packages()

library(stats)
library(graphics)
library(knitr)

Carga de la base de datos

# Cargar la base Fish.csv
# El archivo debe estar en la misma carpeta del RMarkdown.

if (file.exists("Fish.csv")) {
  Fish <- read.csv("Fish.csv")
} else {
  Fish <- read.csv(file.choose())
}

# Convertir Species en factor
Fish$Species <- as.factor(Fish$Species)

# Estructura de la base
str(Fish)
## 'data.frame':    159 obs. of  7 variables:
##  $ Species: Factor w/ 7 levels "Bream","Parkki",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Weight : num  242 290 340 363 430 450 500 390 450 500 ...
##  $ Length1: num  23.2 24 23.9 26.3 26.5 26.8 26.8 27.6 27.6 28.5 ...
##  $ Length2: num  25.4 26.3 26.5 29 29 29.7 29.7 30 30 30.7 ...
##  $ Length3: num  30 31.2 31.1 33.5 34 34.7 34.5 35 35.1 36.2 ...
##  $ Height : num  11.5 12.5 12.4 12.7 12.4 ...
##  $ Width  : num  4.02 4.31 4.7 4.46 5.13 ...

Revisión inicial de la base

# Primeras observaciones
head(Fish)
##   Species Weight Length1 Length2 Length3  Height  Width
## 1   Bream    242    23.2    25.4    30.0 11.5200 4.0200
## 2   Bream    290    24.0    26.3    31.2 12.4800 4.3056
## 3   Bream    340    23.9    26.5    31.1 12.3778 4.6961
## 4   Bream    363    26.3    29.0    33.5 12.7300 4.4555
## 5   Bream    430    26.5    29.0    34.0 12.4440 5.1340
## 6   Bream    450    26.8    29.7    34.7 13.6024 4.9274
# Dimensión de la base
 dim(Fish)
## [1] 159   7
# Conteo por especie
 table(Fish$Species)
## 
##     Bream    Parkki     Perch      Pike     Roach     Smelt Whitefish 
##        35        11        56        17        20        14         6

La base contiene 159 observaciones y 7 variables. Para el MANOVA se utilizarán las variables Weight, Height y Width como respuestas, mientras que Species se utilizará como factor de clasificación.

Selección de variables para MANOVA

Y <- Fish[, c("Weight", "Height", "Width")]
Grupo <- Fish$Species

# Verificar valores faltantes
colSums(is.na(Y))
## Weight Height  Width 
##      0      0      0

Si no existen valores faltantes en las variables seleccionadas, se puede continuar con el análisis MANOVA sin imputación previa.

Estadísticas descriptivas por especie

medias_especie <- aggregate(
  cbind(Weight, Height, Width) ~ Species,
  data = Fish,
  FUN = mean
)

kable(medias_especie, digits = 4)
Species Weight Height Width
Bream 617.8286 15.1832 5.4276
Parkki 154.8182 8.9624 3.2207
Perch 382.2393 7.8619 4.7457
Pike 718.7059 7.7138 5.0864
Roach 152.0500 6.6948 3.6578
Smelt 11.1786 2.2094 1.3401
Whitefish 531.0000 10.0272 5.4731

Estas medias representan los centroides multivariados de cada especie. En MANOVA no se compara una sola media, sino el vector completo de medias de cada especie.

Tamaños muestrales por especie

tamanos <- as.data.frame(table(Fish$Species))
colnames(tamanos) <- c("Species", "n")

kable(tamanos)
Species n
Bream 35
Parkki 11
Perch 56
Pike 17
Roach 20
Smelt 14
Whitefish 6

Los tamaños muestrales no son iguales entre especies, por lo cual resulta importante revisar los supuestos de homogeneidad de covarianzas y la estabilidad de los resultados multivariados.

Media general multivariada

media_general <- colMeans(Y)
media_general
##     Weight     Height      Width 
## 398.326415   8.970994   4.417486

La media general representa el centroide global de la nube de puntos multivariada.

Matemáticamente:

\[ \bar{\mathbf{Y}}=\frac{1}{n}\sum_{i=1}^{g}\sum_{j=1}^{n_i}\mathbf{Y}_{ij} \]

Cálculo manual de la matriz E

# Matriz de error dentro de grupos
E <- matrix(0, nrow = 3, ncol = 3)
colnames(E) <- rownames(E) <- c("Weight", "Height", "Width")

for (sp in levels(Grupo)) {
  Yi <- as.matrix(Y[Grupo == sp, ])
  mi <- colMeans(Yi)
  D <- sweep(Yi, 2, mi, FUN = "-")
  E <- E + t(D) %*% D
}

E
##             Weight     Height      Width
## Weight 12732411.24 85002.0376 48953.4702
## Height    85002.04   705.8532   387.5573
## Width     48953.47   387.5573   233.1081

La matriz \(\mathbf{E}\) resume la variabilidad interna de las especies.

Valor esperado de la matriz E

Con esta base de datos y las variables seleccionadas, se obtiene aproximadamente:

\[ \mathbf{E}= \begin{pmatrix} 12732411.20 & 85002.04 & 48953.47 \\ 85002.04 & 705.85 & 387.56 \\ 48953.47 & 387.56 & 233.11 \end{pmatrix} \]

Esta matriz muestra que existe alta variabilidad interna en el peso, lo cual es esperado porque las especies presentan pesos muy diferentes y también variación dentro de cada especie.

Cálculo manual de la matriz H

# Matriz de hipótesis entre grupos
H <- matrix(0, nrow = 3, ncol = 3)
colnames(H) <- rownames(H) <- c("Weight", "Height", "Width")

grand_mean <- colMeans(Y)

for (sp in levels(Grupo)) {
  Yi <- as.matrix(Y[Grupo == sp, ])
  ni <- nrow(Yi)
  mi <- colMeans(Yi)
  d <- matrix(mi - grand_mean, ncol = 1)
  H <- H + ni * (d %*% t(d))
}

H
##            Weight     Height      Width
## Weight 7515047.82 90601.2637 35574.9652
## Height   90601.26  2196.8558   517.6444
## Width    35574.97   517.6444   215.9176

La matriz \(\mathbf{H}\) resume la variabilidad explicada por las diferencias entre especies.

Valor esperado de la matriz H

Con esta base de datos y las variables seleccionadas, se obtiene aproximadamente:

\[ \mathbf{H}= \begin{pmatrix} 7515047.82 & 90601.26 & 35574.97 \\ 90601.26 & 2196.86 & 517.64 \\ 35574.97 & 517.64 & 215.92 \end{pmatrix} \]

Esta matriz indica que la especie explica una parte considerable de la variabilidad multivariada de las características morfológicas.

Cálculo manual de Lambda de Wilks

det_E <- det(E)
det_EH <- det(E + H)
Wilks_manual <- det_E / det_EH

det_E
## [1] 32116492648
det_EH
## [1] 2.08605e+12
Wilks_manual
## [1] 0.01539584

Matemáticamente:

\[ \Lambda = \frac{|\mathbf{E}|}{|\mathbf{E}+\mathbf{H}|} \]

Con la base analizada:

\[ |\mathbf{E}| \approx 32116492647.62 \]

\[ |\mathbf{E}+\mathbf{H}| \approx 2086049815307.54 \]

\[ \Lambda \approx 0.0154 \]

Interpretación de Lambda de Wilks

El valor obtenido es:

\[ \Lambda \approx 0.0154 \]

Este valor es muy cercano a cero. Por tanto, la variabilidad entre especies es grande en comparación con la variabilidad residual dentro de especies.

Desde el punto de vista estadístico, este resultado proporciona evidencia fuerte contra la hipótesis nula de igualdad de vectores medios.

Ajuste formal del MANOVA en RStudio

modelo_manova <- manova(
  cbind(Weight, Height, Width) ~ Species,
  data = Fish
)

summary(modelo_manova, test = "Wilks")
##            Df    Wilks approx F num Df den Df    Pr(>F)    
## Species     6 0.015396    79.61     18 424.75 < 2.2e-16 ***
## Residuals 152                                              
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

La salida de Wilks permite evaluar formalmente si la variable Species tiene un efecto estadísticamente significativo sobre el conjunto de respuestas.

Resultado esperado con Wilks

Para el efecto de Species, el resultado esperado es aproximadamente:

\[ \Lambda = 0.0154 \]

con valor p menor que 0.05.

Por tanto, se rechaza la hipótesis nula:

\[ H_0: \boldsymbol{\mu}_1=\boldsymbol{\mu}_2=\cdots=\boldsymbol{\mu}_7 \]

La conclusión es que existen diferencias multivariadas significativas entre especies de peces en peso, altura y ancho.

Prueba con Pillai

summary(modelo_manova, test = "Pillai")
##            Df Pillai approx F num Df den Df    Pr(>F)    
## Species     6 1.8059   38.311     18    456 < 2.2e-16 ***
## Residuals 152                                            
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

La traza de Pillai es considerada una de las pruebas más robustas cuando existen posibles desviaciones de algunos supuestos.

Si el valor p es menor que 0.05, se confirma que el factor Species tiene un efecto multivariado significativo.

Prueba con Hotelling-Lawley

summary(modelo_manova, test = "Hotelling-Lawley")
##            Df Hotelling-Lawley approx F num Df den Df    Pr(>F)    
## Species     6           21.046   173.83     18    446 < 2.2e-16 ***
## Residuals 152                                                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El criterio de Hotelling-Lawley evalúa la magnitud acumulada de las raíces características asociadas a \(\mathbf{E}^{-1}\mathbf{H}\).

Un valor p menor que 0.05 indica diferencias multivariadas significativas entre especies.

Prueba con Roy

summary(modelo_manova, test = "Roy")
##            Df  Roy approx F num Df den Df    Pr(>F)    
## Species     6 19.4   491.48      6    152 < 2.2e-16 ***
## Residuals 152                                          
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

La raíz máxima de Roy se concentra en la dimensión discriminante más fuerte. Es útil cuando la separación entre grupos ocurre principalmente en una sola combinación lineal de las variables respuesta.

ANOVA posteriores por variable

Después de obtener un MANOVA significativo, se pueden revisar los ANOVA individuales:

summary.aov(modelo_manova)
##  Response Weight :
##              Df   Sum Sq Mean Sq F value    Pr(>F)    
## Species       6  7515048 1252508  14.953 2.113e-13 ***
## Residuals   152 12732411   83766                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Height :
##              Df  Sum Sq Mean Sq F value    Pr(>F)    
## Species       6 2196.86  366.14  78.846 < 2.2e-16 ***
## Residuals   152  705.85    4.64                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Width :
##              Df Sum Sq Mean Sq F value    Pr(>F)    
## Species       6 215.92  35.986  23.465 < 2.2e-16 ***
## Residuals   152 233.11   1.534                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Estos ANOVA permiten identificar en cuáles variables específicas se presentan diferencias entre especies.

Sin embargo, se deben interpretar como análisis posteriores, porque la conclusión principal proviene primero del resultado multivariado.

Gráficos exploratorios por especie

par(mfrow = c(1, 3))

boxplot(Weight ~ Species, data = Fish,
        main = "Peso por especie",
        xlab = "Especie", ylab = "Weight",
        las = 2)

boxplot(Height ~ Species, data = Fish,
        main = "Altura por especie",
        xlab = "Especie", ylab = "Height",
        las = 2)

boxplot(Width ~ Species, data = Fish,
        main = "Ancho por especie",
        xlab = "Especie", ylab = "Width",
        las = 2)

par(mfrow = c(1, 1))

Los diagramas de caja permiten observar diferencias visuales entre especies para cada variable morfológica.

Correlación entre variables respuesta

cor(Y)
##           Weight    Height     Width
## Weight 1.0000000 0.7243453 0.8865066
## Height 0.7243453 1.0000000 0.7928810
## Width  0.8865066 0.7928810 1.0000000

En MANOVA es importante que las variables respuesta tengan relación estadística, pero no una correlación perfecta.

Si las variables no tienen relación alguna, el beneficio del MANOVA disminuye. Si están perfectamente correlacionadas, existe redundancia excesiva.

Gráfico de relaciones bivariadas

pairs(
  Y,
  col = as.numeric(Fish$Species),
  pch = 19,
  main = "Relaciones bivariadas entre variables morfológicas"
)
legend(
  "topleft",
  legend = levels(Fish$Species),
  col = 1:length(levels(Fish$Species)),
  pch = 19,
  cex = 0.7
)

Este gráfico permite observar si las especies se separan visualmente en el espacio formado por peso, altura y ancho.

Homogeneidad de matrices de covarianzas

La homogeneidad de matrices de covarianzas puede evaluarse con la prueba Box-M.

# Instalar solo si es necesario
# install.packages("heplots")

library(heplots)

boxM(
  Fish[, c("Weight", "Height", "Width")],
  Fish$Species
)

La hipótesis nula de Box-M es:

\[ H_0: \boldsymbol{\Sigma}_1=\boldsymbol{\Sigma}_2=\cdots=\boldsymbol{\Sigma}_7 \]

Si el valor p es menor que 0.05, se evidencia que las matrices de covarianzas no son iguales entre especies.

Normalidad multivariada mediante Mahalanobis

Una forma exploratoria de evaluar normalidad multivariada consiste en calcular distancias de Mahalanobis y compararlas con cuantiles de una distribución chi-cuadrado.

centro <- colMeans(Y)
S <- cov(Y)
D2 <- mahalanobis(Y, center = centro, cov = S)

q_teorico <- qchisq(ppoints(length(D2)), df = ncol(Y))
D2_ordenado <- sort(D2)

plot(q_teorico, D2_ordenado,
     main = "QQ Plot multivariado con distancia de Mahalanobis",
     xlab = "Cuantiles teóricos Chi-cuadrado",
     ylab = "Distancias de Mahalanobis ordenadas",
     pch = 19)

abline(0, 1, lwd = 2)

Si los puntos siguen aproximadamente la línea recta, existe evidencia gráfica razonable de normalidad multivariada.

Identificación de valores atípicos multivariados

limite <- qchisq(0.975, df = ncol(Y))
Fish$D2_Mahalanobis <- D2
Fish$Outlier_Multivariado <- ifelse(D2 > limite, "Posible atípico", "No atípico")

table(Fish$Outlier_Multivariado)
## 
##      No atípico Posible atípico 
##             155               4
Fish[Fish$Outlier_Multivariado == "Posible atípico", ]
##     Species Weight Length1 Length2 Length3  Height  Width D2_Mahalanobis
## 142    Pike   1250      52    56.0    59.7 10.6863 6.9849       9.510002
## 143    Pike   1600      56    60.0    64.0  9.6000 6.1440      31.305441
## 144    Pike   1550      56    60.0    64.0  9.6000 6.1440      28.132924
## 145    Pike   1650      59    63.4    68.0 10.8120 7.4800      23.813385
##     Outlier_Multivariado
## 142      Posible atípico
## 143      Posible atípico
## 144      Posible atípico
## 145      Posible atípico

Un valor atípico multivariado no necesariamente es un error. En este contexto, puede representar un pez morfológicamente extremo frente al patrón general de la base.

Interpretación estadística general

El resultado del MANOVA indica que la especie tiene un efecto estadísticamente significativo sobre el vector formado por peso, altura y ancho.

Esto significa que las especies no solo difieren en una característica aislada, sino en su perfil morfológico conjunto.

La evidencia principal se resume en un valor de Lambda de Wilks cercano a cero y un valor p menor que el nivel de significancia usual de 0.05.

Interpretación desde diseño de experimentos

Desde el diseño experimental, Species actúa como un factor con siete niveles. Cada nivel representa un grupo de comparación.

La prueba MANOVA permite concluir que el factor tiene un efecto global sobre las respuestas morfológicas. Por tanto, el diseño evidencia diferencias entre tratamientos cuando las respuestas se analizan simultáneamente.

Este enfoque es más completo que realizar únicamente ANOVA separados, porque considera la estructura conjunta de las variables y su matriz de covarianzas.

Conclusión

El análisis MANOVA aplicado a la base Fish.csv permite concluir que existen diferencias multivariadas significativas entre especies de peces en términos de peso, altura y ancho.

Matemáticamente, esta conclusión se sustenta en la comparación entre la matriz de variabilidad entre especies \(\mathbf{H}\) y la matriz de variabilidad dentro de especies \(\mathbf{E}\).

Estadísticamente, el valor de Lambda de Wilks cercano a cero indica que la variabilidad explicada por la especie es considerable frente a la variabilidad residual.

Finalmente, desde RStudio, el procedimiento se implementa con la función manova(), y se complementa con pruebas posteriores, gráficos exploratorios y revisión de supuestos.

Código final resumido en RStudio

Fish <- read.csv("Fish.csv")
Fish$Species <- as.factor(Fish$Species)

modelo_manova <- manova(
  cbind(Weight, Height, Width) ~ Species,
  data = Fish
)

summary(modelo_manova, test = "Wilks")
summary(modelo_manova, test = "Pillai")
summary(modelo_manova, test = "Hotelling-Lawley")
summary(modelo_manova, test = "Roy")
summary.aov(modelo_manova)

Recomendaciones para ampliar el análisis

Después del MANOVA, se recomienda continuar con:

  1. Comparaciones posteriores por variable.
  2. Análisis discriminante lineal.
  3. Análisis de componentes principales.
  4. Visualización de centroides multivariados.
  5. Revisión detallada de valores atípicos multivariados.
  6. Evaluación de clasificación de especies a partir de variables morfológicas.

Estas extensiones permiten comprender no solo si existen diferencias, sino también qué variables explican mejor la separación entre especies.