Неопределенность в кластеризации

Я применяю иерархическую кластеризацию к своему набору данных, который включает 30 исследований. Пример моего набора данных:

   X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
1  2  2  7  7  0  0  0  0  0  0  0   0   0   0   0
2  0  5  37 27 5  1  2  2  2  2  1   1   1   0   0
                      :
                      :
30 0  0  3  1  2  5  7  0  0  0  0   0   0   0   0

Я использовал следующий код, чтобы применить версию теста Колмогорова-Сминрова с начальной выборкой для вычисления матрицы расстояний d и применил алгоритм «полной связи».

p <- outer(1:30, 1:30, Vectorize(function(i,j)
  {ks.boot(as.numeric(rep(seq(0,14,1),as.vector(test[i,]))),
           as.numeric(rep(seq(0,14,1),as.vector(test[j,]))),nboots=10000)
              $ks.boot.pvalue}))
d <- as.dist(as.matrix(1-p))

hc1 <- hclust(d,method = "complete")
plot(hc1)

Это выборка 10 000 (KS) p-значений между каждым исследованием. Итак, для s1 и s2, s1 и s3.... s1 и s30, s2 и s3.... s 29 и s30 и сохраняет вероятности в матрицу 30 x 30.

Если я повторю этот процесс, просто перезапустив код и сохранив p-значения в другой переменной и построив дендрограмму, то я получу немного другую дендрограмму с некоторыми исследованиями, изменяющими положение. Я прикрепил несколько примеров

Некоторые различия очень трудно визуализировать, но немного меняется высота и положение больших скоплений. Меня интересуют два типа неопределенностей: неопределенности из-за начальной выборки, которую пытаются показать дендрограммы.

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

Я также проверил пакет pvclust для иерархической кластеризации, но я не думаю, что он применим, когда я использую загрузку KS.

D1

D2

D3




Ответы (1)


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

Вот пример использования набора данных Iris и этого пакета R: https://github.com/sgibb/bootstrap

library(bootstrap)
library(dplyr)

set.seed(1)
data(iris)
rownames(iris) <- paste0(iris$Species, ".", 1:nrow(iris))
iris <- iris %>% sample_n(25) %>% dplyr::select(-Species) %>% data.matrix

createHclustObject <- function(x)hclust(dist(x), "ave")
b <- bootstrap(iris, fun=createHclustObject, n=1000L)

hc <- createHclustObject(iris)
plot(hc)
bootlabels.hclust(hc, b, col="blue")

введите здесь описание изображения

Смотрите также:

http://www.pnas.org/content/93/23/13429 (Оригинал?) Документ PNAS, описывающий поддержку начальной загрузки для филогенетических деревьев

person thc    schedule 11.07.2018
comment
Спасибо за ответ, статья очень информативна. Я использовал код для своих данных, и это приводит ко всем 1.0. Практически использовался тот же код, за исключением сортировки данных. - person Ali; 12.07.2018
comment
Кажется, это из-за моей меры расстояния. Если я применяю стандартную меру расстояния, значения, выделенные синим цветом, верны. Как мне это решить? - person Ali; 12.07.2018
comment
Трудно сказать, не зная больше о вашем наборе данных. Я бы предложил использовать более традиционную метрику расстояния, такую ​​как евклидово расстояние. Если вам нужно использовать p-значения KS, используйте -log(p-value) в качестве входных данных для евклидова. - person thc; 12.07.2018
comment
Стандартная метрика расстояния действительно плохо справляется с моими данными, поэтому необходимы непараметрические тесты. -log(p.value), похоже, не исправляет это, и я также попытался изменить его с p.value на тестовую статистику, но все равно все 1.0. Все еще не уверен, как решить эту проблему. - person Ali; 13.07.2018