Beruflich Dokumente
Kultur Dokumente
CENTRO DE CIÊNCIAS
DEPARTAMENTO DE ESTATÍSTICA E MATEMÁTICA APLICADA
ESTATÍSTICA
ANÁLISE DE AGRUPAMENTOS
FORTALEZA
2017
Sumário
Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 CRITÉRIOS DE PARECENÇA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1 Coeficientes de Parecença para Variáveis Quantitativas . . . . . . . . . . . . . . . 5
2.1.1 Distância Euclidiana (DE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2 Distância Euclidiana Média (DEM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.3 Distância Euclidiana Padronizada (DEP) . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.4 Distância Euclidiana Generalizada ou Ponderada (DEG) . . . . . . . . . . . . . . . . . 5
2.1.5 Distância de Minkowsky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.6 Coeficiente de Similaridade de Cattel . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Coeficientes de Parecença para Variáveis Qualitativas . . . . . . . . . . . . . . . 6
2.2.1 Distância Euclidiana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.2 Coeficiente de Concordância Simples . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3 Coeficientes de Parecença para Variáveis Mistas . . . . . . . . . . . . . . . . . . . 6
2.3.1 Coeficiente Combinado de Semelhança . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 FORMANDO OS AGRUPAMENTOS . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1 Métodos Hierárquicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.1 Método de Ligação Simples (Vizinho Mais Próximo) . . . . . . . . . . . . . . . . . . . 8
3.1.2 Método de Ligação Completa (Vizinho Mais Longe) . . . . . . . . . . . . . . . . . . . 8
3.1.3 Método das Médias das Distâncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.4 Método da centróide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.5 Método de Ward (ou Mı́nima Variância) . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 Métodos de Partição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.1 Método das K-médias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5 EXERCÍCIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.1 Manly - Capı́tulo 9, Exercı́cio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.2 Representação gráfica inicial dos dados . . . . . . . . . . . . . . . . . . . . . . . . 13
5.3 Análise de Agrupamento - hierárquico . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.3.1 Método do vizinho mais próximo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.3.2 Método do vizinho mais longe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.3.3 Método da centróide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.3.4 Método das médias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.3.5 Método de ward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.4 Análise de Agrupamento - Partição . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.4.1 Médodo das k-médias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.5 Análise de agrupamento utilizando componentes principais . . . . . . . . . . . . 18
5.5.1 Função HCPC - Agrupando espécies . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.5.2 Função HCPC - Agrupando lotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.6 Validação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.6.1 Coeficiente de correlação cofenética . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.6.2 Índices Externos - Rand e Jaccard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6 REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
7 ANEXOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1 Introdução
2. Definir o número de grupos: pode ser definido a priori, por conveniência do tipo de análise ou a
posteriori.
3. Formar os grupos: aqui será definido qual algoritmo adotar para a identificação dos grupos
(métodos hierárquicos ou de partição).
5. Interpetar os grupos: fazer a descrição de cada grupo presente no estudo (aconselha-se o uso da
análise descritiva).
Os critérios de parecença são formados por medidas de similaridade (ou dissimilaridade), onde por
meio destas é possı́vel avaliar o quão próximos (ou distante) estão dois pontos do espaço, e portanto
identificar se os mesmos podem (ou não) participar do mesmo grupo.
Os algoritmos utilizados na formação dos agrupamentos, em sua grande maioria, podem ser clas-
sificados em duas grandes famı́lias: Hierárquicos e De Partição. A definição destes será visto mais
adiante.
2 Critérios de Parecença
d2 : DEP.
r
b+d
d(Xl , Xk ) = (2.7)
m
a+d
s(Xl , Xk ) = (2.8)
m
wi : peso a ser atribuı́do a cada tipo de variável (normalmente é a quantidade de variáveis presente em
cada tipo de variável); cx : coeficiente de parecença de mesmo sentido (similaridade ou dissimilaridade).
3 Formando os Agrupamentos
A maioria dos algoritmos utilizados na formação dos agrupamentos pode ser classificada em duas
famı́lias: hierárquicos e de partição.
Entretanto a fusão é feita da mesma forma do método anterior, ou seja, com os grupos mais parecidos
(menor distância).
p(2) = oi (2) : 1 ≤ i ≤ n2
...
p(k) = oi (k) :≤ i ≤ nk
A centróide do grupo j é formada pela média das coordenadas dos seus membros (ō(j)). Logo, a soma
dos quadrados residual dentro do j-ésimo grupo é
X
SQRes(j) = d2 (oi (j); ō(j))[1 ≤ i ≤ nj ], onde (3.5)
Quanto menor for o SQRes, mais homogêneo será o grupo, e melhor será a partição.
O primeiro passo é a escolha inicial das sementes do agrupamentos (centróides). Feito isso, as
distâncias de cada elemento em relação às sementes escolhidas são calculadas e cada elemento é
designado à centróide com menor distância, assim é feito os agrupamentos iniciais. Então o grau
de homogeneidade é calculado, como mostrado anteriormente, e assim tem-se os primeiros nı́veis de
homogeneidade intra e entre os grupos. Estes passo são, então refeitos, buscando sempre os melhores
agrupamentos (com menor valor de SQRes).
4 Finalização da Análise de Agrupamentos
4.3 Interpretação
Após todos os procedimentos feitos é necessário caractezar os grupos formados de acordo com as
diferenças e semelhanças encontradas nos diferentes grupos. Deve-se, então, proceder com análises
descritivas e gráfico que ressaltem as afirmações construı́das.
5 Exercı́cio
Espécie Lote1 Lote2 Lote3 Lote4 Lote5 Lote6 Lote7 Lote8 Lote9
1 Festuca ovina 38 43 43 30 10 11 20 0 0
2 Anemone nemorosa 0 0 0 4 10 7 21 14 13
3 Stallaria holostea 0 0 0 0 0 6 8 21 39
4 Agrostis tenuis 10 12 19 15 16 9 0 9 28
5 Ranunculus ficaria 0 0 0 0 0 0 0 0 0
6 Mercurialis perennis 0 0 0 0 0 0 0 0 0
7 Poa pratenis 1 0 5 6 2 8 10 15 12
8 Rumex acetosa 0 7 0 10 9 9 3 9 8
9 Veronica chamaedrys 0 0 1 4 6 9 9 9 11
10 Dactylis glomerata 0 0 0 0 0 8 0 14 2
11 Fraxinus excelsior (juv.) 0 0 0 0 0 8 0 0 6
12 Saxifraga granulata 0 5 3 9 12 9 0 1 7
13 Deschampsia flexuosa 0 0 0 0 0 0 30 0 14
14 Luzula campestris 4 10 10 9 7 6 9 0 0
15 Plantago lanceolata 2 9 7 15 13 8 0 0 0
16 Festuca rubra 0 0 0 0 15 6 0 18 1
17 Hieracium pilosella 12 7 16 8 1 6 0 0 0
18 Geum urbanum 0 0 0 0 0 7 0 2 2
19 Lathyrus montanus 0 0 0 0 0 7 9 2 12
20 Campanula persicifolia 0 0 0 0 2 6 3 0 6
21 Viola riviniana 0 0 0 0 0 4 1 4 2
22 Hepatica nobilis 0 0 0 0 0 8 0 4 0
23 Achillea millefolium 1 9 16 9 5 2 0 0 0
24 Allium sp. 0 0 0 0 2 7 0 1 0
25 Trifolim repens 0 0 6 14 19 2 0 0 0
Tabela 2 – Dados do Exercı́cio 1
Espécie Lote10 Lote11 Lote12 Lote13 Lote14 Lote15 Lote16 Lote17
1 Festuca ovina 5 4 1 1 0 0 0 0
2 Anemone nemorosa 19 20 19 6 10 12 14 21
3 Stallaria holostea 31 7 12 0 16 11 6 9
4 Agrostis tenuis 8 0 4 0 0 0 0 0
5 Ranunculus ficaria 0 13 0 0 21 20 21 37
6 Mercurialis perennis 0 1 0 0 0 11 45 45
7 Poa pratenis 15 4 5 6 7 0 0 0
8 Rumex acetosa 9 2 5 5 1 7 0 0
9 Veronica chamaedrys 11 6 5 4 1 7 0 0
10 Dactylis glomerata 14 3 9 8 7 7 2 1
11 Fraxinus excelsior (juv.) 5 4 7 9 8 8 7 6
12 Saxifraga granulata 4 5 1 1 1 3 0 0
13 Deschampsia flexuosa 3 8 0 3 3 0 0 0
14 Luzula campestris 2 1 0 2 0 1 0 0
15 Plantago lanceolata 0 0 0 0 0 0 0 0
16 Festuca rubra 9 0 0 2 0 0 0 0
17 Hieracium pilosella 0 0 0 0 0 0 0 0
18 Geum urbanum 1 0 7 9 2 3 8 7
19 Lathyrus montanus 6 3 8 0 0 0 0 0
20 Campanula persicifolia 5 3 9 3 2 7 0 0
21 Viola riviniana 9 6 8 4 1 6 0 0
22 Hepatica nobilis 6 2 10 6 0 2 7 0
23 Achillea millefolium 0 0 0 0 0 0 0 0
24 Allium sp. 3 1 6 8 2 0 7 4
25 Trifolim repens 0 0 0 0 0 0 0 0
Tabela 3 – Dados do Exercı́cio 1
As tabelas acima mostram aonde aonde cada objeto foi alocado e quantos elementos possui cada
grupo.
Agrupamento Coeficiente
Espécies 0,8004
Lotes 0,7661
Tabela 8 – Coeficientes de correlação
Os ı́ndices encontrados foram altos (todos acima de 60%), indicando um bom agrupamento.
6 Referências
1. BARROSO, Lúcia P.; ARTES, Rinaldo. Análise Multivariada. São Paulo. Insper/SQ, 2003.
2. BUSSAB, Wilton de O.; MIAZAKI, Édina S.; ANDRADE, Dalton F de. Introdução à Análise
de Agrupamentos. 9o Simpósio Brasileiro de Probabilidade e Estatı́stica. IME-SP, 1990.
# Dados
setwd("O:/seminario")
dad=read.csv2("bd seminario.csv")
attach(dad)
dad
#nomes
nomes.especies=as.character(dad[,1])
Lot=0
for(i in 1:17){
Lot[i]=paste("Lote",i)
}
nomes.lotes=Lot
matriz_dist1=dist(mat1)
matriz_dist2=dist(mat2)
matriz_dist=as.matrix(matriz_dist)
colnames(matriz_dist)=gl(25,1)
a=cbind(matriz_dist[,1:13],nomes.especies[1:13],c(matriz_di
st[14:25],0),c(nomes.especies[14:25],0))
knitr::kable(a, format = "latex",
format.args = list(decimal.mark = ’,’, big.mark = "’"),
digits=2,caption="Matriz de dist^
ancias - Espécies")
# Análise de agrupamento
# Padronizaç~
ao
## padronizando
## agrupando Espécies
dad.novo=dad[,-1]
mat1=matrix(,ncol=17,nrow=25)
for(i in 1:17){
mat1[,i]=(dad.novo[,i]-mean(dad.novo[,i]))/sd(dad.novo[,i])
}
rownames(mat1)=nomes.especies
mat1
## padronizando
## agrupando lotes
dad.novo=dad.novo2
mat2=matrix(,ncol=25,nrow=17)
for(i in 1:25){
mat2[,i]=(dad.novo[,i]-
mean(dad.novo[,i]))/sd(dad.novo[,i])
}
rownames(mat2)=nomes.lotes
mat2
require(cluster)
# métodos Hierárquicos
# h clust
par(mfrow=c(1,2))
# vizinho mais longe
# Agrupando Espécies
hc <- hclust(dist(mat1), method = "complete")
plot(hc,hang=-1,xlab="Espécies",ylab = "Dist^
ancia",main = "Dendograma")
#Escolhendo 4 grupos
rect.hclust(hc,k=5)
# Outra forma é utilizando a dist^
ancia
rect.hclust(hc,h=10)
# Agrupando Lotes
hc <- hclust(dist(mat2), method = "complete")
plot(hc,hang=-1,xlab="Lote",ylab = "Dist^
ancia",main = "Dendograma")
#Escolhendo 4 grupos
rect.hclust(hc,k=4,border=11)
par(mfrow=c(1,2))
# vizinho mais próximo
# Agrupando Espécies
hc <- hclust(dist(mat1), method = "single")
plot(hc,hang=-1,xlab="Espécies",ylab = "Dist^
ancia",main = "Dendograma")
#Escolhendo 4 grupos
rect.hclust(hc,k=5)
# Outra forma é utilizando a dist^
ancia
#rect.hclust(hc,h=10)
# Agrupando Lotes
hc <- hclust(dist(mat2), method = "single")
plot(hc,hang=-1,xlab="Lote",ylab = "Dist^
ancia",main = "Dendograma")
#Escolhendo 4 grupos
rect.hclust(hc,k=4,border=11)
par(mfrow=c(1,2))
# centróid
# Agrupando Espécies
hc <- hclust(dist(mat1), method = "centroid")
plot(hc,hang=-1,xlab="Espécies",ylab = "Dist^
ancia",main = "Dendograma")
#Escolhendo 5 grupos
rect.hclust(hc,k=5)
# Outra forma é utilizando a dist^
ancia
#rect.hclust(hc,h=10)
# Agrupando Lotes
hc <- hclust(dist(mat2), method = "centroid")
plot(hc,hang=-1,xlab="Lote",ylab = "Dist^
ancia",main = "Dendograma")
#Escolhendo 4 grupos
rect.hclust(hc,k=4,border=11)
par(mfrow=c(1,2))
# Média
# Agrupando Espécies
hc <- hclust(dist(mat1), method = "average")
plot(hc,hang=-1,xlab="Espécies",ylab = "Dist^
ancia",main = "Dendograma")
#Escolhendo 4 grupos
rect.hclust(hc,k=5)
# Outra forma é utilizando a dist^
ancia
#rect.hclust(hc,h=10)
# Agrupando Lotes
hc <- hclust(dist(mat2), method = "average")
plot(hc,hang=-1,xlab="Lote",ylab = "Dist^
ancia",main = "Dendograma")
#Escolhendo 4 grupos
rect.hclust(hc,k=4,border=11)
par(mfrow=c(1,2))
# Ward
# Agrupando Espécies
clust.word.esp=hc <- hclust(dist(mat1), method = "ward.D2");clust.word.esp
plot(clust.word.esp,hang=-1,xlab="Espécies",ylab = "Dist^
ancia",main = "Dendograma")
#Escolhendo 4 grupos
rect.hclust(clust.word.esp,k=5)
# Outra forma é utilizando a dist^
ancia
#rect.hclust(hc,h=10)
# Agrupando Lotes
clust.word.lotes <- hclust(dist(mat2), method = "ward.D2");clust.word.lotes
plot(clust.word.lotes,hang=-1,xlab="Lote",ylab = "Dist^
ancia",main = "Dendograma")
#Escolhendo 4 grupos
rect.hclust(hc,k=5,border=11)
# sobre a fun~
ao hclust
#ordem dos objetos
hc$order
#ordem dos objetos
hc$merge
# dist^
ancia
hc$dist.method
# método
hc$method
###________________________________
# métodos de Partiç~
ao
# kmeans
require(stats)
# Agrupando espécies
cl=kmeans(mat1,5)
grupos=cl$cluster
a=as.numeric(grupos)
#_________________________________
# Análise agrupamento utilizando componentes principais
# Funç~
ao HCPC
require(FactoMineR)
require(factoextra)
# funç~
oes para componentes principais
# prcomp pacote da base
cp.base=prcomp(dad[,2:17]);res.pca1
# Pacote FactoMineR
# Agrupando as espécies
# Componentes principais
# ncp=definindo que utilizaremos os 5 primeiros componentes principais
cp=PCA(mat1,ncp=6,graph=TRUE);cp
# Acumulada
cp$eig
xtable(cp$eig)
knitr::kable(cp$eig, format = "latex",
format.args = list(decimal.mark = ’,’, big.mark = "’"),
digits=4,caption="Componentes principais - Espécies")
# Funç~
ao HCPC
# cansol=T, consolidade pelo kmeans
# nb.clust se 0 é cortada pelo usuário
# nb.clust se -1 é cortada pelo algorı́timo automaticamente
# kk = número de cluster usados em um pré-processamento
Kmeans antes do agrupamento hierarquico
# Nota: Quando o kk é diferente de Inf(Default),
# n~
ao é possı́vel usar a consolidaç~
ao uma vez que o método kmeans
# já foi utilizado antes do agrupamento hierárquico.
cp.hcpc=HCPC(cp,method ="ward",graph=TRUE,consol=T,nb.clust=0)
cp.hcpc$data.clust
require(ggthemes)
# Dendograma
fviz_dend(cp.hcpc,cex=0.7,palette="jco",rect=T,rect_fill=T,
rect_border="jco",labels_track_height=0.8)
# Gráfico de mapa
fviz_cluster(res.hcpc,show.clust.cent=TRUE,palette="jco",gg
theme = theme_minimal(),main="Gráfico de mapa")
# Funç~
ao HCPC
# Agrupando as lotes
# Componentes principais
# ncp=definindo que utilizaremos os 5 primeiros componentes principais
cp=PCA(mat2,ncp=7,graph=TRUE);cp
# Acumulada
cp$eig
knitr::kable(cp$eig, format = "latex",
format.args = list(decimal.mark = ’,’, big.mark = "’"),
digits=4,caption="Componentes principais - Lotes")
# Funç~
ao HCPC
# cansol=T, consolidade pelo kmeans
# nb.clust se 0 é cortada pelo usuário
# nb.clust se -1 é cortada pelo algorı́timo automaticamente
# kk = número de cluster usados em um pré-processamento
Kmeans antes do agrupamento hierarquico
# Nota: Quando o kk é diferente de Inf(Default), n~
ao é
possı́vel usar a consolidaç~
ao uma vez que o método kmeans já
foi utilizado antes do agrupamento hierárquico
cp.hcpc=HCPC(cp,method
="ward",graph=TRUE,consol=T,nb.clust=0)
cp.hcpc$data.clust
require(ggthemes)
# Dendograma
fviz_dend(cp.hcpc,k=,cex=0.7,palette="jco",rect=T,rect_fill
=T,rect_border="jco",labels_track_height=0.8,,main="Dendogr
ama")
fviz_cluster(cp.hcpc,show.clust.cent=TRUE,palette="jco",ggt
heme = theme_minimal(),main="Gráfico de mapa")
# Validaç~
ao
# Espécies
#coeficiente de validaç~
ao cofenética (hierérquicos)
d1 <- dist(mat1)
d2 <- cophenetic(clust.word.esp)
cor1=cor(d1, d2)
d1 <- dist(mat2)
d2 <- cophenetic(clust.word.lotes)
cor2=cor(d1, d2)
xtable(t(cbind(cor1,cor2)),caption="Coeficientes de correlaç~
ao")
install.packages("clusteval")
require(clusteval)
# Espécies
## compara um uma análise de cluster "correta" à uma a ser testadada
# Lotes
## compara um uma análise de cluster "correta" à uma a ser testudada
mat2.lote_kmeans <- kmeans(mat2, centers = 4)$cluster
mat2.lote_hclust <- cutree(clust.word.lotes, k = 4)
b=cluster_similarity(mat2.lote_kmeans, mat2.lote_hclust);b
bb=cluster_similarity(mat2.lote_kmeans, mat2.lote_hclust,similarity = "rand");bb
c=cbind(rbind(a,aa),rbind(b,bb),c(5,4));c
colnames(c)=c("Especies","Lotes","Grupos")
rownames(c)=c("jaccard", "rand")
xtable(c,caption="Índice externo")
# Interpretaç~
ao
bd.esp=cbind(mat1,mat1.esp_hclust)
bd.lote=cbind(mat2,mat2.lote_hclust)
variáveis
attach(mat1)
tapply(Lote1, mat2.lote_hclust, summary)
require(stats)
groups <- as.factor(rbinom(32, n = 5, prob = 0.4))
tapply(groups, groups, length) #- is almost the same as
table(groups)