Lectura de las bases de datos

# 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,]

Carga de paquetes requeridos

# (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)

Métodos aglomerativos

Análisis de conglomerados jerárquico en la base de datos de abundancia de especies.

Algomeración de grupos mediante promedios o centroides.

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)