Introducción al Análisis de Correlación Canónica

El Análisis de Correlación Canónica (ACC) busca cuantificar y explicar la relación entre dos conjuntos de variables (denominados \(X\) e \(Y\)).

Preparación de los Datos

En este ejemplo estructuramos dos matrices. El conjunto \(Y\) tiene 4 variables y el conjunto \(X\) usará 5 variables. Como el número máximo de funciones canónicas posibles es \(r = \min(p, q)\), en este caso podremos extraer un máximo de \(\min(5, 4) = 4\) pares canónicos.

# Lectura de datos del conjunto Y (q = 4 variables)
datosY <- c(500, 43, 98, 17, 800, 20, 92, 32, 570, 28, 98, 26,
            550, 28, 98, 26, 550, 28, 98, 26, 380, 15, 99, 28,
            930, 21, 99, 28, 650, 10, 101, 27, 600, 10, 101, 27,
            1500, 19, 99, 23, 1750, 22, 101, 27, 2000, 58, 100, 18,
            2500, 34, 102, 16, 2000, 21, 105, 20, 7850, 42, 84, 5,
            10500, 50, 81, -12)
datosY <- matrix(datosY, ncol = 4, byrow = TRUE)
colnames(datosY) <- paste("Y", 1:4, sep = "")

# Lectura de datos del conjunto X (originalmente 6, se usarán p = 5 variables)
datosX <- c(0, 3, 22, 57, 17, 1, 0, 16, 20, 38, 13, 13, 0, 6, 28, 46, 17, 3,
            0, 4, 19, 47, 27, 3, 0, 1, 8, 50, 35, 6, 0, 2, 19, 44, 32, 3, 0,
            0, 15, 50, 27, 8, 10, 21, 40, 25, 4, 0, 14, 26, 32, 28, 0, 0, 0,
            1, 6, 80, 12, 1, 1, 4, 34, 33, 22, 6, 0, 7, 14, 66, 13, 0, 0, 9,
            15, 47, 21, 8, 3, 7, 17, 32, 27, 14, 0, 5, 7, 84, 4, 0, 0, 3, 1,
            94, 4, 0)
datosX <- matrix(datosX, ncol = 6, byrow = TRUE)
colnames(datosX) <- paste("X", 1:6, sep = "")

# Se omite la sexta variable según la especificación
datosX <- datosX[, -6]




# Consolidación en un único data.frame (equivalente a Tabla 10.3 del texto)
ejemp9_2 <- data.frame(cbind(datosX, datosY))

Variable X6

La razón por la que la variable X6​ no aparece se debe a que las variables X1​ a X6​ representan los porcentajes de seis frecuencias genéticas distintas medidas en cada colonia de mariposas.

Como se trata de porcentajes de un total, la suma de estas seis variables para cualquier colonia siempre será exactamente el 100% (X1​+X2​+X3​+X4​+X5​+X6​=100%).

Esta condición genera dependencia lineal o multicolinealidad. si se hubiera incluido habría resultado ser “singular” (su determinante sería cero), lo que haría matemáticamente imposible invertirla para continuar con los cálculos del Análisis de Correlación Canónica.

Análisis Exploratorio: Matriz de Correlaciones

Antes de extraer las variables canónicas, es fundamental observar la matriz de correlación particionada \(R\). Esta nos muestra la multicolinealidad intra-conjuntos (\(R_{XX}\) y \(R_{YY}\)) y las correlaciones bivariadas inter-conjuntos (\(R_{XY}\)).

# Matriz de correlaciones particionada (Tabla 10.4)
round(cor(ejemp9_2), 3)
##        X1     X2     X3     X4     X5     Y1     Y2     Y3     Y4
## X1  1.000  0.855  0.618 -0.527 -0.505 -0.203 -0.530  0.295  0.221
## X2  0.855  1.000  0.615 -0.544 -0.597 -0.190 -0.410  0.173  0.246
## X3  0.618  0.615  1.000 -0.823 -0.127 -0.573 -0.550  0.536  0.593
## X4 -0.527 -0.544 -0.823  1.000 -0.268  0.736  0.700 -0.724 -0.768
## X5 -0.505 -0.597 -0.127 -0.268  1.000 -0.458 -0.138  0.438  0.412
## Y1 -0.203 -0.190 -0.573  0.736 -0.458  1.000  0.567 -0.828 -0.936
## Y2 -0.530 -0.410 -0.550  0.700 -0.138  0.567  1.000 -0.479 -0.705
## Y3  0.295  0.173  0.536 -0.724  0.438 -0.828 -0.479  1.000  0.719
## Y4  0.221  0.246  0.593 -0.768  0.412 -0.936 -0.705  0.719  1.000

Análisis: Si observamos correlaciones altas en el bloque inter-conjuntos (entre las \(X\) y las \(Y\)), hay evidencia empírica fuerte de que el ACC encontrará funciones canónicas significativas.

Existe una fuerte multicolinealidad dentro del conjunto X. Destacan correlaciones muy altas, particularmente la relación positiva entre X1 y X2 (0.855), y una fuerte relación inversa entre X3 y X4 (-0.823). Por lo que se puede decir que las variables comparten mucha información

La interdependencia en el conjunto Y es aún más extrema. Observamos una correlación inversa casi perfecta entre Y1 y Y4 (-0.936), así como fuertes relaciones inversas de Y1 con Y3 (-0.828) y de Y2 con Y4 (-0.705).

Existen correlaciones bivariadas considerables que justifican con creces el ACC. La variable X4, muestra fuertes asociaciones con todo el bloque Y: correlaciona positivamente con Y1 (0.736) y Y2 (0.700), y negativamente con Y3 (-0.724) y Y4 (-0.768).

La variable X3 también muestra un nivel de asociación inter-conjunto importante (ej. -0.573 con Y1 y 0.593 con Y4).

Por lo que Hay evidencia empírica contundente de que las combinaciones lineales de X podrán explicar una porción significativa de la varianza en Y.


Ajuste del Modelo Canónico con yacca

Procedemos a extraer las funciones canónicas. Usamos el argumento standardize.scores = TRUE para que las variadas canónicas tengan media 0 y varianza 1, facilitando su interpretación geométrica.

library(yacca)

# Ajuste del modelo
acc <- cca(datosX, datosY, standardize.scores = TRUE)

Significación y Correlaciones Canónicas

El resumen del modelo nos mostrará las correlaciones canónicas (\(\rho_i\)) para cada uno de los 4 pares extraídos y la prueba de Bartlett para evaluar cuántos de estos pares son estadísticamente significativos.

summary(acc)
## 
## Canonical Correlation Analysis - Summary
## 
## 
## Canonical Correlations:
## 
##      CV 1      CV 2      CV 3      CV 4 
## 0.8863485 0.7225523 0.4307995 0.2208578 
## 
## Shared Variance on Each Canonical Variate:
## 
##       CV 1       CV 2       CV 3       CV 4 
## 0.78561366 0.52208186 0.18558822 0.04877817 
## 
## Bartlett's Chi-Squared Test:
## 
##          rho^2     Chisq df Pr(>X)
## CV 1  0.785614 25.335885 20 0.1889
## CV 2  0.522082  9.936130 12 0.6216
## CV 3  0.185588  2.552972  6 0.8625
## CV 4  0.048778  0.500080  2 0.7788
## 
## 
## Canonical Variate Coefficients:
## 
##  X Vars:
##           CV 1       CV 2       CV 3        CV 4
## X1  0.15736654 -0.2835805 -0.3504232 -0.08786686
## X2 -0.14579309  0.3840902 -0.3127124  0.30815674
## X3 -0.04909450  0.1943130 -0.2256875  0.07657788
## X4 -0.08557624  0.1539019 -0.2564061  0.08748098
## X5 -0.04634901  0.2527565 -0.3608758  0.09842763
## 
##  Y Vars:
##             CV 1          CV 2        CV 3          CV 4
## Y1  7.509393e-05 -0.0002493777 0.001295209 -0.0004960605
## Y2 -4.298463e-02  0.0705108774 0.045481181 -0.0600072994
## Y3  1.126623e-01 -0.0869681150 0.098214439 -0.2453796195
## Y4  3.925047e-03  0.0901956394 0.331690080 -0.0534301125
## 
## 
## Structural Correlations (Loadings):
## 
##  X Vars:
##          CV 1       CV 2        CV 3       CV 4
## X1  0.5607408 -0.4471598 -0.24057362  0.6458469
## X2  0.3840156 -0.1665984  0.08041942  0.9046042
## X3  0.6967909  0.2186820  0.01492888  0.4226988
## X4 -0.9201460 -0.2709076 -0.13073079 -0.2490555
## X5  0.3575744  0.4936412 -0.04988847 -0.7162716
## 
##  Y Vars:
##          CV 1       CV 2       CV 3        CV 4
## Y1 -0.7605334 -0.6240149  0.1689577 -0.06039594
## Y2 -0.8532852  0.1483386 -0.1088345 -0.48790889
## Y3  0.8589215  0.2778519 -0.1506275 -0.40294360
## Y4  0.7815003  0.5662925  0.1467781  0.21685557
## 
## 
## Fractional Variance Deposition on Canonical Variates:
## 
##  X Vars:
##         CV 1       CV 2         CV 3       CV 4
## X1 0.3144302 0.19995191 0.0578756657 0.41711827
## X2 0.1474679 0.02775502 0.0064672824 0.81830877
## X3 0.4855176 0.04782184 0.0002228715 0.17867431
## X4 0.8466687 0.07339094 0.0170905384 0.06202864
## X5 0.1278594 0.24368158 0.0024888591 0.51304499
## 
##  Y Vars:
##         CV 1       CV 2       CV 3       CV 4
## Y1 0.5784110 0.38939460 0.02854670 0.00364767
## Y2 0.7280956 0.02200433 0.01184496 0.23805508
## Y3 0.7377461 0.07720169 0.02268866 0.16236355
## Y4 0.6107427 0.32068714 0.02154380 0.04702634
## 
## 
## Canonical Communalities (Fraction of Total Variance
## Explained for Each Variable, Within Sets):
## 
##  X Vars:
##        X1        X2        X3        X4        X5 
## 0.9893760 0.9999990 0.7122366 0.9991788 0.8870749 
## 
##  Y Vars:
## Y1 Y2 Y3 Y4 
##  1  1  1  1 
## 
## 
## Canonical Variate Adequacies (Fraction of Total Variance
## Explained by Each CV, Within Sets):
## 
## 
##  X Vars:
##       CV 1       CV 2       CV 3       CV 4 
## 0.38438877 0.11852026 0.01682904 0.39783500 
## 
##  Y Vars:
##       CV 1       CV 2       CV 3       CV 4 
## 0.66374887 0.20232194 0.02115603 0.11277316 
## 
## 
## Redundancy Coefficients (Fraction of Total Variance
## Explained by Each CV, Across Sets):
## 
## 
##  X | Y:
##        CV 1        CV 2        CV 3        CV 4 
## 0.301981066 0.061877277 0.003123272 0.019405664 
## 
##  Y | X:
##        CV 1        CV 2        CV 3        CV 4 
## 0.521450181 0.105628615 0.003926310 0.005500868 
## 
## 
## Aggregate Redundancy Coefficients (Total Variance
## Explained by All CVs, Across Sets):
## 
##  X | Y: 0.3863873 
##  Y | X: 0.636506
# Extracción de las Correlaciones canónicas individuales
acc["corr"]
## $corr
##      CV 1      CV 2      CV 3      CV 4 
## 0.8863485 0.7225523 0.4307995 0.2208578

Análisis:* . Fuerza de la Asociación

Primer Par Canónico (CV1​): Presenta una correlación canónica muy alta de ρ1​=0.886. Esto indica que la primera combinación lineal de variables independientes (U1​) y la primera combinación de variables dependientes (V1​) comparten un 78.56% de su varianza (0.8862 al cuadrado = 0.785). Es una asociación robusta.

Segundo Par Canónico (CV2​): También muestra una asociación considerable con ρ2​=0.722, compartiendo un 52.2% de varianza. Los dos últimos pares caen significativamente en fuerza (0.430 y 0.220).

Prueba de Bartlett

Chi-cuadrado de Bartlett evalúa si estas correlaciones observadas en la muestra son generalizables a la población (Hipótesis Nula: Los conjuntos X e Y son independientes).

Observando los valores p (Pr(>X)), vemos que para la primera función canónica el valor es p=0.1889.

Dado que 0.1889 es mayor que el nivel de significancia convencional (α=0.05), fracasamos en rechazar la hipótesis nula.

Conclusión Inferencial: Ninguna de las dimensiones canónicas extraídas es estadísticamente significativa, esto puede deberse a una muestra muy pequeña de la poblacion ya que eran 16 colonias y 5 variables X y 4 variables Y.


Interpretación de los Coeficientes (Pesos)

Los coeficientes canónicos planos son los ponderadores (\(a\) y \(b\)) matemáticos usados para calcular las puntuaciones canónicas: \(U = a_1X_1 + a_2X_2...\) y \(V = b_1Y_1 + b_2Y_2...\).

# Coeficientes canónicos para X (Vector a)
acc["xcoef"]
## $xcoef
##           CV 1       CV 2       CV 3        CV 4
## X1  0.15736654 -0.2835805 -0.3504232 -0.08786686
## X2 -0.14579309  0.3840902 -0.3127124  0.30815674
## X3 -0.04909450  0.1943130 -0.2256875  0.07657788
## X4 -0.08557624  0.1539019 -0.2564061  0.08748098
## X5 -0.04634901  0.2527565 -0.3608758  0.09842763
# Coeficientes canónicos para Y (Vector b)
acc["ycoef"]
## $ycoef
##             CV 1          CV 2        CV 3          CV 4
## Y1  7.509393e-05 -0.0002493777 0.001295209 -0.0004960605
## Y2 -4.298463e-02  0.0705108774 0.045481181 -0.0600072994
## Y3  1.126623e-01 -0.0869681150 0.098214439 -0.2453796195
## Y4  3.925047e-03  0.0901956394 0.331690080 -0.0534301125

U1​=0.157X1​−0.146X2​−0.049X3​−0.085X4​−0.046X5​

V1​=0.000075Y1​−0.043Y2​+0.113Y3​+0.004Y4​.

Como podran ver hay inconsistencias como el valor de X1 y X2 que es contrario esto es por que es el coeficiente canonico plano y no debe usarse para interpretar ya que pueden haber diferencias en variables que comparten mucha informacion

Recordar que: los coeficientes planos buscan optimizar la correlación matemática estricta a nivel del álgebra de matrices, no la interpretación teórica


Correlaciones Estructurales (Cargas Canónicas)

Para interpretar qué “significa” cada variable canónica (por ejemplo, ¿qué concepto abstracto representa \(U_1\)?), se recomiendan observar las cargas canónicas. Estas son las correlaciones de Pearson entre las variables originales y su propia variable canónica.

# Cargas: Correlación de las variables X con su variada canónica U
acc["xstructcorr"]
## $xstructcorr
##          CV 1       CV 2        CV 3       CV 4
## X1  0.5607408 -0.4471598 -0.24057362  0.6458469
## X2  0.3840156 -0.1665984  0.08041942  0.9046042
## X3  0.6967909  0.2186820  0.01492888  0.4226988
## X4 -0.9201460 -0.2709076 -0.13073079 -0.2490555
## X5  0.3575744  0.4936412 -0.04988847 -0.7162716
# Cargas: Correlación de las variables Y con su variada canónica V
acc["ystructcorr"]
## $ystructcorr
##          CV 1       CV 2       CV 3        CV 4
## Y1 -0.7605334 -0.6240149  0.1689577 -0.06039594
## Y2 -0.8532852  0.1483386 -0.1088345 -0.48790889
## Y3  0.8589215  0.2778519 -0.1506275 -0.40294360
## Y4  0.7815003  0.5662925  0.1467781  0.21685557

Análisis:

(X→U1​)

Observamos la columna CV 1 en $xstructcorr.

La variable dominante: X4​ es la que define casi por completo esta dimensión, con una carga excepcionalmente fuerte y negativa de −0.920.

Las variables secundarias: Le siguen X3​ (0.697) y X1​ (0.561), ambas con cargas positivas fuertes.

Interpretación la variable canónica (U1​) es una dimensión bipolar que contrasta fuertemente a la variable X4​ frente a las variables X3​ y X1​. Un valor alto en la puntuación de U1​ para un individuo significa que ese individuo tiene valores altos en X3​ y X1​, pero un valor extremadamente bajo en X4​.

(Y→V1​)

Observamos la columna CV 1 en $ystructcorr. Todas las variables superan holgadamente el umbral de importancia de 0.5 , revelando que el bloque Y responde como un sistema interconectado.

Cargas Positivas: Y3​ (0.859) y Y4​ (0.782).

Cargas Negativas: Y2​ (−0.853) y Y1​ (−0.761).

Interpretación Teórica (V1​): Al igual que U1​, la variada V1​ separa a los individuos en dos perfiles opuestos: aquellos con altos niveles de Y3​/Y4​ (y simultáneamente bajos niveles de Y1​/Y2​) frente a aquellos con la combinación inversa.

Coeficientes estandarizados

# 1. Estandarizar las matrices de datos originales
datosX_std <- scale(datosX)
datosY_std <- scale(datosY)

# 2. Ejecutar el ACC con los datos estandarizados (usando yacca)
library(yacca)
acc_estandarizado <- cca(datosX_std, datosY_std)

# 3. Extraer los coeficientes canónicos
coef_std_X <- acc_estandarizado$xcoef
coef_std_Y <- acc_estandarizado$ycoef

# Mostrar los resultados para X
print("Coeficientes Estandarizados para X:")
## [1] "Coeficientes Estandarizados para X:"
print(coef_std_X)
##          CV 1      CV 2      CV 3       CV 4
## X1  0.6513784 -1.173809 -1.450487 -0.3637023
## X2 -1.0925974  2.878435 -2.343518  2.3093773
## X3 -0.5290582  2.093980 -2.432082  0.8252281
## X4 -1.7405791  3.130290 -5.215175  1.7793206
## X5 -0.4995437  2.724177 -3.889473  1.0608403
print(coef_std_Y)
##           CV 1       CV 2      CV 3       CV 4
## Y1  0.21622240 -0.7180480 3.7293715 -1.4283363
## Y2 -0.60147130  0.9866380 0.6364048 -0.8396645
## Y3  0.71904070 -0.5550537 0.6268308 -1.5660783
## Y4  0.04301763  0.9885239 3.6352486 -0.5855820

Analisis

Primera dimensión canónica: U1​=0.651X1​−1.093X2​−0.529X3​−1.741X4​−0.500X5​

V1​=0.000075Y1​−0.043Y2​+0.113Y3​+0.004Y4​

En el primer par canónico, se evidencia que la dimensión genética U1​ exhibe un contraste marcado entre la variable X1​ y el resto del conjunto genético. Este contraste representa, en términos biológicos, la cantidad de mariposas con genes con movilidad de 0.40.

Por otro lado, al evaluar la combinación lineal de la dimensión ambiental V1​, se observa un comportamiento polarizado en las cargas: el coeficiente asociado a Y2​ (precipitación) asume un valor negativo y de alta magnitud, mientras que el coeficiente de Y3​ (temperatura máxima) toma un valor positivo y también grande en términos absolutos

A partir de la relación entre ambas dimensiones (U1​,V1​), se concluye que existe una alta asociación ecológica y genética; específicamente, la cantidad de genes con movilidad de 0.40 (X1​) está fuertemente vinculada a entornos que presentan simultáneamente una ocurrencia de bajas precipitaciones y subidas notables en la temperatura máxima.

Varianza Extraída (Cuadrado de las cargas)

Nos indica qué proporción de la varianza de la variable original es capturada por la función canónica.

# Fracción de la varianza de X asociada con cada variable canónica
acc["xstructcorrsq"]
## $xstructcorrsq
##         CV 1       CV 2         CV 3       CV 4
## X1 0.3144302 0.19995191 0.0578756657 0.41711827
## X2 0.1474679 0.02775502 0.0064672824 0.81830877
## X3 0.4855176 0.04782184 0.0002228715 0.17867431
## X4 0.8466687 0.07339094 0.0170905384 0.06202864
## X5 0.1278594 0.24368158 0.0024888591 0.51304499
# Fracción de la varianza de Y asociada con cada variable canónica
acc["ystructcorrsq"]
## $ystructcorrsq
##         CV 1       CV 2       CV 3       CV 4
## Y1 0.5784110 0.38939460 0.02854670 0.00364767
## Y2 0.7280956 0.02200433 0.01184496 0.23805508
## Y3 0.7377461 0.07720169 0.02268866 0.16236355
## Y4 0.6107427 0.32068714 0.02154380 0.04702634

Criterio X

Observamos la columna CV 1 en

La dimensión U1​ captura la información de X4​, extrayendo un 84.6% (0.846) de toda su varianza original. Prácticamente, U1​ “contiene” a X4​.

Retención Moderada a Baja: Captura un 48.5% de la varianza de X3​ y un 31.4% de X1​.

Información Perdida: Variables como X2​ (14.7%) y X5​ (12.7%) están pobremente representadas en esta primera dimensión.

Criterio Y

Observamos la columna CV 1

La dimensión canónica V1​ funciona como un resumen global de todo el conjunto dependiente.

Logra extraer y representar una alta proporción de la varianza de todas las variables del bloque: Y3​ (73.7%), Y2​ (72.8%), Y4​ (61.0%) y Y1​ (57.8%).

Por lo que el conjunto Y es un bloque altamente cohesivo. La variable canónica V1​ es una representación destacable de ese sistema multivariado.

Índice de Redundancia (Correlaciones Cruzadas)

La redundancia responde a la pregunta analítica clave: ¿Qué porcentaje de la variabilidad de las variables originales \(Y\) puede ser explicado por las variables del conjunto \(X\) (y viceversa)?

# Correlaciones cruzadas: Correlación entre X's y las canónicas de Y (V)
acc["xcrosscorr"]
## $xcrosscorr
##          CV 1       CV 2         CV 3        CV 4
## X1  0.4970117 -0.3230964 -0.103638998  0.14264034
## X2  0.3403716 -0.1203760  0.034644645  0.19978890
## X3  0.6175996  0.1580092  0.006431355  0.09335634
## X4 -0.8155701 -0.1957449 -0.056318759 -0.05500585
## X5  0.3169355  0.3566816 -0.021491927 -0.15819417
# Correlaciones cruzadas: Correlación entre Y's y las canónicas de X (U)
acc["ycrosscorr"]
## $ycrosscorr
##          CV 1       CV 2        CV 3        CV 4
## Y1 -0.6740976 -0.4508834  0.07278689 -0.01333891
## Y2 -0.7563081  0.1071824 -0.04688586 -0.10775849
## Y3  0.7613038  0.2007625 -0.06489027 -0.08899324
## Y4  0.6926816  0.4091759  0.06323192  0.04789425

Análisis

  1. Poder Predictivo de X sobre Y

¿Qué tan bien puede la variable canónica predictora (U1​, construida con nuestro bloque X) explicar el comportamiento de las variables originales de Y?

Observando la columna CV 1 de ycrosscor:

Vemos correlaciones cruzadas muy robustas. La dimensión predictora U1​ correlaciona fuertemente con Y3​ (0.761), Y2​ (−0.756), Y4​ (0.693) y Y1​ (−0.674).

Si elevamos estos valores al cuadrado (que es lo que calcula matemáticamente el Índice de Redundancia), descubrimos la varianza explicada cruzada. La combinación de variables X (representada en U1​) es capaz de explicar el 58% de la varianza original de Y3​ (0.7612 al cuadrado = 0.579) y el 57% de Y2​ (−0.7562 al cuadrado = 0.571).

El conjunto X tiene un alto poder explicativo sobre el conjunto Y.

  1. Poder Predictivo de Y sobre X (xcrosscorr)

¿Qué tan bien explica la variable canónica criterio (V1​, construida con el bloque Y) a las variables individuales de X?

Observando la columna CV 1 en $xcrosscorr:

La dimensión V1​ tiene una excelente capacidad para predecir a X4​ (correlación de −0.815, lo que equivale a explicar un 66.5% de su varianza).

También logra predecir moderadamente a X3​ (0.617 → 38% de varianza) y a X1​ (0.497 → 24.7%).

Pero no es util para explicar el comportamiento de X2​ y X5​ a través de esta primera dimensión.

7. Representación Gráfica del Espacio Canónico

Visualizaremos los resultados utilizando primero las funciones base de yacca y luego vegan, lo cual es ideal para proyectar a los individuos en el plano geométrico del que hablan Díaz y Peña.

# Gráfico de barras resumen (similar a los perfiles de la figura 10.1)
plot(acc)

Proyección Geométrica con vegan

El paquete vegan nos permite construir biplots, herramientas esenciales en el análisis multivariado para superponer individuos y variables.

library(vegan)

# Generación del modelo canónico en vegan
salida <- CCorA(datosX, datosY)

par(mfrow=c(2,2)) # Dividir ventana gráfica

# 1. Proyección de los individuos (observaciones) sobre el plano canónico
biplot(salida, "ob", main="Individuos en Plano Canónico")

# 2. Proyección de las variables (Círculo de correlaciones)
biplot(salida, "v", cex = c(0.7, 0.6), main="Círculo de Correlaciones")

# 3. Superposición de Individuos y Variables
biplot(salida, "ov", cex = c(0.7, 0.6), main="Biplot Conjunto")

# 4. Proyección base de vegan
biplot(salida, "b", cex = c(0.7, 0.6), main="Biplot Estándar")

par(mfrow=c(1,1))