Analisis de Correspondencia Canonico

# Importamos librerias.
library(tidyverse)
library(readxl)
# Importamos datos.
mariposa = read_excel("datos_mariposas.xlsx")
# Observamos los datos. 
print(mariposa)
## # A tibble: 16 × 11
##    Colonia    X1    X2    X3    X4    X5    X6    Y1    Y2    Y3    Y4
##    <chr>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 SS          0     3    22    57    17     1   500    43    98    17
##  2 SB          0    16    20    38    13    13   800    20    92    32
##  3 WSB         0     6    28    46    17     3   570    28    98    26
##  4 JRC         0     4    19    47    27     3   550    28    98    26
##  5 JRH         0     1     8    50    35     6   550    28    98    26
##  6 SJ          0     2    19    44    32     3   380    15    99    28
##  7 CR          0     0    15    50    27     8   930    21    99    28
##  8 UO         10    21    40    25     4     0   650    10   101    27
##  9 LO         14    26    32    28     0     0   600    10   101    27
## 10 DP          0     1     6    80    12     1  1500    19    99    23
## 11 PZ          1     4    34    33    22     6  1750    22   101    27
## 12 MC          0     7    14    66    13     0  2000    58   100    18
## 13 IF          0     9    15    47    21     8  2500    34   102    16
## 14 AF          3     7    17    32    27    14  2000    21   105    20
## 15 GH          0     5     7    84     4     0  7850    42    84     5
## 16 GL          0     3     1    92     4     0 10500    50    81   -12

Primer conjunto de variables:

Este tipo de variables son ambientales.

Segundo conjunto de variables:

Este tipo de variables son geneticas.

mariposa2 = mariposa %>% 
  select(-c(Colonia, X6)) %>%  # Forma simple 1.
  as.matrix()

media = apply(mariposa2, 2, mean)
uno = matrix(1, nrow = 16)

I = diag(16)
centrada = mariposa2 - (uno %*% media)

s1 = (1/15)*t(mariposa2) %*% (I - (1/15) * (uno %*% t(uno))) %*% mariposa2

print(s1 %>% data.frame())
##              X1           X2           X3          X4           X5          Y1
## X1    16.915556    25.622222     25.24000   -50.52000    -24.68889   -2675.067
## X2    25.622222    52.488889     40.20000  -108.53333    -57.02222   -5173.333
## X3    25.240000    40.200000     91.62667  -245.61333    -37.40000  -20549.600
## X4   -50.520000  -108.533333   -245.61333   216.24000   -119.60000   34346.133
## X5   -24.688889   -57.022222    -37.40000  -119.60000     95.15556  -16772.667
## Y1 -2675.066667 -5173.333333 -20549.60000 34346.13333 -16772.66667 7976549.333
## Y2   -34.208889   -57.288889   -119.94667    94.10667    -55.11111   18668.800
## Y3    -4.302222   -41.422222    -91.52000  -445.84000    -88.71111  -29746.800
## Y4     7.435556     9.555556     42.52000  -242.89333     23.17778  -32658.533
##             Y2            Y3            Y4
## X1   -34.20889     -4.302222      7.435556
## X2   -57.28889    -41.422222      9.555556
## X3  -119.94667    -91.520000     42.520000
## X4    94.10667   -445.840000   -242.893333
## X5   -55.11111    -88.711111     23.177778
## Y1 18668.80000 -29746.800000 -32658.533333
## Y2   139.79556   -236.817778   -149.715556
## Y3  -236.81778   -631.804444    -94.062222
## Y4  -149.71556    -94.062222     89.128889
s = (1/15)*(t(centrada) %*% mariposa2)
print(s)
##             X1           X2           X3          X4           X5          Y1
## X1    17.13333    26.516667     27.55000   -44.15000    -22.55000   -2413.500
## X2    26.51667    56.162500     49.68750   -82.37083    -48.23750   -4099.042
## X3    27.55000    49.687500    116.12917  -178.04583    -14.71250  -17775.125
## X4   -44.15000   -82.370833   -178.04583   402.56250    -57.03750   41996.958
## X5   -22.55000   -48.237500    -14.71250   -57.03750    116.16250  -14203.708
## Y1 -2413.50000 -4099.041667 -17775.12500 41996.95833 -14203.70833 8290709.583
## Y2   -30.71667   -42.945833    -82.90417   196.25417    -20.81250   22863.208
## Y3     7.80000     8.283333     36.85000   -91.85000     30.15000  -15211.167
## Y4    10.03333    20.225000     70.07500  -166.90833     48.69167  -29538.417
##             Y2            Y3           Y4
## X1   -30.71667      7.800000     10.03333
## X2   -42.94583      8.283333     20.22500
## X3   -82.90417     36.850000     70.07500
## X4   196.25417    -91.850000   -166.90833
## X5   -20.81250     30.150000     48.69167
## Y1 22863.20833 -15211.166667 -29538.41667
## Y2   195.79583    -42.750000   -108.05833
## Y3   -42.75000     40.733333     50.30000
## Y4  -108.05833     50.300000    120.11667
D = diag(apply(mariposa2, 2, sd))
R = solve(D) %*% s %*% solve(D)
print(R %>% data.frame())
##           X1         X2         X3         X4         X5         X6         X7
## 1  1.0000000  0.8548202  0.6176323 -0.5316100 -0.5054668 -0.2025026 -0.5303364
## 2  0.8548202  1.0000000  0.6152523 -0.5478146 -0.5972121 -0.1899605 -0.4095398
## 3  0.6176323  0.6152523  1.0000000 -0.8234638 -0.1266726 -0.5728569 -0.5497990
## 4 -0.5316100 -0.5478146 -0.8234638  1.0000000 -0.2637612  0.7269513  0.6990375
## 5 -0.5054668 -0.5972121 -0.1266726 -0.2637612  1.0000000 -0.4576916 -0.1380033
## 6 -0.2025026 -0.1899605 -0.5728569  0.7269513 -0.4576916  1.0000000  0.5674657
## 7 -0.5303364 -0.4095398 -0.5497990  0.6990375 -0.1380033  0.5674657  1.0000000
## 8  0.2952560  0.1731837  0.5357866 -0.7172780  0.4383080 -0.8277357 -0.4786956
## 9  0.2211682  0.2462429  0.5933225 -0.7590314  0.4122114 -0.9360299 -0.7046199
##           X8         X9
## 1  0.2952560  0.2211682
## 2  0.1731837  0.2462429
## 3  0.5357866  0.5933225
## 4 -0.7172780 -0.7590314
## 5  0.4383080  0.4122114
## 6 -0.8277357 -0.9360299
## 7 -0.4786956 -0.7046199
## 8  1.0000000  0.7191035
## 9  0.7191035  1.0000000

\(\lambda_{1} = 0.77311\) \(\lambda_{2} = 0.55701\) \(\lambda_{3} = 0.16943\) \(\lambda_{4} = 0.04720\)

RXX = R[1:5, 1:5]
RXY = R[1:5, 6:9]
RYX = R[6:9, 1:5]
RYY = R[6:9, 6:9]

eigen(solve(RYY) %*% RYX %*% solve(RXX) %*% RXY)$values
## [1] 0.77311956 0.55701920 0.16943899 0.04720573