Lectura de base de datos

# Lectura de base de datos

baseAbun1 <- read.table("ejemplo1.txt", header = TRUE, row.names = 1)
matrizAbun <- as.matrix(baseAbun1)
matrizAbun
##         sp1 sp2
## sitio1   10  10
## sitio2   19  32
## sitio3    5   3
## sitio4   10  20
## sitio5    3  19
## sitio6    4  18
## sitio7    7   7
## sitio8    5  46
## sitio9   25  26
## sitio10  11  11
## sitio11   5  30

\[ A = \left[ \begin{array}{cc} 10 & 10 \\ 19 & 32 \\ 5 & 3 \\ 10 & 20 \\ 3 & 19 \\ 4 & 18 \\ 7 & 7 \\ 5 & 46 \\ 25 & 26 \\ 11 & 11 \\ 5 & 30 \\ \end{array} \right] \]

Gráfica de dispersión de las abundancias de las dos especies

plot(matrizAbun, xlim = c(-1, 50), ylim = c(-1, 50), asp = 1, pch = 19)
text(matrizAbun, labels = row.names(matrizAbun), pos = 2)
abline(v = 0, col = "red")
abline(h = 0, col = "red")

Hallar las abundancias totales de cada sitio.

sumas <- rowSums(matrizAbun)
sumas
##  sitio1  sitio2  sitio3  sitio4  sitio5  sitio6  sitio7  sitio8  sitio9 sitio10 
##      20      51       8      30      22      22      14      51      51      22 
## sitio11 
##      35

Hallar la distancia magnitud de la abundancia por algunos sitios

nsitio1 <- sqrt(sum(matrizAbun[1, ] ^ 2))
nsitio1
## [1] 14.14214
nsitio2 <- sqrt(sum(matrizAbun[2, ] ^ 2))
nsitio2
## [1] 37.21559
nsitio9 <- sqrt(sum(matrizAbun[9, ] ^ 2))
nsitio9
## [1] 36.06938

La magnitud de un vector \(\boldsymbol{u} = [x \quad y]\) se define como:

\[ |\boldsymbol{u}| = \sqrt{x^2 + y^2} \]

Hallar la abundancias “conjunta” de todos los sitios.

Cálculo de la norma de cada vector fila.

normas <- sqrt(rowSums(matrizAbun ^ 2))
normas
##    sitio1    sitio2    sitio3    sitio4    sitio5    sitio6    sitio7    sitio8 
## 14.142136 37.215588  5.830952 22.360680 19.235384 18.439089  9.899495 46.270941 
##    sitio9   sitio10   sitio11 
## 36.069378 15.556349 30.413813

Llevar a una base de datos todas las medidas.

base_total <- cbind(matrizAbun, sumas, normas)
base_total
##         sp1 sp2 sumas    normas
## sitio1   10  10    20 14.142136
## sitio2   19  32    51 37.215588
## sitio3    5   3     8  5.830952
## sitio4   10  20    30 22.360680
## sitio5    3  19    22 19.235384
## sitio6    4  18    22 18.439089
## sitio7    7   7    14  9.899495
## sitio8    5  46    51 46.270941
## sitio9   25  26    51 36.069378
## sitio10  11  11    22 15.556349
## sitio11   5  30    35 30.413813

Gráfica de las distancias “conjuntas”.

plot(matrizAbun, xlim = c(-1, 50), ylim = c(-1, 50), asp = 1, pch = 19)
text(matrizAbun, labels = row.names(matrizAbun), pos = 2)
arrows(0, 0, matrizAbun[, 1], matrizAbun[, 2], col = "blue", length = 0.2)
abline(v = 0, col = "red")
abline(h = 0, col = "red")
abline(a = 51, b = -1, col = "chartreuse4")
abline(a = 22, b = -1, col = "chartreuse4")

Gráfica de comparación de las dos distancias o magnitudes de cada sitio como vector.

plot(sumas, normas,
     asp = 1, xlim = c(0, 55), ylim = c(0, 55), pch =19,
     las = 1)
text(sumas, normas, labels = names(sumas), pos = 2, col = "blue")

Cálculo de los vectores unitarios para cada vector (sitio).

El vector unitario asociado a cualquier vector \(\boldsymbol{v}\) se define como:

\[ \boldsymbol{u} = \frac{\boldsymbol{v}}{|\boldsymbol{v}|} \]

matrizAbun
##         sp1 sp2
## sitio1   10  10
## sitio2   19  32
## sitio3    5   3
## sitio4   10  20
## sitio5    3  19
## sitio6    4  18
## sitio7    7   7
## sitio8    5  46
## sitio9   25  26
## sitio10  11  11
## sitio11   5  30
normas
##    sitio1    sitio2    sitio3    sitio4    sitio5    sitio6    sitio7    sitio8 
## 14.142136 37.215588  5.830952 22.360680 19.235384 18.439089  9.899495 46.270941 
##    sitio9   sitio10   sitio11 
## 36.069378 15.556349 30.413813
matrizNormalizadas <- matrizAbun/normas
matrizNormalizadas
##               sp1       sp2
## sitio1  0.7071068 0.7071068
## sitio2  0.5105388 0.8598547
## sitio3  0.8574929 0.5144958
## sitio4  0.4472136 0.8944272
## sitio5  0.1559626 0.9877630
## sitio6  0.2169305 0.9761871
## sitio7  0.7071068 0.7071068
## sitio8  0.1080592 0.9941445
## sitio9  0.6931087 0.7208331
## sitio10 0.7071068 0.7071068
## sitio11 0.1643990 0.9863939

Gráfica de los vectores unitarios.

plot(matrizNormalizadas, asp = 1, pch = 19,
     xlim = c(0, 1), ylim = c(0, 1))
text(matrizNormalizadas, labels = 1:nrow(matrizAbun), pos = 1)

Cálculo de proporción de abundancias.

(matrizProporciones <- matrizAbun/sumas)
##                sp1       sp2
## sitio1  0.50000000 0.5000000
## sitio2  0.37254902 0.6274510
## sitio3  0.62500000 0.3750000
## sitio4  0.33333333 0.6666667
## sitio5  0.13636364 0.8636364
## sitio6  0.18181818 0.8181818
## sitio7  0.50000000 0.5000000
## sitio8  0.09803922 0.9019608
## sitio9  0.49019608 0.5098039
## sitio10 0.50000000 0.5000000
## sitio11 0.14285714 0.8571429
plot(matrizProporciones, asp = 1, pch = 19,
     xlim = c(0, 1), ylim = c(0, 1))
text(matrizProporciones, labels = 1:nrow(matrizAbun), pos = 2)

Comparación gráfica entre “abundancia conjunta” y “proporciones”.

plot(matrizProporciones, asp = 1, pch = 19,
     xlim = c(0, 1), ylim = c(0, 1), col = "red")
text(matrizProporciones, labels = 1:nrow(matrizAbun), pos = 1)
points(matrizNormalizadas, pch = 19,
     col = "blue")
text(matrizNormalizadas, labels = 1:nrow(matrizAbun), pos = 1)

Cálculo de la matriz centrada de abundancias.

promedios <- colMeans(matrizAbun)
promedios
##       sp1       sp2 
##  9.454545 20.181818
matrizCentrada <- t(t(matrizAbun) - promedios)
matrizCentrada
##                sp1         sp2
## sitio1   0.5454545 -10.1818182
## sitio2   9.5454545  11.8181818
## sitio3  -4.4545455 -17.1818182
## sitio4   0.5454545  -0.1818182
## sitio5  -6.4545455  -1.1818182
## sitio6  -5.4545455  -2.1818182
## sitio7  -2.4545455 -13.1818182
## sitio8  -4.4545455  25.8181818
## sitio9  15.5454545   5.8181818
## sitio10  1.5454545  -9.1818182
## sitio11 -4.4545455   9.8181818

Gráfica de los sitios con respecto al centroide o centro de masa de abundancias

plot(matrizCentrada,xlim = c(-20, 30), ylim = c(-20, 30), asp = 1, pch = 19)
text(matrizCentrada, labels = row.names(matrizAbun), pos = 2)
grid()
abline(h = 0, col = "red", lty = 4)
abline(v = 0, col = "red", lty = 4)

Matriz de varianza y covarianza de matrices de abundancias y de abundacias centradas

matrizAbun
##         sp1 sp2
## sitio1   10  10
## sitio2   19  32
## sitio3    5   3
## sitio4   10  20
## sitio5    3  19
## sitio6    4  18
## sitio7    7   7
## sitio8    5  46
## sitio9   25  26
## sitio10  11  11
## sitio11   5  30
var(matrizAbun)
##          sp1       sp2
## sp1 47.27273  15.30909
## sp2 15.30909 159.96364
matrizCentrada
##                sp1         sp2
## sitio1   0.5454545 -10.1818182
## sitio2   9.5454545  11.8181818
## sitio3  -4.4545455 -17.1818182
## sitio4   0.5454545  -0.1818182
## sitio5  -6.4545455  -1.1818182
## sitio6  -5.4545455  -2.1818182
## sitio7  -2.4545455 -13.1818182
## sitio8  -4.4545455  25.8181818
## sitio9  15.5454545   5.8181818
## sitio10  1.5454545  -9.1818182
## sitio11 -4.4545455   9.8181818
var(matrizCentrada)
##          sp1       sp2
## sp1 47.27273  15.30909
## sp2 15.30909 159.96364

Composición de referencia

composicion1 <- c(1, 9) 
composicion2 <- c(-9, 1) 
composicion1
## [1] 1 9
promedios
##       sp1       sp2 
##  9.454545 20.181818
promedios + composicion1
##      sp1      sp2 
## 10.45455 29.18182
promedios + composicion2
##        sp1        sp2 
##  0.4545455 21.1818182

Producto escalar entre dos vectores.

El producto escalar entre dos vectores \(\boldsymbol{v}\), \(\boldsymbol{w}\) se define como:

\[ \boldsymbol{v} \cdot \boldsymbol{w} \]

Y es equivalente a:

\[ \boldsymbol{v} \cdot \boldsymbol{w} = |\boldsymbol{v}| |\boldsymbol{w}| \cos \theta \]

Donde \(\theta\) es el ángulo entre los vectores \(\boldsymbol{v}\) y \(\boldsymbol{w}\).

## Producto punto de dos vectores
composicion1%*%composicion2
##      [,1]
## [1,]    0
## Matriz con los vectores de referencia
composicion <- rbind(composicion1, composicion2)
composicion
##              [,1] [,2]
## composicion1    1    9
## composicion2   -9    1

Gráfica de los sitios centrados y las abundancias de referencia

plot(matrizCentrada,xlim = c(-20, 30), ylim = c(-20, 30), asp = 1, pch = 19)
text(matrizCentrada, labels = row.names(matrizAbun), pos = 2)
abline(h = 0, col = "red")
abline(v = 0, col = "red")
arrows(0, 0, composicion1[1], composicion1[2], col = "blue", length = 0.2, lwd = 2)
arrows(0, 0, composicion2[1], composicion2[2], col = "blue", length = 0.2, lwd = 2)
grid()

Proyección de un vector sobre otro.

La magnitud de la proyección del vector \(\boldsymbol{v}\) sobre \(\boldsymbol{w}\) se define como:

\[ Proy_{\boldsymbol{w}}{\boldsymbol{v}} = \frac{\boldsymbol{v} \cdot \boldsymbol{w}}{|\boldsymbol{w}|} \] Donde \(|\cdot|\) es la norma de un vector, \(Proy_{\boldsymbol{w}}{\boldsymbol{v}}\) es la magnitud de la proyección de \(\boldsymbol{v}\) sobre \(\boldsymbol{w}\) y el producto \(\cdot\) es el producto escalar entre dos vectores.

compoUnidad <- composicion / sqrt(rowSums(composicion ^ 2))
compoUnidad
##                    [,1]      [,2]
## composicion1  0.1104315 0.9938837
## composicion2 -0.9938837 0.1104315
matrizProyectada <- matrizCentrada %*% t(compoUnidad)
matrizProyectada
##         composicion1 composicion2
## sitio1   -10.0593081   -1.6665121
## sitio2    12.8000178   -8.1819722
## sitio3   -17.5686519    2.5298859
## sitio4    -0.1204708   -0.5621969
## sitio5    -1.8873752    6.2845578
## sitio6    -2.7708274    5.1802425
## sitio7   -13.3722539    0.9838445
## sitio8    25.1683487    7.2784415
## sitio9     7.4993045  -14.8078637
## sitio10   -8.9549928   -2.5499643
## sitio11    9.2662090    5.5115371
plot(matrizProyectada, asp = 1, pch = 19, ylim = c(-20, 20))
text(matrizProyectada, labels = row.names(matrizAbun), pos = 1)
grid()
abline(h = 0, col = "red")
abline(v = 0, col = "red")

var(matrizProyectada)
##              composicion1 composicion2
## composicion1   161.949889    -2.567184
## composicion2    -2.567184    45.286475

Interpretación

matrizCentrada
##                sp1         sp2
## sitio1   0.5454545 -10.1818182
## sitio2   9.5454545  11.8181818
## sitio3  -4.4545455 -17.1818182
## sitio4   0.5454545  -0.1818182
## sitio5  -6.4545455  -1.1818182
## sitio6  -5.4545455  -2.1818182
## sitio7  -2.4545455 -13.1818182
## sitio8  -4.4545455  25.8181818
## sitio9  15.5454545   5.8181818
## sitio10  1.5454545  -9.1818182
## sitio11 -4.4545455   9.8181818
matrizProyectada
##         composicion1 composicion2
## sitio1   -10.0593081   -1.6665121
## sitio2    12.8000178   -8.1819722
## sitio3   -17.5686519    2.5298859
## sitio4    -0.1204708   -0.5621969
## sitio5    -1.8873752    6.2845578
## sitio6    -2.7708274    5.1802425
## sitio7   -13.3722539    0.9838445
## sitio8    25.1683487    7.2784415
## sitio9     7.4993045  -14.8078637
## sitio10   -8.9549928   -2.5499643
## sitio11    9.2662090    5.5115371

Vectores propios

Hallar los vectores y valores propios.

m_vc <- var(matrizCentrada)
vp1 <- eigen(m_vc)
vp1
## eigen() decomposition
## $values
## [1] 162.00635  45.23001
## 
## $vectors
##           [,1]       [,2]
## [1,] 0.1322594 -0.9912151
## [2,] 0.9912151  0.1322594

Usar los vectores propios para proyectar los datos originales.

(matrizRotada_vp <- matrizCentrada%*%vp1$vectors)
##                [,1]       [,2]
## sitio1  -10.0202308  -1.887304
## sitio2   12.9768370  -7.898533
## sitio3  -17.6200338   2.142956
## sitio4   -0.1080794  -0.564710
## sitio5   -2.0251105   6.241537
## sitio6   -2.8840662   5.118062
## sitio7  -13.3906545   0.689563
## sitio8   25.0022170   7.830111
## sitio9    7.8231027 -14.639380
## sitio10  -8.8967562  -2.746260
## sitio11   9.1427748   5.713960

Gráfica de los datos proyectados en las nuevas coordenadas.

plot(matrizRotada_vp, asp = 1, pch = 19, ylim = c(-16, 16))
text(matrizRotada_vp, labels = row.names(matrizAbun), pos = 3)
abline(h=0, col = "red")
abline(v=0, col = "red")
grid()

Matriz de varianza covarianza de los datos proyectados sobre los vectores propios.

round(var(matrizRotada_vp), 3)
##         [,1]  [,2]
## [1,] 162.006  0.00
## [2,]   0.000 45.23