Ищете анализ, который кластеров, как SIMPROF, но допускает много наблюдений по категориям - PullRequest
0 голосов
/ 18 апреля 2019

Мне нужно выполнить кластеризацию или анализ сходства некоторых биологических данных, и я ищу вывод, подобный тому, который дает SIMPROF.Он же дендрограмма или иерархический кластер.

Однако у меня 3200 наблюдений / строк на группу.SIMPROF, см. Пример здесь,

library(clustsig)
usarrests<-USArrests[,c(1,2,4)]
rownames(usarrests)<-state.abb
# Run simprof on the data
res <- simprof(data= usarrests, 
               method.distance="braycurtis")
# Graph the result
pl.color <- simprof.plot(res)

, кажется, ожидает только одно наблюдение на группу (штат США в этом примере).Теперь, опять же, мои биологические данные (всего 140 тыс. Строк) имеют около 3200 наблюдений за группу.Я пытаюсь объединить группы, которые имеют похожее представление в представленных переменных.Как и в приведенном выше примере, AK будет представлен более чем одним наблюдением.Какой мой лучший выбор для функции / пакета / анализа?

Приветствия, Мо


Пример из статьи:

Simprof example

1 Ответ

0 голосов
/ 21 апреля 2019

Решение стало очевидным после дальнейшего размышления.

Вместо того чтобы использовать все наблюдения (200k) в длинном формате, я сделал долготу и глубину выборки в одну переменную, использовав ее как единицы выборки вдоль разреза. Таким образом, заканчивая 3800 столбцами комбинаций долготы и глубины и 61 строкой для таксонов, при этом переменная-значение представляет собой изобилие таксонов (если вы хотите кластеризовать единицы выборки, то вы должны транспонировать df). Это тогда выполнимо для hclust или SIMPROF, поскольку теперь квадратичная сложность применима только к 61 строке (в отличие от ~ 200k, как я пытался вначале).

Приветствия

Вот код:

library(reshape2)
library(dplyr)

d4<-d4 %>% na.omit() %>% arrange(desc(LONGITUDE_DEC))

# make 1 variable of longitude and depth that can be used for all taxa measured, like 
#community ecology sampling units
d4$sampling_units<-paste(d4$LONGITUDE_DEC,d4$BIN_MIDDEPTH_M)

d5<-d4 %>% select(PREDICTED_GROUP,CONCENTRATION_IND_M3,sampling_units)
d5<-d5%>%na.omit()

# dcast data frame so that you get the taxa as rows, sampling units as columns w
# concentration/abundance as values.
d6<-dcast(d5,PREDICTED_GROUP ~ sampling_units, value.var = "CONCENTRATION_IND_M3")

d7<-d6 %>% na.omit()
d7$PREDICTED_GROUP<-as.factor(d7$PREDICTED_GROUP)

# give the rownames the taxa names
rownames(d7)<-paste(d7$PREDICTED_GROUP)

#delete that variable that is no longer needed
d7$PREDICTED_GROUP<-NULL

library(vegan)

# calculate the dissimilarity matrix with vegdist so you can use the sorenson/bray 
#method
distBray <- vegdist(d7, method = "bray") 

# calculate the clusters with ward.D2
clust1 <- hclust(distBray, method = "ward.D2")
clust1

#plot the cluster dendrogram with dendextend
library(dendextend)
library(ggdendro)
library(ggplot2)

dend <- clust1 %>% as.dendrogram %>%
  set("branches_k_color", k = 5) %>% set("branches_lwd", 0.5)  %>%  set("clear_leaves") %>% set("labels_colors", k = 5)  %>% set("leaves_cex", 0.5) %>%
  set("labels_cex", 0.5)
ggd1 <- as.ggdend(dend)
ggplot(ggd1, horiz = TRUE)
...