Criação de dendrograma no R
Reprodução dos scripts do capitulo 9 do livro texto
Visualização de um dendrograma
O dendrograma é um diagrama de árvore que exibe os grupos formados por agrupamento (clustering) de observações em cada passo e em seus níveis de similaridade.
Utilizando a base de dados Carros para calcular o agrupamento
#data(USArrests)
carros<- read.csv("C:/Users/Clevia/Documents/multivariada 2/carros.txt", sep = "")Definindo a distância de hierarquia dos clusters
dd <- dist(scale(carros), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")Instalação e carregamento dos pacotes para visualização e manipulação do dendrograma
install.packages(c("factoextra", "dendextend"))
install.packages("igraph")Usando a função fviz_dend() do pacote factoextra é possivel criar facilmente um dendograma também há a opção de desenhar dendrogramas circulares e árvores filogenéticas
library(factoextra)
fviz_dend(hc, cex = 0.5)Usando os argumentos main, sub, xlab, ylab para mudar o título do gráfico e demais rótulos
fviz_dend(hc, cex = 0.5,
main = "Dendrogram - ward.D2",
xlab = "Objects", ylab = "Distance", sub = "")Dendrograma horizontal
fviz_dend(hc, cex = 0.5, horiz = TRUE)Também é possível cortar a árvore em uma determinada altura para particionar os dados em vários grupos é possível colorir ramificações por grupos e adicionar retângulos ao redor de cada grupo.
fviz_dend(hc, k = 4, # cortando em 4 grupos
cex = 0.5, # tamanho do rótulo
k_colors = c("#2E9FDF", "#c066c0", "#E7B800", "#FC4E07"),
color_labels_by_k = TRUE, # cores por grupo
rect = TRUE, # Adicionar retângulo ao redor dos grupos
rect_border = c("#2E9FDF", "#cc84cc", "#E7B800", "#FC4E07"),
rect_fill = TRUE)para mudar o tema do gráfico usamos o argumento ggtheme cojos valores possíveis incluem os temas oficiais do ggplot2, theme_gray(), theme_bw(), theme_minimal(), theme_classic(), theme_void()
fviz_dend(hc, k = 4, # corte em 4 grupos
cex = 0.5, # tamanho do rótulo
k_colors = c("#2E9FDF", "#c066c0", "#E7B800", "#FC4E07"),
color_labels_by_k = TRUE, # cores por grupo
ggtheme = theme_gray() #mudar tema
)Também podemos usar uma paleta de cores, neste a caso foi usado a paleta “jco” (revista de oncologia clínica)
fviz_dend(hc, cex = 0.5, k = 4, # corte em 4 grupos
k_colors = "jco")Se você precisa desenhar um dendrograma horizontal com retângulos em volta dos agrupamentos
fviz_dend(hc, k = 4, cex = 0.4, horiz = TRUE, k_colors = "jco",
rect = TRUE, rect_border = "jco", rect_fill = TRUE)É possível fazer um dendrograma circular com o comando type = “circular”.
fviz_dend(hc, cex = 0.5, k = 4,
k_colors = "jco", type = "circular")para uma árvore filogenéticatree, use type = “phylogenic” e repel = TRUE ( para evitar sobreposição de rótulos).
Essa função requer o pacote igraph.
require("igraph")
fviz_dend(hc, k = 4, k_colors = "jco",
type = "phylogenic", repel = TRUE)O layout padrão para árvores filogenéticas é “layout.auto”. Outros layouts possíveis: (“layout.auto”, “layout_with_drl”, “layout_as_tree”, “layout.gem”, “layout.mds”,“layout_with_lgl”).
Para phylo.layout = “layout.gem”
require("igraph")
fviz_dend(hc, k = 4,
k_colors = "jco",
type = "phylogenic", repel = TRUE,
phylo_layout = "layout.gem")Caso de dendrograma com grandes conjuntos de dados
Se você calcular o clustering hierárquico em um grande conjunto de dados, talvez queira aumentar o zoom o dendrograma ou para plotar apenas um subconjunto do dendrograma. Alternativamente, você também pode plotar o dendrograma em uma página grande em um PDF, que pode ser ampliado sem perda de resolução.
Zoom no dendrograma
Se você deseja ampliar os primeiros clusters, é possível usar a opção xlim e ylim para limitar a área do lote. Por exemplo, digite o código abaixo:
fviz_dend(hc, xlim = c(1, 20), ylim = c(1, 8))Plotando uma sub-árvore de dendrogramas
Crie um gráfico de todo o dendrograma e extraia os dados do dendrograma
dend_plot <- fviz_dend(hc, k = 4, # corte em 4 grupos
cex = 0.5,
k_colors = "jco"
)
dend_data <- attr(dend_plot, "dendrogram") # extração dos dados do dendogramaCorte do dendrograma na altura h = 10
dend_cuts <- cut(dend_data, h = 10)Visualize a versão truncada contendo dois ramos.
fviz_dend(dend_cuts$upper)Plotando todo o dendrograma
print(dend_plot)Plot sub-arvore 1
fviz_dend(dend_cuts$lower[[1]], main = "Subtree 1")Plot sub-arvore 2
fviz_dend(dend_cuts$lower[[2]], main = "Subtree 2")Fazendo um gráfico circular
fviz_dend(dend_cuts$lower[[2]], type = "circular")Salvando o dendrograma em uma página PDF grande
pdf("dendrogram.pdf", width=30, height=15) # Open a PDF
p <- fviz_dend(hc, k = 4, cex = 1, k_colors = "jco" ) # Do plotting
print(p)
dev.off() # Close the PDF## png
## 2
Manipulando dendrogramas usando dendextend
library(dendextend)
dend <- carros[1:5,] %>% # dados
scale %>% # escala dos dados
dist %>% # calcular uma matriz de distância,
hclust(method = "ward.D2") %>% # Hierarchical clustering
as.dendrogram # Transformando o objeto em um dendrograma.
plot(dend)Exemplo
library(dendextend)1.criando um dendrograma customizado
mycols <- c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07")
dend <- as.dendrogram(hc) %>%
set("branches_lwd", 1) %>% # Largura da linha de ramificações
set("branches_k_color", mycols, k = 4) %>% # Ramos de cores por grupos
set("labels_colors", mycols, k = 4) %>% # Etiquetas de cores por grupos
set("labels_cex", 0.5) # Alterar o tamanho da etiqueta2. criando o gráfico
fviz_dend(dend)