方法NMF (非负矩阵分解)层次聚类 (Hierarchical Clustering)ConsensusClusterPlus 聚类
算法原理基于矩阵分解,将非负数据矩阵分解为两个非负矩阵的乘积(( V \approx WH ))。用于发现数据中的潜在特征或模式。通过计算数据点间的距离(如欧几里得距离)逐步合并数据点或簇,形成树状图(dendrogram)。基于多次聚类算法的共识结果,通过多次重复聚类并计算一致性来提高聚类稳定性。
聚类方式非负矩阵分解,通常用于降维和特征提取。通过分解得到的矩阵用于进一步的聚类。基于相似度的聚类,分为自底向上或自顶向下的方式。通过树状图显示层次结构,最终决定聚类的数量和类别。多次进行K-means、层次聚类等方法,并通过集成多个聚类结果来增加稳定性。通常通过一致性评价选择聚类结果。
数据类型非负数据,尤其适用于高维数据,如基因表达数据、文本数据等。适用于所有类型的数据,特别是数值型数据或可以计算距离的类型数据。适用于各种类型的数据,特别是在多种聚类算法的结果一致性较为重要的场景。
聚类数目聚类数目通常是通过指定 rank 或后续步骤(如聚类)来间接决定。不需要预先指定聚类数目,可以通过树状图选择合适的距离阈值来自动选择聚类数。聚类数目通常是通过共识集成的结果来确定,可以根据一致性评价选择聚类数。
计算复杂度计算量较大,尤其是在大规模数据集上。需要通过优化算法(如乘法更新规则)迭代更新矩阵。计算量随着数据集的增大而增加,尤其是在大规模数据集上,时间复杂度为 ( O(n^2) )。计算复杂度较高,特别是在多次重复聚类的情况下,适合小规模到中规模的数据。
可解释性非负约束使得分解结果更容易解释,得到的基矩阵通常具有较好的生物学或物理意义。通过树状图可以直观地理解聚类结构和层次关系,容易解释各个簇之间的关系。由于是基于多次聚类结果的共识,通常难以直接解释,但通过共识得出的结果更加稳定。
优点- 非负数据的处理能力强
- 有助于特征提取
- 数据降维和聚类相结合
- 可用于寻找数据的层次结构
- 无需预设簇数
- 结果通过树状图可视化
- 稳定性高,通过集成多个聚类结果增强了结果的可靠性
- 可以减少单一聚类算法的偏差
缺点- 对初始值敏感,可能容易陷入局部最优
- 计算开销大,尤其在数据规模较大时
- 计算复杂度高,尤其是样本量较大时
- 对噪声和离群值敏感
- 计算开销较大
- 结果解释性差
- 对参数设置敏感
适用场景高维数据的降维和聚类,尤其适用于非负数据,如基因表达、文档-词项矩阵等。数据具有层次结构的场景,如物种分类、基因分类等。适合数据规模较小到中等。当你需要提高聚类结果的稳定性,尤其在处理复杂数据时
实现方法NMF 包(例如 NMF R 包)hclust() 函数(R)ConsensusClusterPlus 包(R)
  • NMF 适用于非负数据,主要用于 特征提取 和 降维,常用于高维数据,如基因表达数据、图像数据或文本数据。它有很强的 可解释性,但计算复杂度较高。

  • 层次聚类 (hclust) 则适用于所有类型的数据,特别是那些具有 层次结构 的数据。它不需要指定聚类数目,并通过树状图来展示数据的层次关系,适用于较小到中等规模的数据集。

  • ConsensusClusterPlus 聚类 是一种更为 稳定 的聚类方法,通过多次重复不同的聚类算法,并通过集成结果来提高聚类的稳定性,适用于对聚类结果的可靠性要求较高的场景。

    1. 因为通过子采样,所以不那么敏感

ConsensusClusterPlus 构建 共识矩阵(Consensus Matrix) 的核心所在。

  1. 两个样本都出现在某次子采样中,但被分到不同的簇 有重叠但不一致,记录“他们出现过,但没聚在一起”,共识值就会被拉低。
  • 这对样本的共现计数 +1,但它们 没有被计为同簇, 所以同簇计数不加
C[i, j] = 同簇计数 / 共现次数
→ 本轮 C[i, j] += 0 / 1

✅ 2. 两个样本中只有一个出现在本次采样中

  • 因为 只有一个样本出现所以这对样本的这一轮 完全不计入分母也不计入分子✅ 不会影响这对样本的共识值,因为它们“没有机会比较”

✅ 3. 两个样本都出现且在同一簇

共现且同簇,✅ 会拉高共识值。

C[i, j] += 1 / 1 → 提升一致性

在 ConsensusClusterPlus 中,共识矩阵(Consensus Matrix) 是基于样本对(sample pairs)在多次重采样(resampling)过程中是否被分配到同一个簇来计算的,而不关心具体是哪个簇(簇1、簇2、…)。

  • 不关心具体簇标签(簇1、簇2、…),只关心 是否在同一个簇。
  • 共识值越高(接近1),说明 A 和 B 越稳定地被分到同一类,聚类结果越可信。
  • 共识值越低(接近0),说明 A 和 B 经常被分开,可能不属于同一类。

可视化理解:

如果运行 ConsensusClusterPlus 并绘制热图(consensus heatmap),你会看到:

  • 对角线是 1(每个样本永远与自身共现)。

  • A-B 的值是 0.8(表示它们有 80% 的概率被分到同一簇)。

  • 如果某些样本对的共识值很低(如 0.2),说明它们很少被分到同一类。

  • 共识矩阵只记录“是否共现”,不记录“共现在哪个簇”。

  • 你的例子中,A 和 B 两次都在同一个簇(尽管簇标签不同),所以这两次都会贡献到 M[A,B] 的计数。

  • 如果某次 A 和 B 不在同一个簇,则不会增加计数。

这样设计的目的是衡量聚类稳定性,而不是具体的簇划分。

适用范围

  1. 样本量 >30
  2. 列为样本 行GENE
1. 使用MAD过滤 高变异的信息 放大真实差异
2. 中位数归一化
3. 
 

如果你的数据包含已知组别(哪怕只用于评估):
先用 MAD 滤基因(比如保留 top 10%变异基因)
再聚类(层次 / K-means / PAM)
使用 Silhouette score、Adjusted Rand Index(ARI)等指标评估聚类是否分组准确
必要时结合DEG筛选提升生物学解释性

“For this tutorial, we selected 80% item resampling (pItem), 80% gene resampling (pFeature)”

✅ 意思是:

  • pItem = 0.8:每次重采样时,从所有样本(item)中随机抽取80%进行聚类分析。
  • pFeature = 0.8:每次重采样时,从所有基因(feature)中随机抽取80%进行聚类。

📌 目的:

  • 增加聚类的鲁棒性和稳定性。
  • 避免对某些样本或基因的过拟合。

“a maximum evaluated k of 6 so that cluster counts of 2,3,4,5,6 are evaluated (maxK)”

  • 设置最大聚类个数 k = 6
  • 共识聚类会评估从 k=2 到 k=6 的不同聚类数,并对它们的稳定性进行比较。

📌 目的:

  • 通过比较不同 k 值下聚类的一致性(consensus score),帮助确定最佳聚类数。

“50 resamplings (reps)”

✅ 意思是:

  • 对聚类过程 重复抽样并聚类50次
  • 每次都随机选择 80% 的样本 + 80% 的基因进行聚类

📌 目的:

  • 用来评估聚类的一致性和稳定性(共识度)

“agglomerative hierarchical clustering algorithm (clusterAlg)”

✅ 使用的是:

  • 聚合型层次聚类算法,常见的如 hclust(method = "average")、"ward.D2" 等

📌 特点:

  • 不需要提前指定聚类中心
  • 根据样本之间的相似性递归合并

“1 - Pearson correlation distances (distance)”

✅ 意思是:

  • 距离度量采用:1 - 皮尔逊相关系数
  • 即

📌 原因:

  • 皮尔逊相关反映表达模式的相似性,适用于基因表达数据
  • 距离越小,表达模式越相似

“We also used a specific random seed so that this example is repeatable (seed)”

✅ 意思是:

  • 设定了一个固定的随机种子(如 set.seed(123))
  • 保证每次运行结果一致,便于复现(repeatability)
参数说明
pItem = 0.8每次聚类抽取80%的样本
pFeature = 0.8每次聚类抽取80%的基因
maxK = 6评估聚类数 2~6
reps = 50重采样次数 50 次
clusterAlg = hierarchical层次聚类算法
distance = 1 - Pearson用皮尔逊相关作为距离
title = "..."图像输出文件标题
seed = xxx固定随机种子,确保结果可重复
参数教学/测试建议实际研究建议
reps50✅ 1000 或更高
maxK6✅ 20 或更高

自我拓展

这是一个非常有深度的问题,涉及两种不同的特征选择策略在聚类或下游分析中的对比:

  • MAD(Median Absolute Deviation)过滤:选择表达变异最大的基因(全局变异性)
  • 基于 loess 拟合值最大方差的过滤:选择在 loess 拟合趋势上变异性最大的基因

在某些场景下,使用 loess 拟合值的方差过滤可能比 MAD 更好,尤其当你想强调趋势性变化、空间或时间模式时;但 在非时间/空间数据中,MAD 通常更稳定和通用。


📌 二者原理对比:

方法目标适用数据类型优势劣势
MAD 过滤找到表达值最不稳定的基因(全局变异)所有类型稳健,对异常值不敏感,简单高效无视结构性趋势,如时间依赖性
Loess 拟合值方差过滤找到拟合趋势最显著起伏的基因(趋势变异)时间序列、发育、空间转录组数据等更关注动态变化和模式特异性表达更依赖拟合质量,容易受局部噪声影响

1. 如果你的数据是时间序列 / 发育轨迹 /空间转录组:

  • 使用 loess 拟合后的表达趋势:

    • 比如某基因在 0h → 6h → 12h → 24h 呈现上升 → 高峰 → 回落
  • 这种趋势不会在 MAD 中突出(因为整体变异可能不大)

  • 但在 loess 拟合趋势上,它的曲线方差高 → 有生物学意义

✅ 推荐:使用 loess 拟合值的方差过滤,更能识别动态响应基因


  1. 如果你的数据是无结构的 bulk RNA-seq:
  • 比如是 100 个不同病人样本,已知分组(如癌 vs 正常)或无分组
  • 你关心的是样本之间哪些基因表达最不稳定
  • 这时 loess 拟合的意义不大(没有自然顺序)

✅ 推荐:使用 MAD 过滤更合适,稳健、快速、适应性强

场景建议方法
非时间 / 空间数据MAD
有时间顺序 / 空间顺序loess拟合方差
想综合稳健性与趋势MAD 初筛 + loess 精筛
聚类方法特点对高维数据的适应性建议是否使用MAD过滤
层次聚类不需要预设簇数,结果易解释一般✅推荐过滤
K-means假设簇为球形,对距离敏感对噪音敏感✅强烈推荐
PAM更稳健(基于medoid而非centroid)但计算复杂度高✅强烈推荐
使用方式聚类效果噪音解释性推荐
使用所有基因一般~差多差❌
使用MAD过滤后的基因好少好✅ ✅ ✅
这个问题非常关键,牵涉到基因表达矩阵中 低变异基因对欧式距离的“稀释效应”。

🔍 问题核心:

为什么低表达 / 低变异的基因会对欧式距离产生不良影响?


📌 欧式距离的定义(样本间):

对于两个样本 (A = (a_1, a_2, …, a_n)),(B = (b_1, b_2, …, b_n)),欧式距离是:


🔻 如果使用所有基因,包括低表达(或低变异)基因,会出现的问题:

1. 大多数基因差异很小,贡献几乎为0

  • 绝大多数基因在不同样本间表达量几乎不变。
  • ((a_i - b_i)^2 \approx 0),这些基因对总距离贡献很小。
  • 但它们仍然被计入距离中,占用了维度 —— 造成“稀释效应”。

2. 信号被噪声掩盖

  • 高变异、高信息量的基因贡献了真实的生物学差异(例如分型或疾病状态)。
  • 但如果这些有意义的基因只占一小部分,高噪声的低变异基因“稀释”了总距离的辨别力。

3. 维度灾难(curse of dimensionality)

  • 在高维空间中,欧式距离趋于均匀,样本间距离差异变小。
  • 加入大量无信息的维度(如低表达基因)会加剧这一问题,使得距离不再有区分力。

4. 不稳定的聚类结果

  • 聚类方法依赖于距离或相似性。
  • 如果距离度量被低变异特征主导,聚类可能被导向错误的“模式”。

✅ MAD过滤如何改善?

  • MAD 选出在样本间表达变异性大的基因,即具有差异表达的可能。

  • 保留这部分基因能:

    • 放大样本间的真实差异
    • 提高距离的敏感度和稳定性
    • 减少维度,提高计算效率和准确率

🧠 简单类比(直观理解)

假设你比较两个人的性格(样本):

  • 如果你用1000个完全一样的属性(如“喜欢水”、“呼吸空气”)去算差距,最后的距离很小也很相似。
  • 但如果你只用10个有显著差异的行为(如“是否喜欢冒险”),你就能清楚区分他们。

🔬 实际例子(可视化效果)

假设你对样本做PCA:

  • 用全基因数据 → PCA散点图可能聚不出清晰的簇
  • 用MAD筛选后的基因 → 聚类效果清晰、样本更容易分群

✅ 结论

项目所有基因MAD过滤后的基因
计算的欧式距离含有大量噪音成分,失真高变异维度主导,更真实
聚类精度低高
噪音影响大小
建议❌ 不推荐✅ 推荐