# 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] \]
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")
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
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} \]
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
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
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")
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")
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
plot(matrizNormalizadas, asp = 1, pch = 19,
xlim = c(0, 1), ylim = c(0, 1))
text(matrizNormalizadas, labels = 1:nrow(matrizAbun), pos = 1)
(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)
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)
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
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)
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
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
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
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()
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
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
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