3

Я собираю матрицу расстояний, основанную на данных столбца с размером столбцов 20 000 строк x 169, установленных в R, используя hclust(). Когда я конвертирую объект кластера в дендрограмму и рисую всю дендрограмму, ее трудно прочитать, потому что она настолько велика, даже если я вывожу ее в довольно большой pdf.R-график верхнего дендрограмма на основе k

df <- as.data.frame(matrix(abs(rnorm(3380000)), nrow = 20000)) 
mydist <- vegdist(df) 
my.hc <- hclust(mydist, method = "average") 
hcd <- as.dendrogram(my.hc) 

pdf("hclust_plot.pdf", width = 40, height = 15) 
plot(hcd) 
dev.off() 

Я хотел бы указать количество кластеров (К), при котором для усечения дендрограммы, затем участок только верхнюю часть дендрограммы выше точек к расщепленных. Я знаю, что я могу построить верхнюю часть, основываясь на задании высоты (h) с помощью функции cut().

pdf("hclust_plot2.pdf", width = 40, height = 15) 
plot(cut(hcd, h = 0.99)$upper) 
dev.off() 

Я также знаю, что могу использовать пакет dendextend окрашивать дендрограммы участка с к группам.

library(dendextend) 
pdf("hclust_plot3.pdf", width = 40, height = 15) 
plot(color_branches(hcd, k = 44)) 
dev.off() 

Но для моего набора данных эта дендрограмма слишком плотная, чтобы даже прочитать, какая группа является цветом. Есть ли способ построить только верхнюю часть дендрограммы над точкой разреза, указав k, а не h? Или есть способ получить значение h для дендрограммы, учитывая k?

+0

Не вдаваясь слишком глубоко в это, данный проект может представлять интерес для Вас : https://github.com/thomasp85/ggraph – boshek

+1

Это S O вопрос предлагает вам немного, и, кажется, ссылки на пакет dendenxtend: http://stackoverflow.com/questions/31124810/r-cut-dendrogram-into-groups-with-minimum-size – lawyeR

ответ

0

Вы можете использовать функцию heights_per_k.dendrogram от the dendextend package, чтобы получить высоту для различных k разрезов.

Например:

## Not run: 
hc <- hclust(dist(USArrests[1:4,]), "ave") 
dend <- as.dendrogram(hc) 

library(dendextend) 
dend_h <- heights_per_k.dendrogram(dend) 
par(mfrow = c(1,2)) 
plot(dend) 
plot(dend, ylim = c(dend_h["3"], dend_h["1"])) 

enter image description here

А в вашем случае:

set.seed(2016-01-16) 
df <- as.data.frame(matrix(abs(rnorm(2*20000)), nrow = 20000)) 
mydist <- dist(df) 
my.hc <- hclust(mydist, method = "average") 
hcd <- as.dendrogram(my.hc) 

library(dendextend) 
library(dendextendRcpp) 
dend_h <- heights_per_k.dendrogram(hcd) # (this can take some time) 
plot(hcd, ylim = c(dend_h["43"], dend_h["1"])) 

enter image description here

+0

Спасибо за вашу помощь , Я знаю, как окрашивать ветви с помощью color_branches(), но знаете ли вы, как я могу пометить эти ветви, чтобы я мог прочитать, какая именно группа? – jk22

+0

Используйте параметр «groupLabels = TRUE» в color_branches –

+0

Спасибо @Tal Когда я пытаюсь «d1 <- color_branches (hcd, k = 43, groupLabels = TRUE)», тогда «plot (d1, ylim = c (dend_h [" 43 "], dend_h [" 1 "])) 'Некоторые ярлыки не отображаются, я полагаю, потому что они ниже самой низкой высоты. Есть ли способ контролировать, где появляются эти ярлыки? – jk22

 Смежные вопросы

  • Нет связанных вопросов^_^