Roteiro principal — cluster hierárquico, k-means, IndVal (versão sem respostas, para o aluno completar).

Walkthrough do código — Aula 3: Agrupamento: cluster hierárquico, k-means e IndVal

Walkthrough do código usado em sala. Os comandos não são executados pelo renderizador — copie e cole no seu R local. Você pode baixar o script .R original e os dados em Aula 3.

install.packages(c("vegan","labdsv"))


#------------------------------------------------------------------------------------------------------------------------------------------------------------------



#### Aula 1 - Cluster analysis


# 1.1 - Load required libraries 
library (vegan) 
library(labdsv)



# 1.2 - Import the data from CSV files
spe <- read.csv("DoubsSpe.csv", row.names=1)# nomeei a planilha e abro no R (tudo o que est? na direita ser? realizado)
env <- read.csv("DoubsEnv.csv", row.names=1)
spe <- spe[-8,] # Remove empty site 8 # retiro a linha 8, pois n?o h? dados
env <- env[-8,] # Remove empty site 8


# 1.3 - Single linkage agglomerative clustering
library(vegan)
spe.norm <- decostand(spe, "normalize") # fun??o do pacore vegan, ela faz v?rias padroniza??es, aqui ele normaliza  
spe.ch <- vegdist(spe.norm, "euc") # criamos uma matriz de dist?ncia, se n?o determinamos o tipo de matris ele far? o bray curtis
spe.ch.single <- hclust(spe.ch, method="single") # an?lise de cluster, aqui escolhemos qual m?todo de liga??o queremos 
plot(spe.ch.single)


# 1.4 - Complete-linkage agglomerative clustering
spe.ch.complete <- hclust(spe.ch, method="complete")
plot(spe.ch.complete)


# 1.5 - UPGMA agglomerative clustering
#UPGMA = Unweighted Pair-Group Method using arithmetic Averages
spe.ch.UPGMA <- hclust(spe.ch, method="average")
plot(spe.ch.UPGMA)


# 1.6 - Ward's minimum variance clustering
spe.ch.ward <- hclust(spe.ch, method="ward")
plot(spe.ch.ward)


# 1.7 - Cophenetic correlation
spe.ch.single.coph <- cophenetic(spe.ch.single) # fun??o para a matriz cofen?tica
cor(spe.ch, spe.ch.single.coph) # correla??o entre os conjuntos de dados
spe.ch.comp.coph <- cophenetic(spe.ch.complete)
cor(spe.ch, spe.ch.comp.coph)
spe.ch.UPGMA.coph <- cophenetic(spe.ch.UPGMA)
cor(spe.ch, spe.ch.UPGMA.coph)
spe.ch.ward.coph <- cophenetic(spe.ch.ward)
cor(spe.ch, spe.ch.ward.coph)


# 1.8 - Shepard-like diagrams
#Para real?ar a rela??o entre uma matriz de dist?ncia e uma matriz cofen?tica, podemos
#utilizar o diagrama de Shepard plotando as dist?ncias originais com as cofen?ticas.
plot(spe.ch, spe.ch.UPGMA.coph, xlab="Chord distance", 
    ylab="Cophenetic distance", asp=1, xlim=c(0,sqrt(2)), ylim=c(0,sqrt(2)), 
  main=c("UPGMA", paste("Cophenetic correlation ",
  round(cor(spe.ch, spe.ch.UPGMA.coph),3))))
abline(0,1)
lines(lowess(spe.ch, spe.ch.UPGMA.coph), col="red")


# 1.9 - Gower (1983) distance
#O m?todo de agrupamento que produzir a mais baixa dist?ncia de Gower pode ser 
#visto como aquele que gera o melhor modelo de agrupamento da matriz de dist?ncia.
gow.dist.single <- sum((spe.ch-spe.ch.single.coph)^2)
gow.dist.comp <- sum((spe.ch-spe.ch.comp.coph)^2)
gow.dist.UPGMA <- sum((spe.ch-spe.ch.UPGMA.coph)^2)
gow.dist.ward <- sum((spe.ch-spe.ch.ward.coph)^2)
gow.dist.single
gow.dist.comp
gow.dist.UPGMA
gow.dist.ward

# 1.8 - Shepard-like diagrams
#Para real?ar a rela??o entre uma matriz de dist?ncia e uma matriz cofen?tica, podemos
#utilizar o diagrama de Shepard plotando as dist?ncias originais com as cofen?ticas.
plot(spe.ch, spe.ch.single.coph, xlab="Chord distance", 
    ylab="Cophenetic distance", asp=1, xlim=c(0,sqrt(2)), ylim=c(0,sqrt(2)), 
  main=c("single", paste("Cophenetic correlation ",
  round(cor(spe.ch, spe.ch.single.coph),3))))
abline(0,1)
lines(lowess(spe.ch, spe.ch.single.coph), col="red")


#------------------------------------------------------------------------------------------------------------------------------------------------------------------


#### Aula 2 - k-means partitioning


# 2.1 - Pre-transformed species data
spe.kmeans <- kmeans(spe.norm, centers=4, nstart=100) # aqui ? o local da linha de comando que eu digo quantos grupos eu quero (centers=4)
spe.kmeans


# 2.2 - k-means partitioning, 2 to 10 groups
#criterion="ssi": A melhor parti??o ? indicada pelo mais elevado valor de ssi.
spe.KM.cascade <- cascadeKM(spe.norm, inf.gr=2, sup.gr=10, iter=100, criterion="ssi") #quanto maior o valor de ssi melhor, da? eu escolho o n?mero de parti??es de acordo com o maior n?mero de ssi
plot(spe.KM.cascade, sortg=TRUE)


# 2.3 - summary
summary(spe.KM.cascade)
spe.KM.cascade$results
spe.KM.cascade$partition
#SSE: crit?rio utilizado pelo algor?timo para achar o agrupamento ?timo dos objetos.
#calinski or ssi: s?o bons crit?rios para encontrar o n?mero ideal de grupos (?cascadeKM)

#If the geographic coordinates of the objects are available, they can be used
#to plot a map of the objects, with symbols or colours representing the groups 
#specified by one of the columns of this table

write.table(spe.KM.cascade$partition[,3],"teste.csv") # salvo um arquivo na pasta (diret?rio) em excell

#------------------------------------------------------------------------------------------------------------------------------------------------------------------


#### Aula 3 - Species indicator values (Dufrene and Legendre)


#3.1 - Divide the sites into 4 groups depending on the distance to the source of the river
das.D1 <- dist(data.frame(das=env[,1], row.names=rownames(env)))
dasD1.kmeans <- kmeans(das.D1, centers=4, nstart=100)
dasD1.kmeans$cluster  # antes da an?lise dividimos as ?reas em 4 grupos de acordo com as caracter?sticas ambientais


#3.2 - Indicator species for this typology of the sites
iva <- indval(spe, dasD1.kmeans$cluster) # indval (dados de esp?cie, vetor de agrupamento)
iva


#3.3 - Table of the significant indicator species
gr <- iva$maxcls[iva$pval<=0.05] # maxcls (para obtermos o grupo)
iv <- iva$indcls[iva$pval<=0.05] # valor de indica??o
pv <- iva$pval[iva$pval<=0.05]   # valor de p
fr <- apply(spe>0, 2, sum)[iva$pval<=0.05]
fidg <- data.frame(group=gr, indval=iv, pvalue=pv, freq=fr) # fun??o para criar a planilha
fidg <- fidg[order(fidg$group, -fidg$indval),]
fidg
#Export the result to a CSV file (to be opened in a spreadsheet)
write.csv(fidg, "IndVal-das.csv") #para criar o arquivo excell na minha pasta - diret?rio



#Exerc?cio

va<-read.table("ambiente.txt") #abri o arquivo .txt
#cluster analysis
# 1.3 - Single linkage agglomerative clustering
library(vegan)

# 1.4 - Complete-linkage agglomerative clustering

# 1.5 - UPGMA agglomerative clustering
#UPGMA = Unweighted Pair-Group Method using arithmetic Averages


# 1.6 - Ward's minimum variance clustering

# 1.7 - Cophenetic correlation


# 1.8 - Shepard-like diagrams
#Para real?ar a rela??o entre uma matriz de dist?ncia e uma matriz cofen?tica, podemos
#utilizar o diagrama de Shepard plotando as dist?ncias originais com as cofen?ticas.


# 1.9 - Gower (1983) distance
#O m?todo de agrupamento que produzir a mais baixa dist?ncia de Gower pode ser 
#visto como aquele que gera o melhor modelo de agrupamento da matriz de dist?ncia.

#------------------------------------------------------------------------------------------------------------------------------------------------------------------