| 方法 | NMF (非负矩阵分解) | 层次聚类 (Hierarchical Clustering) | ConsensusClusterPlus 聚类 |
|---|---|---|---|
| 算法原理 | 基于矩阵分解,将非负数据矩阵分解为两个非负矩阵的乘积(( V \approx WH ))。用于发现数据中的潜在特征或模式。 | 通过计算数据点间的距离(如欧几里得距离)逐步合并数据点或簇,形成树状图(dendrogram)。 | 基于多次聚类算法的共识结果,通过多次重复聚类并计算一致性来提高聚类稳定性。 |
| 聚类方式 | 非负矩阵分解,通常用于降维和特征提取。通过分解得到的矩阵用于进一步的聚类。 | 基于相似度的聚类,分为自底向上或自顶向下的方式。通过树状图显示层次结构,最终决定聚类的数量和类别。 | 多次进行K-means、层次聚类等方法,并通过集成多个聚类结果来增加稳定性。通常通过一致性评价选择聚类结果。 |
| 数据类型 | 非负数据,尤其适用于高维数据,如基因表达数据、文本数据等。 | 适用于所有类型的数据,特别是数值型数据或可以计算距离的类型数据。 | 适用于各种类型的数据,特别是在多种聚类算法的结果一致性较为重要的场景。 |
| 聚类数目 | 聚类数目通常是通过指定 rank 或后续步骤(如聚类)来间接决定。 | 不需要预先指定聚类数目,可以通过树状图选择合适的距离阈值来自动选择聚类数。 | 聚类数目通常是通过共识集成的结果来确定,可以根据一致性评价选择聚类数。 |
| 计算复杂度 | 计算量较大,尤其是在大规模数据集上。需要通过优化算法(如乘法更新规则)迭代更新矩阵。 | 计算量随着数据集的增大而增加,尤其是在大规模数据集上,时间复杂度为 ( O(n^2) )。 | 计算复杂度较高,特别是在多次重复聚类的情况下,适合小规模到中规模的数据。 |
| 可解释性 | 非负约束使得分解结果更容易解释,得到的基矩阵通常具有较好的生物学或物理意义。 | 通过树状图可以直观地理解聚类结构和层次关系,容易解释各个簇之间的关系。 | 由于是基于多次聚类结果的共识,通常难以直接解释,但通过共识得出的结果更加稳定。 |
| 优点 | - 非负数据的处理能力强 - 有助于特征提取 - 数据降维和聚类相结合 | - 可用于寻找数据的层次结构 - 无需预设簇数 - 结果通过树状图可视化 | - 稳定性高,通过集成多个聚类结果增强了结果的可靠性 - 可以减少单一聚类算法的偏差 |
| 缺点 | - 对初始值敏感,可能容易陷入局部最优 - 计算开销大,尤其在数据规模较大时 | - 计算复杂度高,尤其是样本量较大时 - 对噪声和离群值敏感 | - 计算开销较大 - 结果解释性差 - 对参数设置敏感 |
| 适用场景 | 高维数据的降维和聚类,尤其适用于非负数据,如基因表达、文档-词项矩阵等。 | 数据具有层次结构的场景,如物种分类、基因分类等。适合数据规模较小到中等。 | 当你需要提高聚类结果的稳定性,尤其在处理复杂数据时 |
| 实现方法 | NMF 包(例如 NMF R 包) | hclust() 函数(R) | ConsensusClusterPlus 包(R) |
-
NMF 适用于非负数据,主要用于 特征提取 和 降维,常用于高维数据,如基因表达数据、图像数据或文本数据。它有很强的 可解释性,但计算复杂度较高。
-
层次聚类 (hclust) 则适用于所有类型的数据,特别是那些具有 层次结构 的数据。它不需要指定聚类数目,并通过树状图来展示数据的层次关系,适用于较小到中等规模的数据集。
-
ConsensusClusterPlus 聚类 是一种更为 稳定 的聚类方法,通过多次重复不同的聚类算法,并通过集成结果来提高聚类的稳定性,适用于对聚类结果的可靠性要求较高的场景。
- 因为通过子采样,所以不那么敏感
ConsensusClusterPlus 构建 共识矩阵(Consensus Matrix) 的核心所在。
- 两个样本都出现在某次子采样中,但被分到不同的簇 有重叠但不一致,记录“他们出现过,但没聚在一起”,共识值就会被拉低。
- 这对样本的共现计数 +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 不在同一个簇,则不会增加计数。
这样设计的目的是衡量聚类稳定性,而不是具体的簇划分。
适用范围
- 样本量 >30
- 列为样本 行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 | 固定随机种子,确保结果可重复 |
| 参数 | 教学/测试建议 | 实际研究建议 |
|---|---|---|
reps | 50 | ✅ 1000 或更高 |
maxK | 6 | ✅ 20 或更高 |
自我拓展
这是一个非常有深度的问题,涉及两种不同的特征选择策略在聚类或下游分析中的对比:
- MAD(Median Absolute Deviation)过滤:选择表达变异最大的基因(全局变异性)
- 基于 loess 拟合值最大方差的过滤:选择在 loess 拟合趋势上变异性最大的基因
在某些场景下,使用 loess 拟合值的方差过滤可能比 MAD 更好,尤其当你想强调趋势性变化、空间或时间模式时;但 在非时间/空间数据中,MAD 通常更稳定和通用。
📌 二者原理对比:
| 方法 | 目标 | 适用数据类型 | 优势 | 劣势 |
|---|---|---|---|---|
| MAD 过滤 | 找到表达值最不稳定的基因(全局变异) | 所有类型 | 稳健,对异常值不敏感,简单高效 | 无视结构性趋势,如时间依赖性 |
| Loess 拟合值方差过滤 | 找到拟合趋势最显著起伏的基因(趋势变异) | 时间序列、发育、空间转录组数据等 | 更关注动态变化和模式特异性表达 | 更依赖拟合质量,容易受局部噪声影响 |
1. 如果你的数据是时间序列 / 发育轨迹 /空间转录组:
-
使用 loess 拟合后的表达趋势:
- 比如某基因在 0h → 6h → 12h → 24h 呈现上升 → 高峰 → 回落
-
这种趋势不会在 MAD 中突出(因为整体变异可能不大)
-
但在 loess 拟合趋势上,它的曲线方差高 → 有生物学意义
✅ 推荐:使用 loess 拟合值的方差过滤,更能识别动态响应基因
- 如果你的数据是无结构的 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过滤后的基因 |
|---|---|---|
| 计算的欧式距离 | 含有大量噪音成分,失真 | 高变异维度主导,更真实 |
| 聚类精度 | 低 | 高 |
| 噪音影响 | 大 | 小 |
| 建议 | ❌ 不推荐 | ✅ 推荐 |