pvclust 中的 p 值和 hclust 中的结果

p-values in pvclust & results in hclust

我正在 运行 进行一些聚类分析,我想弄清楚两个主要问题:

1) 如何最好地解释 pvclust 中 p 值的结果(他们建立的空值是多少?)

2) 如何将这些结果转化为 hclust

我将使用 mtcars 数据集作为示例...

先用pvclust函数(使用欧式距离,完全联动):

d.pv <- pvclust(t(mtcars), method = "euclidean", 
            method.hclust = "complete", nboot = 10)

然后我生成我的树状图,至于要放置在重要​​集群周围的红色框 (alpha = 0.95)

plot(d.pv)
pvrect(d.pv, alpha = 0.95)

我得到这个数字:

我还可以调出重要的观察结果:

pvpick(team.clus.pv, alpha = 0.95)

但是这些发现的意义是什么?我们在树状图中看到两个聚类,那么这两个聚类不同的重要发现 (p = 0.02) 是什么?就这么简单吗?

由于聚类分析是一种 descriptive/exploratory 技术,如果我使用 hclust 包构建它并指定我觉得有 3 个感兴趣的聚类会怎么样?

d <- dist(mtcars, method = "euclidean")
hc <- hclust(d, method = "complete")
plot(hc)
rect.hclust(hc, k = 3, border = "red")

现在我的树状图看起来像这样:

因为我对3个集群感兴趣,有没有办法让pvclust对这3个集群进行比较?或许这不是 pvclust 所比较的?这里的原假设是什么?

如果我查看从 pvclust 生成的树状图,似乎在右侧的红色框中,我有兴趣指定的另外两个集群(使用 hclust)也有显着的 p -价值观。我该如何报告或解释?

与 Stack Overflow 相比,Cross Validated 更像是一个问题?

我不确定您在此处使用 pvclust 的方式 - 在转置数据集上 - 是否适用。 当您了解 pvclust 的工作原理以及如何解释输出时,这一点会更加清晰。
请对这个回复持保留态度,因为我不是这种方法的专家。

注意:mtcars 数据集在行上有不同的汽车型号,在列上有不同的汽车特性。您根据行(汽车模型)的特征对其进行聚类。

pvclust输出

pvclust 提供两种类型的结果,在树状图的每个节点上显示为红色和绿色数字(灰色数字只是节点编号)或通过 print 方法:

  • 绿色数字是Bootstrap Probability * 100(BP),解释最直接
  • 红色数字是 Approximately Unbiased p-value * 100 (AU),是 BP 的修正版本以限制偏差

Bootstrap概率(BP)

BP的解释很简单。在你的例子中 pvclust 将 bootstrap 数据集的列 - 这里是汽车的特征 - (即一些列将被删除而其他列将出现不止一次)然后重新计算之间的欧几里得距离行并计算树状图。它将重复此 nboot * length(r) 次(默认情况下 length(r) = 10 )并且对于每个 运行 它将检查每个集群是否同一组汽车一起出现在来自 bootstrap编辑数据集。

在您的示例中,左侧的第一个集群的 BP = 0.31 意味着这 9 款车型(玛莎拉蒂宝来、克莱斯勒帝国、...、Pontia Firebird)最终在 31 个集群中处于同一集群中 [= 100 个 bootstrap 中的 102=] 个。
这意味着,如果您使用另一个随机的汽车特征样本(但这有意义吗??),该集群将仅出现在 31% 的案例中。注意:bootstrap 之间集群内部的拓扑结构可能不同。检查的唯一标准是这些汽车是否在同一个集群中,或者无论它们在集群中的关系如何。

关于你的第二个问题,你有每个节点的 BP 编号,因此你可以用相同的方式解释任何集群。例如,您使用 hclust(有 7 辆汽车:Homet 4 驱动器,...,AMC Javelin)显示的 middel 集群的 BP = 0.39,这可以按照上面的解释进行解释。

您可以使用 pvclust 来测试观察值(行)的聚类吗?

如果您可以对新数据集重新采样,bootstrap 通常用于估计统计数据的可变性。 在你的例子中,如果你可以重新采样一个新的数据集,你可能会有相同的汽车特征 但是一组不同的汽车模型。此处的汽车模型是 samples/observations,与 features/variables 相比,对观察值重新采样更有意义。 pvclust 旨在用于测试聚类 变量(列)而不是观察值(行)。这可能是它在列上执行聚类的原因 而 hclust 对行执行聚类。

pvclust 使用的方法起源于系统发育分析,在该分析中,您尝试根据 DNA 或其他特征对来自不同物种的个体进行聚类。 然而,系统发育或基因组的情况有点特殊。在这种情况下,observations/samples 是个体(DNA 的来源),variables/features/descriptors 是例如基因或其表达水平。在这种情况下,根据基因对个体进行聚类并通过 bootstraping 基因来测试聚类的稳定性是有意义的,因为基因是多方面的,并且在基因库中随机重新采样是合理的。

在生态学中,您通常在站点(=观察)x 物种(=变量)矩阵上工作。并且通常根据站点的特定组成对其进行聚类分析。在这种情况下,bootstrap 物种来测试站点集群的稳定性是没有意义的,因为应该使用整个社区来表征站点,你不能只是随机丢弃一些物种......但它是有道理的对物种进行聚类分析并测试物种关联的稳定性,如果我们可以重新采样一组新的站点。

近似无偏的 p 值”(AU)

AU 的解释方式应与 BP 类似,但被视为无偏见的版本。 然而,它背后的理论更具技术性,超出了我的理解范围...... 所以,a priori 你应该使用这个值而不是 BP 来解释集群,但我想你应该更加谨慎,就像你的例子中那样对变量进行重采样因为偏差校正可能还没有在那个背景下开发(这只是一个猜测,我不知道这到底有多大风险)。

BP 通常呈现为向下偏差的统计数据。例如,Paradis (2011) 解释说,如果 BP 很高,则数据支持集群。但如果它很低,则可能是因为集群不受数据支持或存在偏差。但是 Efron 等人 (1996) 认为这是对 bootstrap 方法实际测试内容的误解,并且 BP 没有系统地向下偏倚。他们提出了另一种方法来计算此 p 值 "to better agree with standard ideas of confidence levels and hypothesis testing" 和 "two level bootstrap algorithm"。 Suzuki 和 Shimodaira 扩展了这种方法,在 pvclust 中使用 "multistep-multiscale bootstrap algorithm" 来计算 AU。

在此算法的第一步中,您重做 bootstrapping 几次,但使用不同的样本大小。在您的示例中,有 11 列,因此经典 bootstrap 将通过替换这些列重新采样 11 次并重复此 nboot 次(默认值 = 1000,您选择 nboot = 10)。使用 "multistep-multiscale bootstrap algorithm" 重复此过程 1000 * 10 次(默认情况下),但样本大小为 5、6、7、8、9、11、12、13、14 和 15。这是由函数的 r 参数提供原始样本大小(此处 = 11)与 bootstrap 样本大小(此处默认为 5 到 15)的比率。这会在您 运行 pvclust 时显示在控制台上:Bootstrap (r = 0.45)... Done.(即第一组 bootstrap,样本大小 = 0.45*11 = 5)。

参考资料

Efron B. 等人。 (1996) Bootstrap 系统发育树的置信水平,Proc。国家科学院。科学。 93 : 13429-13434

Paradis, E. (2011) 用 R 分析系统发育和进化,第 1 版。施普林格

Shimodaira H. (2004) 使用多步多尺度 bootstrap 重采样对区域进行近似无偏测试,Ann。状态。 32 : 2616-2641

Suzuki, R., Shimodaira, H., (2006) Pvclust:用于评估层次聚类不确定性的 R 包。生物信息学 22:1540–1542