# 健康人 PBMC 细胞类型注释一致性分析报告

**CellTypist · SingleR · 经典 Marker 基因 三方法交叉验证**

数据集：10x Genomics PBMC 3k（健康供体外周血，CellRanger 1.1.0，hg19）

---

## 摘要

本分析在同一份健康人外周血单细胞数据（10x PBMC 3k，质控后 **2638 个细胞 × 13 714 个基因**）上，独立运行三种细胞类型注释方法——监督模型 **CellTypist**、参考相关法 **SingleR**（Monaco 免疫参考集）与人工 **经典 Marker 基因打分**，并将三者的标签统一归并到一套 16 类的粗分类体系后，量化逐细胞与簇水平的一致性。

**核心结论**

| 指标 | 结果 |
|---|---|
| 逐细胞两两一致率 | 0.68–0.76（Cohen's κ = 0.60–0.71） |
| 两两 ARI / NMI | 0.61–0.65 / 0.69–0.72 |
| 三方法标签完全一致 | **59.5%**（2638 细胞中 1569 个） |
| 至少两种方法一致 | **95.7%** |
| 剔除疑似双细胞后 | 结论不变（三方法一致率 59.6%） |

三种方法在 **CD4 T、CD14 单核、B 细胞**等"边界清晰"的主流细胞群上高度一致；分歧集中在四类**边界/低覆盖**情境：

1. **簇 5（156 细胞）：NK 被 marker 方法误判为 Erythroid**——本分析最明确的结论。差异表达、NK 全套细胞毒基因、以及 CellTypist/SingleR 的一致判 NK，共同证明该簇是 **CD16⁺ NK 细胞**；marker 误判的直接原因是 Erythroid 签名 6 个基因中 5 个（HBB/HBA2/AHSP/CA1/ALAS2）在该数据中被质控过滤，仅剩 HBA1 单基因，叠加红细胞裂解释放的环境血红蛋白 RNA 污染，再经簇水平 z 标准化放大所致。
2. **簇 3（312 细胞）：CD8 T 与 MAIT/γδT 边界模糊**（一致率仅 21%），属于连续分化谱的真实生物学歧义，而非方法错误。
3. **簇 4（191 细胞）：非经典（CD16⁺）单核与经典单核的边界**，SingleR（Monaco 参考）在此处分辨率不足。
4. **簇 7（13 细胞）：血小板/巨核细胞**，SingleR 所用 Monaco 参考集不含血小板标签，故判为 Unassigned，属参考集覆盖缺口。

---

## 1. 数据与方法

### 1.1 数据

10x Genomics 官方 **PBMC 3k** 数据集（CellRanger 1.1.0，hg19），原始 **32738 基因 × 2700 细胞**，为健康供体外周血单个核细胞。

**质控（沿用 scanpy PBMC3k 教程阈值）**：

- 细胞：`n_genes ≥ 200`、`n_genes < 2500`、`pct_counts_mt < 5%`；
- 基因：`min_cells ≥ 3`。

质控后 **2638 细胞 × 13714 基因**（过滤 62 细胞，2.3%），中位基因数 820、中位 UMI 2214、中位线粒体比例 2.0%。

**双细胞**：Scrublet 在保留细胞中标记 **31 个（1.2%）疑似双细胞**，仅标记不剔除，作为一致性指标的敏感性分析。

**归一化与聚类**：`log1p(CP10K)` 归一化 → 高变基因（HVG，n=1838）→ `regress_out(total_counts, pct_counts_mt)` + z-score 缩放 → PCA（40 主成分）→ UMAP → Leiden（resolution=1.0），得到 **8 个簇**：`[1144, 445, 341, 312, 191, 156, 36, 13]`。

> 关键约定：三种注释方法统一使用 **`layers['lognorm']`（log1p(CP10K)、未 scale 的全基因矩阵）**，scale 后的 X 仅用于降维聚类，避免破坏各方法的前提假设。预处理刻意**保留全基因**而非子集到 HVG，因为 CellTypist / SingleR 需要完整基因集（CellTypist 对 HVG 子集会报 "invalid expression matrix, expect ALL genes"）。

### 1.2 三种注释方法

| 方法 | 原理 | 具体配置 |
|---|---|---|
| **CellTypist** | 对数几率回归监督模型 | `Immune_All_Low` 模型（98 细胞类型，6639 基因；与数据交集 4178），直接预测 + 过聚类多数投票两种模式 |
| **SingleR** | Spearman 秩相关 + 参考标签聚合的参考法 | celldex `monaco_immune`（Monaco et al. 免疫参考，114 参考样本，label.fine 29 类 / label.main 10 类，46077 基因；与数据交集 11788） |
| **Marker 打分** | 人工先验的经典 marker 签名 | 14 个免疫学共识签名，`sc.tl.score_genes`（含背景校正）后按簇 z-score 标准化，每簇取最高分签名 |

### 1.3 统一分类体系

三种方法的标签粒度与命名不同，先映射到统一 16 类粗分类体系（`COARSE_ORDER`）：CD4 T、CD8 T、Treg、MAIT/gdT、NK、NKT、B、Plasma、CD14 Monocyte、CD16 Monocyte、DC、pDC、Platelet/Megakaryocyte、Erythroid、Proliferating、Unassigned。

- SingleR 使用 **label.fine**（细标签）映射——因其才能区分 CD4/CD8/Treg/MAIT 这一层，与另两法粒度可比；label.main 只有 "T cells" 类粗标签，会人为制造粒度错配。
- 未命中映射规则的标签**不静默丢弃**，单独记录于 `results/tables/05_unmapped_labels.csv`（合计仅 28 细胞，1.1%）。

### 1.4 一致性指标

- **逐细胞**：一致率（agreement）、Cohen's κ（分类一致性的机会校正）、ARI、NMI（聚类一致性的机会校正，>3 类时比 κ 更稳健）。
- **簇水平**：各 Leiden 簇内三方法多数标签 + 簇内三方法完全一致率。
- 另计算三方法**全一致率**与**至少两法一致率**。

---

## 2. 结果

### 2.1 三种方法的标签分布（统一粗分类，2638 细胞）

| 统一类型 | CellTypist | SingleR | Marker |
|---|---:|---:|---:|
| CD4 T | 834 | 873 | 1144 |
| CD14 Monocyte | 405 | 562 | 445 |
| CD16 Monocyte | 229 | 64 | 191 |
| CD8 T | 355 | 268 | 312 |
| B | 352 | 339 | 341 |
| NK | 210 | 152 | 0 |
| MAIT/gdT | 74 | 218 | 0 |
| Treg | 106 | 96 | 0 |
| DC | 30 | 43 | 36 |
| pDC | 4 | 4 | 0 |
| NKT | 11 | 0 | 0 |
| Plasma | 1 | 4 | 0 |
| Platelet/Megakaryocyte | 12 | 0 | 13 |
| Erythroid | 0 | 0 | 156 |
| Proliferating | 2 | 0 | 0 |
| Unassigned | 13 | 15 | 0 |

三方法对**主流细胞群（CD4 T、CD14 单核、B、CD8 T）的总体规模判断一致**。明显差异处：

- **NK**：CellTypist 210、SingleR 152，而 **Marker 为 0**（marker 从未给任何细胞标 NK，见 2.5）。
- **MAIT/gdT**：SingleR 218 远高于 CellTypist 74，而 Marker 为 0（marker 有意不设独立 NKT/MAIT 边界签名）。
- **Erythroid**：仅 Marker 给出 156（集中在簇 5，经核查为误判）。

### 2.2 逐细胞一致性（核心结果）

| 比较 | 一致率 | Cohen's κ | ARI | NMI |
|---|---:|---:|---:|---:|
| CellTypist vs SingleR | **0.761** | 0.709 | 0.651 | 0.688 |
| CellTypist vs Marker | 0.702 | 0.626 | 0.609 | 0.695 |
| SingleR vs Marker | 0.684 | 0.600 | 0.628 | 0.716 |
| 三方法全一致 | **0.595** | — | — | — |
| 至少两法一致 | **0.957** | — | — | — |

一致性呈"中等偏上"水平：两两 κ 均在 0.60–0.71，属实质性一致（substantial）；**三种方法同时给出同一标签的比例为 59.5%**，但**至少两种方法一致的比例高达 95.7%**——意味着绝大多数分歧是"两法一致、一法偏离"的少数派分歧，而非三法各执一词。

**CellTypist 与 SingleR 的一致率最高（0.76）**，符合两者都是数据驱动方法（监督模型 vs 参考相关）的预期；人工 marker 与两者的一致率略低（0.68–0.70），主要受其覆盖缺口（NK/MAIT/Treg 无法独立判定）与边界歧义影响。

### 2.3 簇水平一致性

| Leiden 簇 | 细胞数 | CellTypist 多数 | SingleR 多数 | Marker 多数 | 三方法一致率 |
|---|---:|---|---|---|---:|
| 0 | 1144 | CD4 T | CD4 T | CD4 T | 62.3% |
| 1 | 445 | CD14 Monocyte | CD14 Monocyte | CD14 Monocyte | 83.1% |
| 2 | 341 | B | B | B | **97.7%** |
| 3 | 312 | CD8 T | MAIT/gdT | CD8 T | 21.2% |
| 4 | 191 | CD16 Monocyte | CD14 Monocyte | CD16 Monocyte | 32.5% |
| 5 | 156 | NK | NK | Erythroid | **0.0%** |
| 6 | 36 | DC | DC | DC | 69.4% |
| 7 | 13 | Platelet/MK | Unassigned | Platelet/MK | 0.0% |

**B 细胞簇（簇 2）一致性最高（97.7%）**——B 细胞 marker（MS4A1/CD79A/CD19）特异性强、边界清晰，三种方法都极易判定。**簇 5 与簇 7 的簇内三方法一致率为 0%**，是分歧最集中的簇。

### 2.4 按共识细胞类型拆分的一致率

| 共识类型 | 细胞数 | 占比 | CellTypist 一致 | SingleR 一致 | Marker 一致 |
|---|---:|---:|---:|---:|---:|
| CD4 T | 946 | 35.9% | 87.0% | 90.8% | 97.6% |
| CD14 Monocyte | 459 | 17.4% | 86.3% | 98.0% | 96.3% |
| B | 343 | 13.0% | 99.7% | 98.5% | 98.8% |
| CD8 T | 292 | 11.1% | 85.6% | 79.1% | 57.9% |
| CD16 Monocyte | 173 | 6.6% | 100% | 36.9% | 98.8% |
| NK | 149 | 5.6% | 100% | 100% | **0%** |
| MAIT/gdT | 69 | 2.6% | 100% | 100% | 0% |
| Treg | 43 | 1.6% | 100% | 100% | 0% |
| DC | 33 | 1.3% | 78.8% | 100% | 97.0% |

这组数据清晰揭示**分歧的归属**：在共识为 CD4 T/CD14 单核/B 的主流细胞中，三方法几乎都高度一致；而 **NK、MAIT/gdT、Treg 三类，Marker 方法的一致率为 0%**——因为 marker 的粗签名打分无法（或有意识地未）独立区分这些类型，把它们归并到了 CD8 T / CD4 T 等相邻类。此外 **CD16 单核上 SingleR 一致率仅 36.9%**（Monaco 参考对非经典单核分辨率不足）。

### 2.5 关键分歧案例

#### 案例 1（最重要）：簇 5 = CD16⁺ NK 细胞，Marker 误判为 Erythroid

簇 5（156 细胞）是三种方法分歧最尖锐的簇（簇内一致率 0%）：

- **CellTypist**：NK（纯度 97.4%，置信度中位 0.94）；
- **SingleR**：NK（Natural killer cells，纯度 91.0%）；
- **Marker**：Erythroid（但判定余量 margin 仅 0.109，亚军即 NK）。

**证据链（结论：该簇是 NK，Marker 误判）**：

1. **差异表达**（`results/tables/04_cluster_top_de_genes.csv`）：簇 5 的 top 差异基因为 **NKG7、GNLY、GZMB、CTSW、PRF1、GZMA、FGFBP2、FCGR3A、SPON2** 等 NK 细胞毒/活化标志，**无任何血红蛋白基因**。
2. **表达水平**（log1p(CP10K)，簇 5 均值）：NKG7 4.69（100% 细胞表达）、GNLY 4.31（96%）、GZMB 3.50（94%）、PRF1 2.97（94%）、FCGR3A 2.15（82%）——**FCGR3A 高表达进一步指向 CD16⁺ NK 亚群**；而血红蛋白基因 HBA1 仅 0.27（10% 细胞弱表达）。
3. **marker 签名覆盖缺陷**（`results/tables/04_marker_gene_coverage.csv`）：Erythroid 签名 `[HBB, HBA1, HBA2, AHSP, CA1, ALAS2]` 中 **6 个基因仅 HBA1 存在**，其余 5 个在该 PBMC 数据中被 `min_cells≥3` 过滤（血红蛋白属红细胞裂解释放的环境 RNA，表达极稀疏）。单基因签名叠加环境污染 + 簇水平 z 标准化，被放大成"最高分"。

> 这正是一个标志性教训：**marker 打分若不对签名基因覆盖度做检查，在签名退化为单基因时会因环境 RNA 污染产生系统性误判**。本例中 CellTypist 与 SingleR 独立、一致地判为 NK，而 marker 的 Erythroid 标签是三者中唯一错误的那个。

#### 案例 2：簇 3 = CD8 T 与 MAIT/γδT 边界（真实生物学歧义）

簇 3（312 细胞）三方法一致率仅 21.2%：CellTypist 判 CD8 T（纯度 40.7%），SingleR 判 MAIT/gdT（纯度 50.6%），Marker 判 CD8 T。簇内同时存在 CD8 T、MAIT、γδT 的连续分化谱，三方法在"效应 CD8 T 与 MAIT/gdT"的边界上各有侧重，这反映的是**免疫细胞连续分化状态本身的分界模糊**，而非某方法出错。单核簇 4（CD16⁺ 非经典单核 vs CD14⁺ 经典单核，SingleR 分辨率不足）、簇 7（血小板，Monaco 参考集无此标签→Unassigned）同理，分别对应**方法分辨率限制**与**参考集覆盖缺口**。

### 2.6 敏感性分析：剔除疑似双细胞

剔除 31 个 Scrublet 疑似双细胞后（2607 细胞）：

| 比较 | 全细胞 | 去双细胞 |
|---|---:|---:|
| CellTypist vs SingleR | 0.761 | 0.762 |
| CellTypist vs Marker | 0.702 | 0.703 |
| SingleR vs Marker | 0.684 | 0.685 |
| 三方法全一致 | 0.595 | 0.596 |

**双细胞对一致性结论无影响**，说明上述分歧源于方法学与生物学本身，而非数据中的双细胞污染。

### 2.7 方法内部稳健性

| 比较 | 一致率 |
|---|---:|
| CellTypist 直接预测 vs 多数投票（粗分类） | 0.770 |
| CellTypist 直接预测 vs 多数投票（原始标签） | 0.677 |
| SingleR label.fine vs label.main（均映射粗分类） | 0.801 |

CellTypist 的过聚类多数投票显著改变了部分细胞的标签（原始标签一致率仅 0.68），这提醒：**CellTypist 推荐的多数据投票模式会平滑单细胞层面的异质性**，逐细胞比较时应优先用直接预测结果（本报告主结果即采用直接预测）。

---

## 3. 讨论

### 3.1 三方法为何在主流群高度一致、在边界/低覆盖处分歧

三种方法原理正交——监督分类器（CellTypist）、参考相关（SingleR）、人工先验（Marker）——却对 CD4 T、CD14 单核、B 细胞给出几乎一致的判定（一致率 86–100%），说明这些细胞类型在转录组空间中是**边界清晰、可稳定分离**的群体。

分歧可归纳为四类来源：

1. **方法学盲区**：marker 打分基于固定签名，对 NK/MAIT/Treg 等"签名与相邻类共线"的类型无法独立区分（本分析有意未设 NKT 签名，即因 CD3⁺NK 与 CD8 T/NK 高度共线）。
2. **签名退化 + 环境污染**（簇 5）：Erythroid 签名退化为单基因后，环境血红蛋白 RNA 被 z 标准化放大为误判。
3. **连续分化边界**（簇 3）：效应 CD8 T ↔ MAIT/γδT 本无硬边界。
4. **参考集覆盖/分辨率**（簇 4、簇 7）：Monaco 参考集无血小板标签、对非经典单核分辨率不足。

### 3.2 实践建议

1. **自动注释为主、marker 为核查**：CellTypist / SingleR（有合适参考时）应作为注释主判据；经典 marker 应定位为**证据核查工具**，而非独立判据。
2. **marker 打分前必须检查签名覆盖度**：对每个签名报告"命中基因数/总基因数"，覆盖度 <50% 的签名（本例 Erythroid 1/6、Plasma 3/6）应禁用或降级。
3. **一致性分析比单一方法更可靠**："至少两法一致"（95.7%）作为高置信标签集合，比任何单一方法都稳健；仅 4.3% 细胞（113 个）无法达成两法共识，是应人工复核的焦点。
4. **标签粒度必须先对齐再比较**：SingleR 若用 label.main 会因"T cells"类粗标签与另两法产生虚假分歧；本分析用 label.fine 才使三法在同一粒度可比（SingleR fine vs main 的粗分类一致率仅 0.80，可见粒度选择的影响）。

### 3.3 局限

- 单一数据集（PBMC 3k、~2700 细胞）且为健康供体，结论外推到组织、疾病或大样本时需谨慎。
- Marker 方法在簇水平做 z 标准化，本身即依赖聚类质量；不同分辨率（Leiden res=1.0）会改变簇边界与 marker 标签。
- CellTypist 模型（Immune_All_Low）与 Monaco 参考集均为他人训练的参考资源，其标签定义与本分析的统一分类体系映射存在主观成分。
- 未对"Unassigned / 罕见标签"做单独建模，仅计数报告（合计 28 细胞，1.1%）。

---

## 4. 方法学文献

- Domínguez Conde C, et al. Cross-tissue immune cell analysis reveals tissue-specific features in humans. *Science*. 2022;376(6594):eabl5197.（CellTypist）
- Aran D, et al. Reference-based analysis of lung single-cell sequencing reveals a transitional profibrotic macrophage. *Nat Immunol*. 2019;20(2):163-172.（SingleR）
- Monaco G, et al. RNA-Seq Signatures Normalized by mRNA Abundance Allow Absolute Deconvolution of Human Immune Cell Types. *Cell Rep*. 2019;26(6):1627-1640.e7.（Monaco 参考集）

---

## 附录：交付文件清单

### 报告
- `report/PBMC3k_注释一致性分析报告.md`（本文件）

### 中间数据
- `data/processed/pbmc3k_processed.h5ad`（质控后全基因 AnnData：X=scale、layers['counts'/'lognorm']、raw=lognorm）

### 结果表（`results/tables/`）
- `01_qc_summary.csv`（QC 汇总）
- `02_celltypist_labels.csv`、`02_celltypist_model_info.csv`（CellTypist 标签与模型信息）
- `03_singler_labels.csv`、`03_singler_reference_info.csv`（SingleR 标签与参考信息）
- `04_marker_cluster_scores.csv`、`04_marker_cluster_z.csv`、`04_marker_labels.csv`、`04_marker_gene_coverage.csv`、`04_cluster_top_de_genes.csv`（Marker 打分、签名覆盖与差异基因）
- `05_labels_all.csv`（逐细胞三方法原始+统一标签+共识）
- `05_pairwise_metrics.csv`（两两一致性指标，含去双细胞敏感性）
- `05_confusion_<A>_vs_<B>.csv`（两两混淆矩阵，计数与行归一化）
- `05_per_type_agreement.csv`（按细胞类型一致率）
- `05_cluster_method_table.csv`（簇 × 方法多数标签与一致率）
- `05_disagreement_patterns.csv`（高频分歧模式 + marker 证据）
- `05_unmapped_labels.csv`、`05_within_method_metrics.csv`

### 图（`results/figures/`）
- `01_qc.png`（QC 直方图）
- `04_marker_heatmap.png`（簇 × 签名 z 分数热图）
- `06_umap_annotations.png`（Leiden 簇 + 三方法粗分类 UMAP）
- `06_confusion_matrices.png`（两两混淆矩阵）
- `06_agreement_overview.png`（一致率 / κ·ARI·NMI / 按类型 / 置信度分布）
- `06_marker_dotplot.png`（经典 marker 基因各簇表达点图，直观呈现簇 5 的 NK 基因高表达 vs "Erythroid" 标签的矛盾）
- `06_cluster_agreement.png`（各簇共识构成 + 三方法一致率）

### 脚本（`scripts/`）
- `common.py`、`01_preprocess.py`、`02_annotate_celltypist.py`、`03_annotate_singler.py`、`04_annotate_markers.py`、`05_harmonize_and_compare.py`、`06_figures.py`、`setup_env.sh`、`download_monaco.py`、`run_all.sh`
