群集中的不确定性

时间:2018-07-11 23:11:13

标签: r bootstrapping hierarchical-clustering kolmogorov-smirnov

我正在对包括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

我使用以下代码对kolmogorov-sminrov测试进行引导采样,以计算距离矩阵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 个答案:

答案 0 :(得分: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")

enter image description here

另请参阅:

http://www.pnas.org/content/93/23/13429 (原始?)PNAS文章描述了系统发育树的自举分支支持