# 第 12 章 独立验证与拓展

## 本章目标

学完本章，你将能够：

1. 说明为什么独立验证是生信论文的“生死线”，能区分过拟合与真信号；
2. 用 GEOquery 获取 GSE14520，独立验证 hub 基因的表达与生存关联、验证风险模型；
3. 在 HPA（人类蛋白图谱）查询 hub 基因蛋白水平的免疫组化染色，并正确截图引用；
4. 理解免疫浸润分析（CIBERSORT / ssGSEA）的基本思想及其与焦亡的关联（进阶内容）；
5. 了解单细胞分析、实验验证等拓展方向，并正确认识纯生信挖掘论文的审稿趋势。

## 正文

### 12.1 为什么必须独立验证

前面几章的所有分析——差异表达、PPI、KM 生存、LASSO 建模——都是在同一份 TCGA-LIHC 数据上完成的。任何统计建模都会“记住”训练数据里的噪声，尤其当候选基因很多、还用了最优截点时，模型在 TCGA 上表现好是“应该的”，说明不了推广价值。这就是**过拟合（overfitting）**。

**独立验证（independent validation）**就是用一份从未参与建模的数据（外部队列）检验同样的结论：如果 hub 基因的高低表达分组、风险模型的高低危分组在验证集里依然显著、AUC 依然可观，审稿人才会相信这是真信号而不是数据巧合。在现在的审稿环境里，“只在训练集显著”几乎必然被质疑；而“训练集发现 + 独立队列验证”是最低限度的证据链，也是本章的主题。

### 12.2 GEO 独立队列验证：GSE14520

GSE14520 是复旦大学中山医院的 HBV 相关肝细胞癌队列（Affymetrix U133A 2.0 芯片，含约 240 例 HCC 患者的肿瘤与癌旁样本），带有随访信息，是 HCC 生信论文最常用的独立验证队列之一。下载方法见第 6 章（需要联网）。

代码思路（教学演示，真实运行需联网下载）：

```r
library(GEOquery)
gse <- getGEO("GSE14520", GSEMatrix = TRUE, getGPL = TRUE)[[1]]

expr  <- exprs(gse)     # 探针 × 样本 的表达矩阵
pdata <- pData(gse)     # 样本信息：用 colnames() 查看列名，
                        # 找到生存时间与结局列（随访信息在 pData 中）
```

拿到数据后按三步验证：

1. **探针 → 基因名映射**：用平台注释包（U133A 2.0 对应 hgu133a2.db）把探针 ID 转成基因符号；一个基因对应多个探针时合并（取均值或方差最大的探针）；
2. **表达验证**：hub 基因在肿瘤 vs 癌旁中的差异方向是否与 TCGA 一致（箱线图 + wilcoxon 检验）；
3. **生存验证**：用与 TCGA 相同的分组方式（如中位数）在同一基因上分组，画 KM 曲线做 log-rank 检验；对 LASSO 风险模型，把 TCGA 训练好的系数**原封不动**套到 GSE14520 对应基因的表达上算风险评分，再检验高低危组的生存差异与 AUC——系数必须来自训练集、不得在验证集上重新拟合，否则验证就失效了。

（教学演示说明：上面是思路与关键代码骨架，正式分析还要处理缺失值、样本匹配、时间单位统一等细节。）

### 12.3 蛋白水平验证：HPA 查免疫组化

mRNA 表达不等于蛋白表达。人类蛋白图谱（Human Protein Atlas，proteinatlas.org，简称 HPA）收录了数万种蛋白在正常组织与多种癌症中的免疫组化（immunohistochemistry, IHC）染色图像，可免费在线查看，是“mRNA 之外再加一层证据”的常用手段。操作步骤：

1. 打开 proteinatlas.org，搜索 hub 基因（如 GSDME）；
2. 看 **Pathology（病理）** 页签，找 Liver cancer（肝细胞癌）条目下的染色图；**Tissue（组织）** 页签可看正常肝组织的染色；
3. 对比正常肝细胞与 HCC 组织的染色强度（negative / weak / moderate / strong）和阳性比例，判断蛋白水平是否有差异、方向是否与 mRNA 一致；
4. **截图引用**：截图前记录基因名、数据来源（Pathology/Tissue）、查看日期；论文中注明来源 "Human Protein Atlas (proteinatlas.org)" 与访问日期。HPA 的数据库内容以知识共享许可发布，可署名引用，但请遵守其使用条款，不要自行改图。

注意：HPA 每个基因的 HCC 染色样本数有限，IHC 染色只能作为支持性证据（正文或补充材料的一张图），不能替代定量实验。

### 12.4 免疫浸润分析简介（进阶内容）

肿瘤微环境（tumor microenvironment）中浸润的免疫细胞类型与比例，与预后和治疗反应密切相关。细胞焦亡本身就是一种促炎性细胞死亡（见第 1 章），会释放炎症因子、招募免疫细胞，因此“焦亡基因 × 免疫浸润”是这类论文常见的配套分析。两种主流思路：

- **CIBERSORT**：用特征基因矩阵（LM22，对应 22 种免疫细胞）对整体表达谱做**反卷积（deconvolution）**，估算每个样本中各种免疫细胞的比例。官方版本需在其网站注册，对数据标准化有要求，门槛较高；
- **ssGSEA**（单样本基因集富集分析，GSVA 包实现）：对每个样本计算一组免疫细胞标记基因集的富集分数，分数高低代表该细胞类型的相对丰度。实现简单、免费可复现，是新手首选：

```r
# BiocManager::install("GSVA")
library(GSVA)
# 免疫细胞标记基因集（例如从文献整理的 marker 列表，元素为基因符号向量）
# gs <- readRDS("immune_markers.rds")
# score <- gsva(expr, gs, method = "ssgsea")   # 行 = 样本（新旧版本参数写法略有差异）
```

拿到浸润分数后，可以做的分析有：各免疫细胞在高危/低危组间的差异（wilcoxon 检验 + 箱线图）、浸润分数与风险评分的相关性（cor.test）、焦亡基因表达与免疫浸润的相关热图等。诚实说明：本章只是概念入门；CIBERSORT 的完整流程与免疫结果的解读属于进阶内容，新手应先把“独立验证”做扎实，再决定是否加这一节。

### 12.5 临床特征关联（可选）

锦上添花的描述性分析：检验 hub 基因表达与临床特征的关系——例如表达在临床分期（stage I–IV）或病理分级（grade）之间是否有差异（多组比较用 Kruskal-Wallis 检验），与性别、HBV 感染等二分类特征的关系（两组比较用 Wilcoxon/Mann-Whitney 检验）。结果用箱线图/小提琴图展示。注意两点：这类分析是描述性的，不能当作因果证据；分组样本量不均衡时结果容易误导，显著性解释要克制。

### 12.6 扩展方向与实验闭环

1. **单细胞测序（scRNA-seq）**：在 HCC 单细胞数据中（可在 GEO 以 hepatocellular carcinoma + single cell 检索，有多个公开数据集）看焦亡基因主要在哪类细胞（如肿瘤细胞、巨噬细胞）中表达，比 bulk 数据精细得多。学习成本高，通常作为论文的补充分析，属进阶方向。
2. **实验验证（qPCR / Western blot）**：在细胞系或临床样本中检测 hub 基因的 mRNA/蛋白表达，或用敲低/过表达观察细胞表型——这是证据链的“闭环”。如实说明：湿实验需要实验室条件，不是所有生信学习者都能完成，它是**加分项**而非必需项。
3. **关于纯生信论文的审稿趋势，必须诚实**：早期（约 2015–2020 年）“公共数据库挖掘 + 生信分析”就能发表不错的期刊；近年来 Frontiers in Genetics、BMC Cancer 等期刊仍会接收挖掘类论文，但审稿人普遍要求至少有一份独立验证队列，越来越多期刊要求补充实验验证（哪怕简单的 qPCR）。高分期刊（如 Cancer Cell、Gut 等）几乎不可能接受纯挖掘论文。对新手而言，合理路径是：公共数据挖掘（本教程全部内容）→ 独立验证（GSE14520 + HPA）→ 有条件再补实验 → 选择适合的期刊投稿。不要相信“保证发表”的承诺，发表难度在逐年上升。

## 本章小结

- 独立验证是区分“过拟合”与“真信号”的关键，也是审稿的基本要求；
- GSE14520 可做表达与生存的独立验证；风险模型验证时系数必须沿用训练集、不得重新拟合；
- HPA 提供蛋白水平的 IHC 证据，截图引用需注明来源与访问日期；
- CIBERSORT / ssGSEA 可估算免疫浸润，焦亡与炎症免疫天然关联，属进阶内容；
- 临床特征关联是可选描述性分析，解读需克制；
- 单细胞与湿实验是拓展方向：实验验证是加分项；纯生信挖掘论文的门槛逐年提高，独立验证是底线。

## 思考题

1. 为什么“在验证集上重新拟合系数再评估”会让独立验证失效？请举一个具体例子。
2. HPA 染色显示蛋白高表达，而 TCGA 的 mRNA 显示低表达，可能的原因有哪些？（提示：翻译调控、样本异质性）
3. 如果你的风险模型在 GSE14520 中 AUC 只有 0.55，你会从哪些方向排查？（提示：基因重叠、系数、分组方式）
4. 一篇只做数据挖掘、没有任何独立验证的论文，放在今天会收到怎样的审稿反馈？
