# Lectura
ambient <- read.csv2("ambientales.csv",enc="latin1",row.names=1)
peces <- read.csv2("peces.csv",enc="latin1",row.names=1)
locs <- read.csv2("localidades.csv",enc="latin1",row.names=1)
nomEspec <- read.csv2("nombresdeespecies.csv",enc="latin1")
nomVarAmbient <- read.csv2("Nombresdevariablesambientales.csv",enc="latin1")
# Adecuación
# Quitar el sitio que no tiene ninguna especie
sumEsp <- apply(peces,1,sum)
peces <- peces[sumEsp!=0,]
ambient <- ambient[sumEsp!=0,]
locs <- locs[sumEsp!=0,]
# (vegan deberá ser cargado después de ade4 para evitar conflictos).
library(ade4)
library(vegan)
## Loading required package: permute
## Loading required package: lattice
## This is vegan 2.5-3
library(gclus)
## Loading required package: cluster
library(cluster)
library(RColorBrewer)
Análisis de conglomerados jerárquico en la base de datos de abundancia de especies.
Algomeración de grupos mediante promedios o centroides.
Peso o ponderación: Se tiene el número de miembros del grupo como una ponderación. Donde se tiene en cuentra el tamaño de grupo para el cálculo de la distancia al grupo (cluster).
Promedios aritméticos | Agrupamiento por Centroide | |
---|---|---|
Pesos iguales | UPGMA | UPGMC |
Num individuos | Unweighted Pair-Group | Unweighted Pair-Group Method |
Method using aritmetic | using centroids | |
Average | ||
“average” | “centroid” | |
Pesos distintos | WPGMA | WPGMC |
Indep del num | Weighted Pair-Group Method | Weighted Pair-Group Method |
using aritmetic Average | using centroid. | |
“mcquitty” | “median” |
Método de Ward utiliza el promedio de la suma de cuadrados de las distancias de todos los miembros del grupo. Se incorpora el miembro nuevo que minimice esta suma de cuadrados.
Algunas veces el UPGMC o el WPGMC lleva a dendrogramas con “reversazos”, esto hace difícil la interpretación de la conformación de grupos.
Se recomiendan en su orden de más recomendado a menos recomendado el siguiente orden UPGMA, WPGMA, WPGMC y UPGMC.
De manera numérica se tiene que el enlace se puede establecer como:
# Cálculo de la matriz utilizando la distancia de Chord
# entre sitios, siguiente en enlace simple.
peces.norm <- decostand(peces, "normalize")
peces.ch <- vegdist(peces.norm, "euclidean")
peces.ch.single <- hclust(peces.ch, method="single")
# Estructura de los resultados de "hclust"
str(peces.ch.single)
## List of 7
## $ merge : int [1:28, 1:2] -20 -3 -2 -26 -25 -19 -28 6 -12 -16 ...
## $ height : num [1:28] 0.218 0.229 0.231 0.236 0.238 ...
## $ order : int [1:29] 8 5 1 18 29 19 20 21 28 25 ...
## $ labels : chr [1:29] "1" "2" "3" "4" ...
## $ method : chr "single"
## $ call : language hclust(d = peces.ch, method = "single")
## $ dist.method: chr "euclidean"
## - attr(*, "class")= chr "hclust"
# Determinar el modo que realizó el agrupamiento teniendo en cuenta.
# la posición en la base de datos.
with(peces.ch.single,cbind(merge,height))
## height
## [1,] -20 -21 0.2183057
## [2,] -3 -7 0.2292333
## [3,] -2 2 0.2309609
## [4,] -26 -27 0.2357353
## [5,] -25 4 0.2378549
## [6,] -19 1 0.2641843
## [7,] -28 5 0.2874361
## [8,] 6 7 0.2896600
## [9,] -12 -13 0.3024472
## [10,] -16 -17 0.3222605
## [11,] -4 -6 0.3237064
## [12,] -29 8 0.3248500
## [13,] 3 11 0.3429386
## [14,] -10 9 0.3857583
## [15,] -11 13 0.3860668
## [16,] 14 15 0.3991963
## [17,] -9 16 0.4598735
## [18,] -22 -23 0.4634492
## [19,] -14 17 0.4784253
## [20,] -18 12 0.4977122
## [21,] -15 19 0.5296564
## [22,] 10 21 0.5503781
## [23,] 20 22 0.5516516
## [24,] -24 18 0.5931939
## [25,] 23 24 0.6754943
## [26,] -1 25 0.7653669
## [27,] -5 26 0.8160106
## [28,] -8 27 0.8814766
peces[c(20,21),]
## Cogo Satr Phph Neba Thth Teso Chna Chto Lele Lece Baba Spbi Gogo Eslu
## 21 0 0 1 1 0 0 2 2 2 2 4 2 5 3
## 22 0 0 0 1 0 0 3 2 3 4 5 1 5 3
## Pefl Rham Legi Scer Cyca Titi Abbr Icme Acce Ruru Blbj Alal Anan
## 21 3 3 2 2 2 4 3 1 3 5 3 5 2
## 22 4 3 3 2 3 4 4 2 4 5 4 5 2
peces.norm[c(20,21),]
## Cogo Satr Phph Neba Thth Teso Chna Chto Lele
## 21 0 0 0.07071068 0.07071068 0 0 0.1414214 0.1414214 0.1414214
## 22 0 0 0.00000000 0.06108472 0 0 0.1832542 0.1221694 0.1832542
## Lece Baba Spbi Gogo Eslu Pefl Rham
## 21 0.1414214 0.2828427 0.14142136 0.3535534 0.2121320 0.2121320 0.2121320
## 22 0.2443389 0.3054236 0.06108472 0.3054236 0.1832542 0.2443389 0.1832542
## Legi Scer Cyca Titi Abbr Icme Acce
## 21 0.1414214 0.1414214 0.1414214 0.2828427 0.2121320 0.07071068 0.2121320
## 22 0.1832542 0.1221694 0.1832542 0.2443389 0.2443389 0.12216944 0.2443389
## Ruru Blbj Alal Anan
## 21 0.3535534 0.2121320 0.3535534 0.1414214
## 22 0.3054236 0.2443389 0.3054236 0.1221694
# Gráfica del dendograma usando las opciones por omisión.
plot(peces.ch.single, main="Peces - Chord - Enlace simple", hang = -1)
# Ordenación con respecto al gradiente de distancia a la desembocadura.
ambient2 <- ambient
ambient2$pos <- 1:nrow(ambient)
ambient2 <- ambient2[peces.ch.single$order, ]
ambient2$consec <- 1:nrow(ambient2)
# Gráfica que muestra posibles gradientes determinados por la agrupación
plot(ambient2$consec, ambient2$das, pch = 19)
text(ambient2$consec, ambient2$das,
labels = row.names(ambient2),
pos = 2)
abline(coef=coef(lm(ambient2$das ~ ambient2$consec)),col="red")
# Gráfica que muestra posibles gradientes determinados por la agrupación
plot(ambient2$consec, ambient2$nit, pch = 19)
text(ambient2$consec, ambient2$nit,
labels = row.names(ambient2),
pos = 2)
abline(coef=coef(lm(ambient2$nit ~ ambient2$consec)),col="red")
# Cálculo utilizando el enlace completo
peces.ch.complete <- hclust(peces.ch, method="complete")
plot(peces.ch.complete,main="Peces - Chord - Enlace completo", hang = -1)
# Cálculo mediante UPGMA
peces.ch.UPGMA <- hclust(peces.ch, method="average")
plot(peces.ch.UPGMA,main="Peces - Chord - Promedio", hang = -1)
# Cálculo mediante UPGMC
peces.ch.centroid <- hclust(peces.ch, method="centroid")
plot(peces.ch.centroid,main="Peces - Chord - Centroide", hang = -1)
# Utilizando el métod de Ward
peces.ch.ward <- hclust(peces.ch, method="ward.D")
plot(peces.ch.ward,main="Peces - Chord - Ward", hang = -1)
# Transformación raiz cuadrada de la altura
peces.ch.ward$height <- sqrt(peces.ch.ward$height)
plot(peces.ch.ward,main="Peces - Chord - sqrt(Ward)", hang = -1)