#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