R rect.hclust: прямоугольники слишком высоки на дендограмме - PullRequest
1 голос
/ 17 марта 2019

Я попросил несколько разных экспертов отсортировать 92 объекта по их сходству.Основываясь на их ответах, я построил матрицу различий 92 x 92.в R я изучил эту матрицу с помощью следующих команд:

cluster1 <- hclust(as.dist(DISS_MATRIX), method = "average") 
plot(cluster1, cex=.55)

Чтобы выделить кластеры, я хотел нарисовать вокруг них прямоугольники:

rect.hclust(cluster1, k = 3, border = "red")

Результат выглядит следующим образом:

enter image description here

Однако, когда объекты имеют более длинные имена («AAAAAAAAAAAAAAAA43» вместо «A43»), форматирование отключается:

rownames(DISS_MATRIX) <- paste0(rep("AAAAAAAAAAAAAAAAAAAAAAAAAAAA",92),1:92)
colnames(DISS_MATRIX) <- paste0(rep("AAAAAAAAAAAAAAAAAAAAAAAAAAAA",92),1:92)
cluster1 <- hclust(as.dist(DISS_MATRIX), method = "average") 
plot(cluster1, cex=.55)
rect.hclust(cluster1, k = 3, border = "red")

Это видно по полученной дендограмме.

enter image description here

Кажется, что прямоугольники сдвинулись до конца дендограммы.Не хорошо.Я предполагаю, что этот сбой произошел из-за длинных имен 92 объектов в матрице различий.Это также может показаться не очень актуальным.Просто убедитесь, что ваши объекты имеют достаточно короткие имена.

Однако по разным причинам я хочу, чтобы мои объекты имели свои оригинальные (то есть, допустимо длинные) имена.Этот график предназначен для презентации, и поэтому я не хочу работать с кодами.Я также не хочу использовать какой-либо другой пакет, поскольку я нахожу, что hclust довольно прост в использовании.Тем не менее, я не нахожу никакого способа позиционирования прямоугольников внутри команды rect.hclust.Следовательно, что я могу сделать, чтобы расположить прямоугольники в дендограмме, даже если имена объектов длинные?Благодарю.

1 Ответ

1 голос
/ 19 марта 2019

Вы написали, что «я также не хочу использовать какой-либо другой пакет, поскольку я обычно нахожу hclust довольно простым в использовании».

Хотя hclust отлично подходит для создания объекта иерархической кластеризации, он не поддерживает многое с точки зрения построения графиков. Как только вы получите вывод hclust, лучше поменять его на дендрограмму (используя as.dendrogram) для визуализаций (так как он лучше подходит для этого). Нет способа сделать то, что вы хотите, без использования сложного кода, который упакован в пакет, это лучший способ (IMHO) для вас двигаться вперед. (Я знаю, потому что я написал rect.dendrogram и потребовалось много работы , чтобы заставить работать так, как вы хотите)

Пакет dendextend R предоставляет множество функций для манипулирования и визуализации дендрограмм (см. виньетка здесь ). В частности, функция rect.dendrogram может обрабатывать такие случаи, о которых вы спрашивали (имея длинные метки). Например (для забавы я добавил color_branches и color_labels):

library(dendextend)
hc <- mtcars[, c("mpg", "disp")] %>% dist %>% hclust(method = "average") 
dend <- hc %>% as.dendrogram %>% hang.dendrogram
# let's make the text longer
labels(dend)[1] <- "AAAAAAAAAAAAAAAAAAAAA"

par(mar = c(15,2,1,1))
dend %>% color_branches(k=3) %>% color_labels(k=3) %>% plot
dend %>% rect.dendrogram(k=3)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...