🧬 空间邻域组成聚类系统性总结:从特征构建到方法选择
一、任务目标:识别“空间亚型”
空间亚型分析旨在根据细胞在组织中邻域结构的组成特征,识别出功能或状态上不同的“空间细胞类群”,如不同的 CAF 微环境类型。
二、分析流程概览
✅ 输入数据:
CAF × CellType 的邻域比例矩阵
- 每个 CAF 一行,每列是邻域内某类细胞的占比(加总为 1 或标准化)
✅ 两个步骤:
| 步骤 |
说明 |
| Step 1:构建邻域特征向量 |
统计每个目标细胞周围某个半径内,各类细胞的比例(或数量) |
| Step 2:对这些特征向量聚类 |
将这些邻域组成作为向量输入,进行聚类,得到空间亚型 |
三、特征向量构建方式(Step 1)
| 方法类别 |
描述 |
| 固定半径邻域 |
设置如 80μm 半径,统计邻近细胞组成 |
| K 近邻 |
对每个目标细胞寻找最近的 K 个细胞,统计类型占比 |
| 加权邻域 |
对邻居加权(距离越近权重越大),体现“局部密度影响” |
| 多尺度邻域分析 |
以多种半径重复统计,用于评估微环境变化(如近邻 vs 远邻) |
四、聚类方法扩展(Step 2)
✅ 已总结方法:
| 方法组合 |
特点分析 |
| NMF + Leiden |
✨ 推荐方式:NMF 可解释性强,Leiden 能高效识别复杂结构模式 |
| PCA + K-means |
快速简洁,适合簇间线性可分数据,但对复杂结构或过渡状态不敏感 |
| Hierarchical clustering |
多用于构建树状图谱、层级关系展示,适合探索数据结构而非最终划分类别 |
| Topic modeling (LDA) |
概率模型识别“邻域共存潜在主题”,适合复杂混合邻域建模,但调参难度较高 |
✅ 补充建议方法:
1️⃣ Gaussian Mixture Model (GMM)
- 假设邻域组成数据由多个高斯分布混合而成
- 提供soft clustering(每个细胞对所有簇的概率归属)
- 适合邻域组成连续变化的状态转化类分析
2️⃣ HDBSCAN(Hierarchical Density-Based Spatial Clustering)
- 基于密度的层级聚类,无需预设簇数
- 可识别出稠密簇与稀疏“孤立点”(如罕见邻域模式)
- 特别适合数据分布不均、存在孤立亚型的组织分析
3️⃣ PhenoGraph / Graph-based 社区检测
- 构建 k-NN 图后使用 Louvain/Leiden 社区划分算法
- 原用于单细胞表达数据聚类,已广泛应用于空间邻域组成分析
- 对数据结构自适应性强,尤其适合高维特征
4️⃣ Diffusion Map + Spectral Clustering
- 利用扩散距离重建细胞间“状态空间”,比欧式距离更鲁棒
- 谱聚类通过拉普拉斯矩阵特征值分解进行分群
- 特别适合处理状态过渡、组织梯度类问题(如发育轨迹、肿瘤侵袭边界)
✅ 方法对比总结表
| 方法 |
原理概述 |
优势与适用场景 |
| NMF + Leiden |
非负分解 + 社区检测 |
可解释性强,适合组成特征向量,捕捉异质性 |
| PCA + K-means |
主成分 + 欧式聚类 |
快速高效,适合线性可分的分群任务 |
| PCA + Louvain / Leiden |
主成分 → 相似性图 → 社区划分 |
网络结构友好,适合复杂空间邻域聚类 |
| Hierarchical clustering |
基于距离或相似度递归构建聚类树 |
可展示亚型之间关系,适合探索性热图分析 |
| LDA (Topic modeling) |
基于概率的“主题”识别模型 |
适合发现多个细胞类型共存的“微环境模式” |
| GMM(高斯混合模型) |
模型每类邻域为高斯分布,输出概率分群 |
适合识别模糊边界或过渡状态,可视化清晰 |
| HDBSCAN |
基于密度的层级聚类 |
不需指定簇数,能识别稀有簇,适合不规则数据分布 |
| Diffusion + Spectral |
扩散图构建状态空间,谱聚类判别边界 |
适合状态连续变化场景,如肿瘤边缘、发育轨迹 |
| PhenoGraph |
基于图的邻接网络 + Louvain 分群 |
稳健、已验证广泛,适合高维表达 / 细胞组成类问题 |
✅ 方法选择建议:
| 分析需求 |
建议方法 |
| 需要高可解释性 |
NMF / LDA |
| 目标簇分布复杂/不规则 |
HDBSCAN / GMM |
| 想追踪状态变化轨迹 |
Diffusion Map + Spectral |
| 快速初筛、聚类快速对比 |
PCA + K-means |
| 兼容 Scanpy/Seurat 工作流 |
Leiden / Louvain 基于图的方法 |
五、可视化方式与“饼图”的解释
| 可视化图 |
来源说明 |
功能说明 |
| 饼图 |
对聚类结果中每类细胞的邻域组成向量求均值后绘图 |
表示该空间亚型的“邻域细胞组成特征” |
| 热图 |
使用 seaborn.clustermap 或 ComplexHeatmap |
可展示所有细胞或空间亚型与细胞类型的组成强度 |
| UMAP |
可将 CAF 的邻域向量降维后上色 |
展示空间亚型在结构上的分布 |
| 空间坐标上标色 |
每类亚型染成不同颜色点 |
展示组织中 CAF 亚型的空间分布格局 |
六、算法数学基础:NMF 拓展回顾
你对 NMF 的数学原理、分解机制、优化过程、在 CAF 分析中的应用都已经总结得非常完整:
- 分解公式 $V \approx WH$
- 非负约束带来的可解释性
- 每个 CAF 被看作若干“空间模式”的加权组合
- 对 $W$ 聚类可得到 CAF 的空间亚型
七、跨样本标准化建议
为统一不同切片的细胞组成差异,可以:
- 将每个 CAF 邻域向量 除以组织全局细胞比例
- 或使用
Z-score 标准化处理
✅ 一图总结分析流程:
[原始细胞位置+类型]
↓
[计算邻域构成向量]
↓
[构成目标细胞 × 细胞类型矩阵]
↓
[NMF / PCA / LDA 等降维]
↓
[Leiden / K-means 聚类]
↓
[CAF 空间亚型 → 饼图 / 热图 / 空间投影]
✅ 总结表
| 分析环节 |
方法与建议 |
| 邻域定义 |
固定半径 / K近邻 / 多尺度 |
| 特征构建 |
构成比例向量 |
| 降维+聚类 |
NMF + Leiden(推荐) / PCA + Louvain / LDA / GMM |
| 结果可视化 |
饼图(组均值)、热图、空间图、UMAP |
| 跨样本归一化 |
与切片总体组成比值 / Z-score |
🧩 补充:完整代码实现建议(Python / R)
✅ Python 实现方案(Scanpy + sklearn)
from sklearn.decomposition import NMF
from sklearn.preprocessing import normalize
import scanpy as sc
import numpy as np
import anndata as ad
import pandas as pd
# 假设邻域矩阵为 CAF × cell_type(纯数值、已归一化)
X = np.array(...) # shape: (n_caf, n_cell_types)
# Step 1: NMF 分解
nmf = NMF(n_components=4, init='nndsvd', random_state=0)
W = nmf.fit_transform(X) # CAF × topic matrix
H = nmf.components_ # topic × cell_type
# Step 2: 转为 AnnData → 聚类
adata = ad.AnnData(W)
sc.pp.neighbors(adata)
sc.tl.leiden(adata, resolution=0.3)
adata.obs['spatial_subtype'] = adata.obs['leiden']
# Step 3: 每个聚类的邻域组成均值 → 饼图绘制(示意)
df = pd.DataFrame(X)
df['cluster'] = adata.obs['spatial_subtype'].values
mean_profiles = df.groupby('cluster').mean()
mean_profiles.plot.pie(subplots=True, figsize=(10, 3))
✅ R 等效实现(NMF + Seurat)
library(NMF)
library(Seurat)
# Step 1: NMF
nmf_res <- nmf(X, rank = 4, method = "brunet", nrun = 20)
W <- basis(nmf_res) # CAF × topic
H <- coef(nmf_res) # topic × cell_type
# Step 2: 聚类分析
seurat_obj <- CreateSeuratObject(counts = t(W))
seurat_obj <- FindNeighbors(seurat_obj)
seurat_obj <- FindClusters(seurat_obj, resolution = 0.3)
📌建议使用 factoextra::fviz_nbclust() 或 clValid::clValid() 帮助选定聚类数。
🧠 方法对照与适用性建议表
| 方法组合 |
可解释性 |
异质性建模 |
状态连续性 |
自动确定簇数 |
适用场景和备注 |
| NMF + Leiden |
✅ 高 |
✅ |
❌ 离散 |
❌ |
主流推荐方法,可生成因子解释图和聚类图 |
| PCA + KMeans |
❌ 一般 |
❌ |
❌ |
❌ |
快速初筛,适合均值分离明显的簇 |
| GMM + soft assignment |
❌ 一般 |
✅ |
✅ 连续谱系 |
❌ |
支持 soft label,适合状态过渡和模糊边界分析 |
| HDBSCAN(密度聚类) |
❌ 一般 |
✅ |
❌ |
✅ 自动识别 |
可识别孤立亚型和稀有空间构型 |
| PhenoGraph / Louvain |
❌ |
✅ |
❌ |
✅ 基于图密度 |
图聚类主流方法,兼容 Scanpy/Seurat,适合大数据量 |
| DiffusionMap + Spectral |
❌ 可视化主 |
✅ |
✅ 连续轨迹 |
❌ |
拓扑结构敏感,适合处理“状态过渡型空间模式” |
| Hierarchical clustering |
✅ 树形结构 |
✅ |
❌ |
✅ 可剪分支 |
适合探索聚类之间关系、绘制热图,适合 small data |
| LDA (Topic modeling) |
✅ 高 |
✅ |
✅(分布式表示) |
❌ |
理论强大但需调参,适合复杂混合邻域(但需经验) |
✅ 分析设计建议总结
| 目标类型 |
推荐方法组合 |
参数建议 |
| 高解释性 + 聚类 |
NMF + Leiden |
n_components ≈ 3–6,resolution=0.3 |
| 多态过渡 + 模糊边界分析 |
GMM 或 DiffusionMap + Spectral |
Gaussian n ≈ 4,diffusion steps=10 |
| 稀有亚型发现 |
HDBSCAN |
min_samples=5, min_cluster_size=10 |
| 快速自动聚类 |
PCA + Louvain / PhenoGraph |
PCA 维度=10~30,kNN=15–30 |
| 样本归一化对比 |
先标准化邻域向量 → 除以全图细胞组成比例 |
CAF邻域构成 / 全组织构成 |