Я пытаюсь построить дендограмму с помощью Complete Linkage Method в R.
У меня есть набор данных как:
x1,x2,x3,x4,x5
0,0.5,2.24,3.35,3
0.5,0,2.5,3.61,3.04
2.24,2.5,0,1.12,1.41
3.35,3.61,1.12,0,1.5
3,3.04,1.41,1.5,0
До сих пор я пробовал этот код ниже и получил вывод, как показано на рисунке:
dt <- read.csv("cluster.csv")
df<-scale(dt(-1))
dc<-dist(df,method = "euclidean")
hc1 <- hclust(dc, method = "complete" )
plot(hc1, labels = NULL, hang = 0.1,
main = "Cluster dendrogram", sub = NULL,
xlab = NULL, ylab = "Height")
Теперь я хотел
постройте ось Y с фактическим значением значения, сгенерированного из расчет попарных расстояний между кластерами
постройте ось x с x1,x2,x3,x4,x5
Как я могу построить график, используя график, когда я изучаю R, и мне здесь препятствуют.
Редактировать:
Как упоминалось в ответе, я отредактировал labels как
labels = c("x1", "x2","x3","x4","x5")
и получил вывод как:
Теперь я хотел пометить ось Y как значение, рассчитанное как высота





Вы можете получить доступ к значениям, как показано ниже
dt <- read.csv("cluster.csv")
df<-scale(dt[-1]) # I had to use brackets here instead of parenthesis
dc<-dist(df,method = "euclidean")
hc1 <- hclust(dc, method = "complete" )
plot(hc1, labels = NULL, hang = 0.1,
main = "Cluster dendrogram", sub = NULL,
xlab = NULL, ylab = "Height")
str(hc1)
Возвращает:
List of 7
$ merge : int [1:4, 1:2] -1 -3 -5 1 -2 -4 2 3
$ height : num [1:4] 0.444 1.516 1.851 3.753
$ order : int [1:5] 1 2 5 3 4
$ labels : NULL
$ method : chr "complete"
$ call : language hclust(d = dc, method = "complete")
$ dist.method: chr "euclidean"
- attr(*, "class")= chr "hclust"
Как видите, нет векторов с пятью значениями, а это то, что вам нужно напрямую сопоставить с labels на вашем графике. Если вы знаете, как вычислить эти значения, просто поместите их в вектор из пяти элементов и поместите его после labels =, заменив текущий NULL.
Поскольку меры высоты в дендрограмме равны num [1:4] 0.444 1.516 1.851 3.753, но почему при расчете на бумаге значения разные? У меня есть значение как: 0.5, 1.12, 1.5, 3.61
Я потерял на этом. Я перезапустил его с разными методами для расстояний (stat.ethz.ch/R-manual/R-devel/library/stats/html/dist.html) и для кластеризации (stat.ethz.ch/R-manual/R-patched/library/stats/html/hclust.html), но все результаты были выше, чем у вас.
я опубликую это в отдельном вопросе! поскольку я получил свой ответ на вышеуказанный вопрос.
Здорово! Вместо этого рассмотрите возможность перекрестной проверки (больше статистики)
Привет! можете ли вы помочь мне обозначить точное полученное значение на линии оси Y?
Это не должно быть слишком сложно после того, как вы создали пятиэлементный вектор со значениями (остальное см. в разделе sthda.com/english/wiki/add-text-to-a-plot-in-r-software). Типа: text(x, y, your_vector, cex=0.65, pos=3, col = "grey")
Потрясающий! Один готов. Ось Y уже имеет высоту. Вектор
heightвыглядит следующим образом:num [1:4] 0.444 1.516 1.851 3.753. Таким образом, он колеблется от 0 до 4. Это то, что сейчас находится на оси Y. Для большей детализации вы можете добавитьabline(h = hc1$height, lty = 2, col = "lightgrey").