Кластерный анализ в R (hclust): как определить, какая переменная управляет кластерами

#r #cluster-analysis #hierarchical-clustering #dendrogram #hclust

#r #кластерный анализ #иерархический-кластеризация #дендрограмма #hclust

Вопрос:

Я использую hclust для выполнения кластерного анализа данных о растительном покрове по участкам отбора проб.

В моем исследовании наблюдался процентный охват 55 видов на 100 участках. Растительный покров на каждом участке измерялся в классах покрытия 0-4, где 0 отсутствует, «1» — 1-25% покрытия … «4» — 76-100% покрытия.

Я использую евклидово расстояние для измерения различий в охвате видов между сайтами, и я хочу знать, какие виды растений определяют группировку каждой ветви дендрограммы. Смотрите Пример df amp; code ниже; каждая строка представляет сайт.

В упрощенном примере я вижу, что sp1 управляет ассоциацией сайтов 3 и 4. В моем очень большом наборе данных, как я мог определить, какие виды управляют ассоциациями на разных уровнях моей дендрограммы?

Пожалуйста, дайте мне знать, если я смогу уточнить. Спасибо за вашу помощь!

 library(tidyverse)

site <- c(1:10)
sp1 <- c(0,1,4,4,3,3,2,1,0,2)
sp2 <- c(4,3,0,0,2,2,3,2,1,3)
sp3 <- c(3,2,1,1,2,2,3,2,1,3)
sp4 <- c(2,4,1,0,1,2,3,4,3,1)
df <- data.frame(site, sp1, sp2, sp3, sp4)

species <- select(df, sp1:sp4)

dend <- species %>% 
  dist(method = "euclidean") %>% 
  hclust(method = "ward.D") %>% 
  as.dendrogram()

plot(dend, ylab = "Euclidan Distance")
 

Комментарии:

1. Не уверен насчет конкретных ветвей дендрограммы, но для различий в кластерах этот вопрос может быть полезен. Это для k-средних, но принцип тот же.

2. Спасибо! Кажется, что ANOVA — это правильный путь, но я немного слаб в своем понимании того, что я должен вводить в ANOVA; будет ли это евклидова матрица расстояний?

3. Никаких проблем. Я бы сказал, что идея состоит в том, чтобы сделать несколько ANOVA, каждый раз с одним признаком, который в вашем случае является каждым из видов (учитывая дискретный характер ваших данных, вы также можете попробовать тест хи-квадрат вместо этого).

Ответ №1:

Продолжение: я закончил тем, что назначил сайты в каждом кластере произвольной ассоциативной группе, а затем запустил анализ видов индикаторов для ассоциативной группы с использованием функции multipatt из indicspecies. Это позволило мне определить виды, которые в значительной степени способствовали кластеризации различных групп.

 clusters <- df %>% mutate(Association = 
                  case_when(site %in% c(3, 4)~1, 
                            site %in% c(2, 8, 9)~2, 
                            site %in% c(1, 5, 6, 7, 10)~3))

abundance = clusters[2:5]
association = clusters$Association

indicator_r.g = multipatt(abundance, association, func = "r.g", control = how(nperm=9999))
summary(indicator_r.g)


Multilevel pattern analysis
 ---------------------------

 Association function: r.g
 Significance level (alpha): 0.05

 Total number of species: 4
 Selected number of species: 4 
 Number of species associated to 1 group: 3 
 Number of species associated to 2 groups: 1 

 List of species associated to each combination: 

 Group 1  #sps.  1 
    stat p.value  
sp1 0.82  0.0193 *

 Group 2  #sps.  1 
     stat p.value  
sp4 0.832  0.0161 *

 Group 3  #sps.  1 
     stat p.value  
sp3 0.781  0.0317 *

 Group 2 3  #sps.  1 
     stat p.value  
sp2 0.844  0.0293 *
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1