信息速览
CPTAC-LSCC 是国家癌症研究所(NCI)临床蛋白质组肿瘤分析联盟(Clinical Proteomic Tumor Analysis Consortium,CPTAC)对肺鳞状细胞癌的一次蛋白基因组表征。它最核心的一件事,是把同一批手术标本拆成三个质谱分册测量:全蛋白组、磷酸化蛋白组、乙酰化蛋白组,各自的丰度与位点数据与基因组、转录组并列。质谱层是它的主场,基因组层是配合。
它的规模不大。论文口径是 108 例未治疗原发肿瘤配 99 例癌旁正常组织,PDC 门户按病例字段报 115,GDC 侧按鳞癌子集报 109。三个数字都真实,但定义不同,任何多组学分析写方案前都要先确认自己用的是哪一个。
这里处理的是「单癌种的蛋白层有多深、鳞癌的特殊性落在蛋白层的哪几处、PDC 与 GDC 两侧各放什么」三件事,不涉及对整个联盟十癌种拼图的介绍。规模、结构与边界三类数字以 PDC 与 GDC 的接口查询结果和 2021 年 Cell 主论文为准。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全称 | CPTAC Lung Squamous Cell Carcinoma |
| 疾病 | 肺鳞状细胞癌(lung squamous cell carcinoma),非小细胞肺癌的鳞癌亚型 |
| 发起 | 美国国家癌症研究所(NCI)CPTAC 联盟,CPTAC3 阶段 |
| 病例规模 | 论文 108 例肿瘤 + 99 例癌旁;PDC 115 例;GDC 109 例 |
| 蛋白分册 | 三册:全蛋白组 PDC000234、磷酸化 PDC000232、乙酰化 PDC000233 |
| 质谱平台 | TMT11 同量异位标记,鸟枪法液相色谱串联质谱 |
| 蛋白侧文件 | 三册合计 3,770 份(2,224 + 1,169 + 377) |
| 基因组侧文件 | GDC 鳞癌子集 6,836 份,开放 1,659、受控 5,177 |
| 基因组侧体积 | 开放约 11.5 GB,受控约 42.5 TB |
| 测序策略 | WGS、WXS、RNA-seq、miRNA-seq、甲基化阵列五种 |
| 病例编号 | GDC 侧全部为 C3L 前缀,与 TCGA barcode 不通用 |
| 影像 | 无。CT 与病理切片在 TCIA 独立集合 |
| 主论文 | Satpathy et al., Cell 184(16):4348–4371 (2021),PMID 34358469 |
| 派生入口 | cBioPortal 研究 lusc_cptac_2021 |
| 访问 | 蛋白处理后数据开放;原始质谱需登录;基因组受控层经 dbGaP phs001287 |
§1 它要解决的具体麻烦
1.1 一句话结论:它补的是肺鳞癌「蛋白层几乎空白」这个缺口
肺鳞癌的基因组研究不算少。TCGA 的 LUSC 项目有 504 例,突变、拷贝数、甲基化、转录组都齐,驱动基因的框架在上一个十年就定了。但那条线的蛋白层只有反相蛋白阵列,测的是几百个抗体覆盖的蛋白,丰度是相对的,磷酸化位点基本不覆盖。
蛋白层空白带来的直接后果是:基因层面的改变,说不清有多少真正落到了蛋白与磷酸化上。一个基因扩增了,蛋白是否跟着升高,磷酸化是否随之改变,这些在 TCGA 的肺鳞癌里回答不了。CPTAC-LSCC 就是为回答这类问题建的:同一位患者的 DNA、RNA、蛋白、磷酸化、乙酰化被一起测,且质谱是深度定量的鸟枪法而不是抗体阵列。
它做的另一个判断是「不要只看一册」:把乙酰化单独立册,意味着设计者认为翻译后修饰之间的交叉调控是这个癌种的关键变量之一。这一点在论文摘要里被写成代谢通路受多种修饰交叉调控,属于设计时就锚定的假设,不是分析后追加的观察。
| 你想问的问题 | 需要什么 | 它够不够 |
|---|---|---|
| 某基因扩增后蛋白是否随之升高 | 同源拷贝数与蛋白丰度 | 够,两侧都有同一批病例 |
| 激酶活性变化落在哪些磷酸化位点 | 磷酸化位点丰度矩阵 | 够,是三个分册之一 |
| 鳞癌与腺癌的蛋白层差异 | 两个队列的同平台蛋白矩阵 | 够,同属 CPTAC3 同平台 |
| 蛋白层改变能否预测预后 | 蛋白矩阵与随访 | 可以,但样本量限制效应估计的稳定性 |
| 影像组学与蛋白层关联 | 同源 CT | 不够,本数据无影像 |
| 训练一个泛化性蛋白预测模型 | 上万例量级的配对数 | 不够,单队列只有百余例 |
1.2 三条常见的错误期待
第一条,把它当作「肺鳞癌的 TCGA 替代品」。它不是。TCGA-LUSC 有 504 例,覆盖广度大,适合做频率统计与亚型定义;CPTAC-LSCC 只有百余例,深度大,适合做机制验证。正确用法是把 TCGA 当发现层、CPTAC 当验证层,而不是二选一。
第二条,把它当作「一份可以直接喂给模型的大表」。它不是一个文件,是至少五个物理入口:PDC 的三个分册,GDC 的一个项目子集,外加 cBioPortal 的派生视图。这五处的行、列、样本名、缺失结构都不同,第一步工作永远是拼接与对齐。
第三条,把它当作「带有影像的多模态集」。CPTAC 的肺鳞癌确实有影像,但影像在癌症影像档案库(TCIA)的独立集合里,按影像自己的编号组织,与质谱队列的病例覆盖不同。指望一个下载包同时拿到 CT 与蛋白矩阵,会落空。
1.3 它能给到的与给不到的
| 能给到 | 给不到 |
|---|---|
| 同一批患者的全蛋白组与磷酸化蛋白组定量 | 超过百余例的规模,或跨癌种的统一口径 |
| 乙酰化蛋白组这一层的独立定量 | 糖基化、泛素化等其他修饰的独立分册 |
| 与基因组、转录组配对的多组学结构 | 共享主键,两侧编号需人工对齐 |
| 论文中已定义的分型与关键基因结论 | 现成的机器学习基准或划分好的训练测试集 |
| 组织水平的样本与 aliquot 溯源 | 任何像素级的图像 |
| 质控指标与质谱原始文件 | 前瞻随访之外的疗效评价 |
「给不到」一栏里的第一项最容易被忽略:三条测量线的深度换来的是样本量的收缩,这是设计上的取舍,不是数据缺陷。任何试图用它做大规模统计的尝试,都会在效应估计的置信区间上付出代价。
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 |
|---|---|
| 手上有肺鳞癌的基因组队列,缺蛋白层 | 提供同癌种的质谱蛋白与磷酸化作为验证层 |
| 想验证某个基因改变是否传递到蛋白 | 提供同源拷贝数、突变与蛋白丰度,可直接配对 |
| 做激酶活性推断,缺位点级磷酸化数据 | 提供磷酸化位点丰度矩阵,是三个分册中体量居中的一册 |
| 想比较鳞癌与腺癌的蛋白层 | 同属 CPTAC3 同平台,可与肺腺癌队列并行 |
| 需要一个带生存随访的多组学小队列做方法学试验 | 百余例的规模正好够跑通流程、不适合下结论 |
| 想复现某篇论文的分型结果 | 有论文配套补充材料与 cBioPortal 派生视图 |
左列写的是研究者的处境,不是数据集的特性。这个区分决定了这段表格能不能直接用:如果你的处境不在左列,右列的内容对你价值有限。
1.5 一句话判断
要做肺鳞癌的蛋白层研究,它目前是少有的、能用质谱而不是抗体回答问题的公共资源;要做大样本的分子流行病学,它不是合适的地方。
1.6 不适合谁:四条边界
如果你的需求是「一个足够大的训练集」,它给不了。百余例肿瘤、三个分册,每个分册的有效行数取决于缺失过滤的严格程度,训练深度模型几乎必然欠拟合。这类需求应转向泛癌整合资源或大规模临床蛋白组队列。
如果你的需求是「影像与分子的配对」,它给不了。本数据无影像,TCIA 的肺鳞癌影像集合是另一套编号、另一批覆盖,配对要在两个库之间做二次对齐,且对齐后剩余的病例数会进一步缩小。
如果你的需求是「一个统一的多组学表」,它给不了。PDC 与 GDC 各自为政,三册质谱也各自成文件,合并这件事必须自己做,且没有官方脚本。
如果你的需求是「临床疗效数据」,它给不了。病例是前瞻采集的手术标本,随访以生存为主,没有结构化疗效评价,也没有当代免疫治疗的暴露记录。
§2 数据构成与规格
2.1 四层结构:病例、样本、等分样、文件
PDC 与 GDC 的记录层级是同构的,只是字段命名不同。
| 层级 | PDC 叫法 | GDC 叫法 | 说明 |
|---|---|---|---|
| 第一层 | case | case | 一位患者,是跨库对齐的唯一锚点 |
| 第二层 | sample | sample | 一份组织或血液,带样本类型字段 |
| 第三层 | aliquot | aliquot | 一份用于测量的等分样本,带质量与容量字段 |
| 第四层 | file | file | 一份物理文件,带格式、类别、访问级别 |
PDC 侧的三册各自独立登记病例,所以「115 例」在这三册里是同一个数,不是三次相加。这一点容易出错:看到三个分册各写 115,误以为队列有 345 例。
文件层是理解语料结构的关键。同一次质谱运行产出三份文件:处理后的谱图、肽段谱图匹配结果、原始谱图。前两份标开放,后一份标 Proprietary。所以「一册有多少份文件」大致等于「质谱运行次数乘以三」,再加上少量装配表、质控与元数据。
2.2 字段与记录的字典
| 字段类别 | 字段 | 取值示例 | 用途 |
|---|---|---|---|
| 研究标识 | pdc_study_id | PDC000234 | 定位分册,不是定位病例 |
| 研究标识 | study_id | UUID 形式 | PDC 内部主键 |
| 分析层 | analytical_fraction | Proteome / Phosphoproteome / Acetylome | 决定这一册测什么 |
| 平台 | experiment_type | TMT11 | 同量异位标记的十一重通道 |
| 疾病 | disease_type | Lung Squamous Cell Carcinoma | 该册对应的疾病标签 |
| 部位 | primary_site | Bronchus and lung | 原发部位,另有少量未报告值 |
| 规模 | cases_count | 115 | 该册登记的病例数 |
| 规模 | aliquots_count | 217 | 该册登记的等分样数 |
| 禁运 | embargo_date | 空 | 三个分册均无禁运 |
| 文件 | data_category | Processed Mass Spectra | 文件的功能分类 |
| 文件 | file_type | Open Standard / Proprietary | 决定是否需要登录 |
| 文件 | file_format | mzML / mzIdentML / tsv | 决定用什么工具读 |
| 病例 | case_submitter_id | C3L-xxxxx | 病例级标识,跨库对齐的锚点 |
disease_type 字段的 115 例并非全部落在同一个标签上,接口返回的是「肺鳞状细胞癌;其他」两个值的组合,部位字段里也有「支气管与肺;未报告」的组合。说明这批病例在元数据里不是干净的单值。做筛选时若用等值匹配,会漏掉被归入「其他」的那部分。
2.3 一条记录的解剖
取一册全蛋白组文件包来看。文件名遵循固定模板:
#--PDC000234 的蛋白装配文件组(文件名原样)
CPTAC3_Lung_Squamous_Cell_Carcinoma_Proteome.tmt11.tsv 98 MB
CPTAC3_Lung_Squamous_Cell_Carcinoma_Proteome.peptides.tsv 224 MB
CPTAC3_Lung_Squamous_Cell_Carcinoma_Proteome.summary.tsv 4.5 MB
CPTAC3_Lung_Squamous_Cell_Carcinoma_Proteome.sample.txt 7.2 KB
四个文件各管一件事:
.tmt11.tsv是定量主表,行是蛋白或基因,列是样本,值是归一后的比值;.peptides.tsv是肽段级证据,行是肽段序列,用于回溯定量结果由哪些肽段支撑;.summary.tsv是质谱运行的汇总指标,用于判断某次运行是否达到质控线;.sample.txt是样本对照表,把列名映射回样本与病例。
第四份文件最小,却最重要。任何跨库对齐都要从它开始:先拿到本册的列名到病例的映射,再拿这个病例标识去另一库查询。
磷酸化册的文件组结构相同,文件名中的 Proteome 换成 Phosphoproteome,另外多一个 .phosphosite.tmt11.tsv 与一个 .phosphopeptide.tmt11.tsv,分别按位点与按磷酸肽聚合。乙酰化册的结构与此同构。
2.4 三个分册的语料体量
三册的病例数与等分样数完全一致,文件数却相差几倍,原因在质谱运行次数不同。
| 分册 | 编号 | 质谱运行(PSM 文件数) | 处理谱图 | 原始谱图 | 蛋白装配 | 该册文件合计 |
|---|---|---|---|---|---|---|
| 全蛋白组 | PDC000234 | 550 | 550 | 550 | 5 | 2,224 |
| 磷酸化 | PDC000232 | 286 | 286 | 286 | 6 | 1,169 |
| 乙酰化 | PDC000233 | 88 | 88 | 88 | 6 | 377 |
运行次数之所以差这么多,是因为磷酸化与乙酰化都要先做肽段富集,富集产物的复杂度远低于全蛋白组,需要的分级更少。乙酰化只有 88 次运行,是三者中最薄的一层,这个差异直接决定了后面分析策略的不同。
有一点容易误读:运行次数少不等于蛋白数少,也不等于某一层的质量差。分级的多少反映的是样品复杂度,不是测量质量。但运行数少确实意味着在统计上更易受批次效应影响。
2.5 三册之外:GDC 侧的基因组层
PDC 只管蛋白。基因组、转录组、表观组在 GDC 的 CPTAC-3 项目里,与另外五个癌种混在一个项目中,需要按部位与疾病类型筛出鳞癌子集。
| 类别 | 文件数 | 说明 |
|---|---|---|
| 简单核苷酸变异 | 2,194 | 原始与注释变异,多路调用器各一套 |
| 测序读段 | 1,419 | 比对后的 BAM |
| 结构变异 | 871 | 结构重排与融合候选 |
| 转录组 | 822 | 基因、转录本、剪接、miRNA 表达 |
| DNA 甲基化 | 603 | beta 值 |
| 体细胞结构变异 | 487 | 与结构变异分开计数 |
| 拷贝数变异 | 440 | 分段与基因级 |
两个结构变异类别分开计数,是 GDC 的公私两套定义的产物:一套含胚系,一套只含体细胞。把两类相加会重复计数,正确做法是先确认分析所需的是哪一类。
2.6 与同类资源的字段差异
| 资源 | 蛋白层 | 基因组层 | 规模 | 主键 |
|---|---|---|---|---|
| CPTAC-LSCC | 质谱全蛋白组、磷酸化、乙酰化 | GDC 全测序 | 百余例 | C3L 编号 |
| TCGA-LUSC | 反相蛋白阵列 | GDC 全测序 | 504 例 | TCGA barcode |
| 肺腺癌 CPTAC 队列 | 质谱全蛋白组、磷酸化等 | GDC 全测序 | 百余例 | C3L 编号 |
| 头颈鳞癌 CPTAC 队列 | 质谱全蛋白组、磷酸化 | GDC 全测序 | 百余例 | C3L 编号 |
这张表能读出一件事:CPTAC 体系内各癌种用同一套编号前缀与同一套分册习惯,跨癌种的合并成本远低于跨计划的合并成本。做鳞癌的横向比较,CPTAC 内部是最省事的组合;做样本量的统计研究,必须把 TCGA 拉进来,代价是处理两套编号与两种蛋白测量原理。
§3 核心层 A:身份与边界
3.1 它在 CPTAC 里的坐标
CPTAC 是一个跨十余年、分三阶段的联盟计划,LSCC 属于第三阶段(CPTAC3)的十个癌种之一。它与肺腺癌、头颈鳞癌、胰腺癌、胃腺癌、子宫内膜癌、肾透明细胞癌、胶质母细胞瘤等并列,共享同一套样本采集规范、同一套质控与同一套数据托管架构。
这个坐标很重要,因为它决定了三件事:第一,病例编号前缀统一为 C3L,跨癌种合并时不必处理命名冲突;第二,质谱平台统一为 TMT 同量异位标记,跨癌种比较不像跨平台那样需要大规模归一;第三,数据托管统一走 PDC 与 GDC,接口一致,脚本可复用。
反过来说,凡是写「CPTAC 十癌种」的结论,都要问一句是否包含鳞癌,以及包含的是哪一版数据。
3.2 与泛癌总库的分工
联盟层与癌种层是两件事。联盟层讲的是方法学与十癌种的拼图,癌种层讲的是这个癌种的生物学与数据结构。本节要说的分工在三处体现得最清楚:
| 维度 | 联盟层关心 | 鳞癌这一支关心 |
|---|---|---|
| 规模 | 十癌种合计多少例 | 鳞癌单独多少例,三个口径怎么来的 |
| 结构 | 统一的分册命名习惯 | 三册的体量与运行次数差异 |
| 边界 | 哪些癌种进了联盟 | 鳞癌数据里没有什么,与谁容易混淆 |
| 使用 | 泛癌矩阵怎么取 | 单癌种怎么从五个入口拼成一份可用数据 |
把两层的结论混用,是这类条目最常见的错误来源。比如「CPTAC 有一千余例肿瘤」这个数字放进鳞癌的语境里就是错的。
3.3 病例构成与三个口径
三个口径各有出处,也各有用途。
| 口径 | 数值 | 出处 | 适合用来做什么 |
|---|---|---|---|
| 论文口径 | 108 例肿瘤 + 99 例癌旁 | 2021 年 Cell 主论文,经 cBioPortal 研究描述转述 | 复现论文的分型与基因结论 |
| PDC 门户口径 | 115 例 | PDC 接口的 cases_count 字段,三册一致 | 统计蛋白侧登记的病例总数 |
| GDC 侧口径 | 109 例 | GDC 接口按部位与疾病类型筛选 | 统计基因组侧的病例数 |
三个数字的差不是错误,是三种登记口径的差。论文口径是最严的,它要求该病例在整合分析中被实际使用;门户口径是登记口径,包含进入测量但未进入最终分析的部分;GDC 口径是测序登记口径,与蛋白侧不完全对应。
写分析方案时的规矩只有一条:在方法部分明确写出用的是哪个口径,并在结果里统一。中途切换口径会让样本量对不上,而且这种对不上在稿件里很难被读者察觉。
3.4 与 TCGA-LUSC 的边界:最容易混淆的一处
两个项目都叫肺鳞癌,都以手术标本为基础,都进了 GDC 的视野,但它们不一样。
| 维度 | CPTAC-LSCC | TCGA-LUSC |
|---|---|---|
| 病例数 | 百余例(三个口径) | 504 例 |
| 蛋白层 | 质谱全蛋白组、磷酸化、乙酰化 | 反相蛋白阵列 |
| 基因组层 | WGS、WXS、RNA-seq、miRNA、甲基化 | 同左,另有更多分析流程版本 |
| 编号前缀 | C3L | TCGA |
| 定位 | 蛋白层深度 | 覆盖广度 |
| 主要用途 | 机制验证、蛋白-基因传递 | 频率统计、亚型定义 |
编号前缀是最硬的证据。GDC 侧 109 例的病例标识全部以 C3L 开头,没有一例带 TCGA 前缀。这意味着在 GDC 内部,两个项目在命名空间上是分开的,按 barcode 前缀合并会直接得到空集。
需要把两者放在一起时,只能做「概念上的并行比较」:各自算完各自的统计量,再比较结论是否一致,而不是把原始矩阵拼起来。这一点在鳞癌与腺癌的三角对照里同样适用。
3.5 论文口径与门户口径的差
108 与 115 的差,常被问成「是不是丢了七例」。更准确的表述是:论文分析集是从登记集里按分析需要筛出来的子集,筛选标准写在论文方法里,包括样本质量、组学完整性、重复测量判定等。筛掉的部分仍在门户里,只是没进最终的整合表。
这对使用者的实际影响是:如果你想复现论文的图,必须用论文口径,否则会多出几例在论文里不存在的样本;如果你只是想要尽可能多的蛋白矩阵行,用门户口径,但要知道多出来的那部分没有论文层面的验证。
3.6 时间线与版本
| 时间 | 事件 |
|---|---|
| CPTAC3 阶段 | 鳞癌入列,样本前瞻采集 |
| 2021 年 8 月 | 主论文在线发表,Cell 184 卷 16 期 |
| 2021 年起 | 三个质谱分册在 PDC 发布,补充材料随册打包 |
| 后续 | GDC 侧随 CPTAC-3 项目统一更新;cBioPortal 派生视图于 2026 年 1 月导入 |
| 持续 | PDC 按发布说明滚动更新,无统一版号字段 |
版本管理上有一个不对称:基因组侧有 dbGaP 的版本号体系可以追溯,蛋白侧没有。要说明「我用的哪一版」,只能记下下载日期与文件校验值。
3.7 许可与使用边界
| 数据 | 状态 | 门槛 |
|---|---|---|
| 处理后的质谱、肽段谱图匹配、蛋白装配、质控指标 | 开放标准 | 无,可直接下载 |
| 原始质谱文件 | Proprietary(厂商私有格式) | 需登录并接受条款 |
| 临床与生物样本注释 | 开放 | 无 |
| 比对读段、变异、甲基化原始强度 | 受控 | 经 dbGaP phs001287 申请,需机构与数据使用协议 |
分层不是随意设的。开放的是「再分析价值高、不可重新识别」的部分,受控的是「可以重新识别或可被滥用」的部分。原始质谱之所以标 Proprietary,是格式与体量的原因,而不是隐私原因。
3.8 标识体系与命名习惯
三个分册的编号连号:磷酸化是 PDC000232,乙酰化是 PDC000233,全蛋白组是 PDC000234。连号不是巧合,是同一批样本按分析层拆册登记的结果。记住这一点,在看到别的癌种也是连号时就不会误判为「复制粘贴」。
病例标识前缀 C3L 中的 C3 指 CPTAC3,L 指 Lung。同项目内其他癌种用不同字母,这种设计让编号本身带上了癌种信息,代价是癌种改名后编号无法跟随。
文件命名同样带信息:CPTAC3 前缀标明阶段,Lung_Squamous_Cell_Carcinoma 标明疾病,Proteome 或 Phosphoproteome 标明分析层,tmt11 标明平台。名字长,但字段足够,可以不看目录就判断文件归属。
3.9 明确不包含什么
| 不含 | 说明 |
|---|---|
| 放射影像 | 无 DICOM、无 CT,影像在 TCIA 独立集合 |
| 病理全切片 | 同上,本数据内无图像文件 |
| 糖基化与泛素化独立分册 | 乙酰化之外的其他修饰没有独立登记册 |
| 疗效评价 | 无结构化反应判定 |
| 当代免疫治疗暴露 | 采样与随访集中在手术与辅助治疗阶段 |
| 单细胞层面数据 | 全部为组织块水平的混合测量 |
| 医学图像以外的一切像素 | 无任何图像模态 |
| 统一版号 | 蛋白侧无版本字段 |
这张表比任何功能罗列都更有用:知道它不含什么,才能判断手上的方案是否走错了地方。
§4 核心层 B:三册质谱的深度与鳞癌特异之处
4.1 三个分册不是三份副本
三册共享 115 例、217 份等分样的登记骨架,但内容完全不同。全蛋白组测的是蛋白丰度,磷酸化测的是磷酸化位点,乙酰化测的是乙酰化位点。同一份等分样在三个分册里各出一次,是同一块组织的三次不同测量,不是三份拷贝。
这个结构决定了三件事。第一,跨册合并时行不是对等的,蛋白基因与磷酸化位点与乙酰化位点三套标识体系互不重合,只能按基因符号做粗粒度聚合。第二,缺失结构不同,某一蛋白在全蛋白组里测得准,在磷酸化册里可能根本没有对应位点。第三,与基因组连接时,同一个基因在三个分册里对应的是三种不同的修饰状态,回答的是三个不同的问题。
| 分册 | 行单位 | 与基因的连接方式 | 典型问题 |
|---|---|---|---|
| 全蛋白组 | 蛋白或基因 | 按基因符号 | 该基因扩增后蛋白是否升高 |
| 磷酸化 | 磷酸化位点 | 按位点所在蛋白再落到基因 | 该蛋白的哪些位点被激活 |
| 乙酰化 | 乙酰化位点 | 同上 | 乙酰化是否调控代谢通路 |
4.2 全蛋白组:语料最厚的一册
全蛋白组是运行次数最多的一册,550 次质谱运行,对应 550 份处理后谱图与 550 份肽段谱图匹配。它的定量主表在 98 MB 上下,肽段级证据表约 224 MB,两者的体量差说明主表是压缩聚合过的,肽段表保留了原始证据链。
这一册的使用要点有三条。第一条,行标识通常给的是基因符号而不是蛋白登录号,这会丢掉同一基因多个异构体之间的差异,也意味着做蛋白层面的精细分析时无法区分异构体。第二条,定量值是归一后的相对值,不是绝对浓度,跨分册不能直接比较,跨癌种更不能。第三条,缺失值是常态而非例外,任何相关性分析都要先明确缺失处理策略。
第三点值得展开。质谱数据的缺失有两种来源:一是蛋白确实没表达,二是表达但没被采到。这两种缺失在数值上无法区分,处理方法也不同。常规做法是设一个缺失率阈值过滤行,再用某种填补方法补列。阈值选得松,行多但噪声大;阈值选得紧,行少但干净。一百余例的样本量下,这个阈值的每一个百分点都直接影响可用的行数。
4.3 磷酸化:体量居中,分析价值最集中
磷酸化册 286 次运行。按文件量算是三册里的中间一档;按分析价值算,它是被引用最多的一册,因为激酶活性的推断、信号通路的激活状态,几乎都从这一册出发。
它的文件组比另外两册多两个:按位点聚合的表与按磷酸肽聚合的表。前者一行一个位点,适合做位点级统计;后者保留同一磷酸肽上多个位点的共现关系,适合做修饰协同分析。两种聚合方式各有适用场景,混用会得到不一致的位点计数。
位点标识通常用「蛋白标识 + 位点位置」的组合形式。这个标识在跨版本、跨数据库注释更新时可能漂移,尤其是当蛋白序列的参考版本变化时,同一物理位点的编号会改变。把它当作稳定的主键是危险的;通常要额外保留肽段序列作为交叉验证。
4.4 乙酰化:最薄的一册,但揭示了设计者的假设
乙酰化册只有 88 次运行,是三册里最薄的。体量小不等于次要,它反映的是一个明确的设计判断:乙酰化与代谢相关,而鳞癌的代谢重编程被认为是这个癌种的重要特征。
薄带来的直接限制是统计功效低。88 次运行覆盖 115 例,从运行数少于病例数这一事实就能推出:乙酰化册无法做到每例都有一份独立的运行,必然存在合并测量或部分病例未覆盖。使用这一册时,首先要做的就是数清楚实际有定量值的样本数,而不是直接拿 115 当分母。
这一册在全国范围内能查到的复现工作最少,原因也在这里:体量小、缺失多,做不出稳健的结论。把它当作补充证据层是合适的,当作独立结论层就不合适。
4.5 质谱平台:TMT11 意味着什么
三册统一用 TMT11,即十一重同量异位标记。含义是一次质谱运行可以同时测量十一个样本的混合产物,再靠报告离子的微小质量差把它们分开。
这套设计带来三个后果。
其一,通道复用带来批次结构。十个通道装十份样本,第十一个通常留给参照通道,于是同一批次内的样本在数值上可比,跨批次则要依赖参照通道做桥接。这意味着批次效应不是可以被忽略的技术噪声,而是数据结构的一部分,必须作为协变量或分层变量处理。
其二,比值而不是强度。TMT 的输出天然是比值形式,绝对量需要另设标定。所以「某蛋白升高两倍」这类表述在同一分册内成立,跨分册、跨癌种比较倍数则不成立。
其三,通道数决定了单次运行的样本量上限。十一重意味着每批次最多十份实验样本,百余例摊下来就是十余个批次,这是分析时必须显式建模的最小批次单元。
| 平台属性 | 数值或形态 | 对分析的影响 |
|---|---|---|
| 标记重数 | 11 | 每批次最多十份实验样本 |
| 参照通道 | 通常一个 | 提供跨批次桥接 |
| 输出形式 | log2 比值 | 只能做相对比较 |
| 分级数 | 各册不同 | 决定每批次的运行数 |
| 富集需求 | 磷酸化与乙酰化需要 | 决定了运行数少 |
4.6 鳞癌特异之处:论文摘要里的几条落点
论文摘要给出了这个癌种在蛋白层的几处具体发现,它们同时也是使用这份数据时可复现的锚点。
第一条是替代驱动。NSD3 被提出作为 FGFR1 扩增肿瘤的替代驱动因素。这条结论依赖的是拷贝数扩增与蛋白丰度的对应关系,属于单癌种内部就能回答的问题,不需要跨癌种比较。
第二条是靶点过表达。低 p63 肿瘤中 survivin 过表达,后者是有成药潜力的靶点。这条依赖的是蛋白丰度与免疫组化式标记的结合,需要把蛋白定量与标记基因的状态一起看。
第三条是不可成药基因的可切入路径。SOX2 本身难以直接成靶,论文给出的思路是通过染色质修饰因子(如 LSD1、EZH2)间接作用于 SOX2 高表达肿瘤。这条把蛋白层与表观层连在一起,属于需要多册联合的分析。
第四条是修饰交叉调控。论文认为代谢通路受包括泛素化在内的多种翻译后修饰交叉调控。这条直接解释了为什么要单独设乙酰化分册——代谢与修饰的耦合在这个癌种里是主线之一。
第五条是 CDKN2A 的解读需要更细致。论文认为在判定 CDK4/6 抑制失败之前,应先看 RB1 的蛋白表达与磷酸化状态。这条把基因层(突变)与蛋白层(表达与修饰)捆在一起,是最典型的「单看基因会误判」的例子。
第五条落点尤其值得单列,因为它给出了一条可迁移的分析范式:
#--范式示意:基因层与蛋白层的一致性检验(RB1 与 CDKN2A 的关系)
#--步骤一:从 GDC 取鳞癌子集的 CDKN2A 突变与拷贝数
#--步骤二:从 PDC 取全蛋白组的 RB1 蛋白丰度
#--步骤三:从 PDC 取磷酸化册的 RB1 位点丰度
#--步骤四:按病例对齐三张表,比较有突变组与无突变组的 RB1 蛋白与位点分布
#--要点:对齐以病例标识为键,不以样本名为键;样本名含批次信息,不能跨册直接匹配
这段是范式而不是完整脚本:四个步骤各自都要处理缺失与批次,把它们串起来的前提是先有一份干净的病例级映射表。
4.7 与腺癌、头颈鳞癌的三角对照
论文把鳞癌、腺癌、头颈鳞癌放在一起做了三角对照,结论是既有独有也有共有的可治疗弱点。这个设计在数据层面留下的痕迹是:三个队列同属一个联盟、同一平台、同一分册习惯,跨队列合并的技术障碍比跨计划合并小得多。
但技术障碍小不等于可以直接合并。三个队列的通道分配、参照选择、批次划分各不相同,合并前必须做平台内归一。以「同平台所以可比」为由跳过归一,是这类多队列分析里最常见的陷阱。
| 对照对象 | 与鳞癌的关系 | 合并的主要障碍 |
|---|---|---|
| 肺腺癌队列 | 同器官不同组织学 | 归一方法与批次结构不同 |
| 头颈鳞癌队列 | 同为鳞状细胞癌 | 组织来源与富集策略不同 |
| TCGA-LUSC | 同癌种不同计划 | 蛋白测量原理不同,无法与质谱矩阵拼接 |
三角对照的价值不在于把三份矩阵拼成一份,而在于把三个独立结论放在一起看是否互相支持。这个用法不需要拼接,也避开了所有合并的技术问题。
4.8 数据量级的现实感受
把三册的体量放在一起,可以得到一个直观印象:
| 项 | 量级 |
|---|---|
| 蛋白定量主表 | 每册约百兆字节 |
| 肽段级证据表 | 每册二三百兆字节 |
| 单册开放文件总量 | 在千兆字节级别 |
| 三册合计文件 | 3,770 份 |
| 基因组侧受控文件 | 数万吉字节 |
| 基因组侧开放文件 | 十余吉字节 |
蛋白侧可以整册下载到本地,基因组侧的原始读段则几乎不可能整份搬到本地。这决定了工作流的基本形态:蛋白在本地算,基因组在云端查或者按需拉取少数几份处理后的文件。
§5 核心层 C:怎么拿到、怎么接上
5.1 三条通道与各自门槛
| 通道 | 能拿到什么 | 门槛 | 适合谁 |
|---|---|---|---|
| PDC 网页与下载客户端 | 三册全部开放文件 | 无 | 要完整矩阵的人 |
| PDC 接口 | 研究元数据、文件清单、文件级信息 | 无 | 要做自动化取数的人 |
| GDC 接口 | 鳞癌子集的病例、样本、文件与临床 | 受控文件需授权 | 要做跨库对齐的人 |
| cBioPortal | 已整理好的派生矩阵 | 无 | 想先看结论再决定下不下原始数据的人 |
| TCIA | 影像集合 | 无 | 要做多模态的人,但需另行对齐 |
最常见的工作流是先走第四通道看结构,再走第一通道取全量。直接把 PDC 全量拉下来再摸索的做法,费时且容易在文件命名上打转。
5.2 用 PDC 接口拿分册概览
PDC 的 GraphQL 接口可以按分册编号查询核心字段。下面这段脚本一次查三册,把病例数、等分样数与平台打出来。
#--一次查三个分册的登记规模(PDC GraphQL,只读)
import json, urllib.request
URL = "https://pdc.cancer.gov/graphql"
def gql(query):
req = urllib.request.Request(
URL, data=json.dumps({"query": query}).encode(),
headers={"Content-Type": "application/json"})
with urllib.request.urlopen(req) as r:
return json.load(r)
for sid in ["PDC000234", "PDC000232", "PDC000233"]:
q = ('{study(pdc_study_id:"%s"){pdc_study_id analytical_fraction '
'experiment_type cases_count aliquots_count disease_type}}') % sid
row = gql(q)["data"]["study"][0]
print(row["pdc_study_id"], row["analytical_fraction"],
row["experiment_type"], row["cases_count"], row["aliquots_count"])
三个分册的病例数与等分样数会完全一致,这正是「按层拆册、样本共享」的证据。如果三者不一致,说明登记方式变了,需要重新核对。
5.3 用文件清单判断语料结构
只查规模不够,还要看文件是怎么构成的。按文件类别与格式聚合,能一眼看出哪一册运行多、哪一册运行少。
#--按文件类别聚合三册,判断语料结构(PDC GraphQL)
import json, urllib.request, collections
def gql(query):
req = urllib.request.Request(
"https://pdc.cancer.gov/graphql",
data=json.dumps({"query": query}).encode(),
headers={"Content-Type": "application/json"})
with urllib.request.urlopen(req) as r:
return json.load(r)
for sid in ["PDC000234", "PDC000232", "PDC000233"]:
q = '{filesPerStudy(pdc_study_id:"%s"){data_category file_type file_format}}' % sid
files = gql(q)["data"]["filesPerStudy"]
c = collections.Counter((f["data_category"], f["file_type"]) for f in files)
print(sid, "总文件", len(files))
for (cat, typ), n in c.most_common():
print(" ", cat, typ, n)
输出的关键看两行:处理谱图与原始谱图的数量应相同,肽段谱图匹配的两种格式也应相同。若某一行数对不上,说明该册混入了其他批次的数据。
5.4 用 GDC 接口筛出鳞癌子集
GDC 侧不能按「LSCC」这个名称直接检索,必须同时限定项目、部位与疾病类型三个条件。只限定疾病类型会把头颈鳞癌一起带进来。
#--筛出 CPTAC-3 里的肺鳞癌病例(GDC REST,无鉴权即可查元数据)
curl -s -G "https://api.gdc.cancer.gov/cases" \
--data-urlencode 'filters={"op":"and","content":[
{"op":"=","content":{"field":"project.project_id","value":"CPTAC-3"}},
{"op":"=","content":{"field":"primary_site","value":"Bronchus and lung"}},
{"op":"=","content":{"field":"disease_type","value":"Squamous Cell Neoplasms"}}]}' \
--data-urlencode 'fields=submitter_id,diagnoses.ajcc_pathologic_stage' \
--data-urlencode 'size=200' -o lscc_cases.json
#--数一数,并确认病例编号前缀是否为 C3L
python3 -c "
import json
h = json.load(open('lscc_cases.json'))['data']['hits']
print('cases', len(h))
print('TCGA 前缀', sum(1 for x in h if x['submitter_id'].startswith('TCGA')))
print('C3L 前缀', sum(1 for x in h if x['submitter_id'].startswith('C3L')))
"
这段脚本的第二个用途是排除混淆:如果「TCGA 前缀」不是 0,说明筛选条件写错了,把别的项目带进来了。
5.5 两库对齐:以病例标识为键
PDC 与 GDC 没有共享主键。PDC 的文件里给的是样本名与病例标识,GDC 给的是病例提交号。能不能对上,取决于两边的病例标识是否采用同一套命名。
#--两库对齐的最小流程:先各自取病例集合,再求交
import json
#--PDC 侧:从 sample.txt 里读出列名与病例的映射(下载后本地读)
#--格式约定:一行一个样本,至少含样本名与病例标识两列
b2c = {}
with open("Proteome.sample.txt", encoding="utf-8") as fh:
header = fh.readline().rstrip("\n").split("\t")
idx_case = 0 #--按实际表头替换为病例标识所在列
for line in fh:
parts = line.rstrip("\n").split("\t")
b2c[parts[0]] = parts[idx_case]
#--GDC 侧:上一步落地的病例清单
gdc_cases = {x["submitter_id"]
for x in json.load(open("lscc_cases.json"))["data"]["hits"]}
pdc_cases = set(b2c.values())
print("PDC 病例", len(pdc_cases))
print("GDC 病例", len(gdc_cases))
print("交集", len(pdc_cases & gdc_cases))
print("仅在 GDC", sorted(pdc_cases - gdc_cases)[:5])
三个数字会对得上或对不上,取决于两侧登记的时间差与口径差。交集就是能同时用两侧数据的病例,它是任何跨库分析的真实分母。
5.6 常见取数故障
| 现象 | 原因 | 处理 |
|---|---|---|
| 三册病例数相同但文件名里的样本数不同 | 各册运行数不同,同一等分样可能多次进样 | 按病例聚合,不按文件计数 |
| 用疾病类型筛 GDC 得到头颈鳞癌 | 条件只限了疾病类型 | 同时限部位为支气管与肺 |
| 按 TCGA barcode 拼两库得到空集 | 两库编号体系不同 | 用病例标识,不用 barcode |
| 蛋白矩阵行数每次读出来都不一样 | 读到的是不同版本的文件 | 固定校验值或下载日期 |
| 磷酸化位点在两次更新后编号变了 | 参考蛋白序列版本变化 | 用肽段序列做交叉验证 |
| 乙酰化册按 115 做分母算覆盖率 | 该册运行数少于病例数 | 先数有值的样本 |
| 跨癌种比较蛋白倍数 | 参照通道不同,比值不可比 | 只在癌种内比较倍数 |
| 下载后打不开原始谱图 | 标 Proprietary,需登录 | 走登录通道或只用处理后数据 |
八条里有五条源于同一个根因:把「登记的单位」当成了「测量的单位」。登记按病例,测量按运行,两者在一百多例的小队列里差别不小。
§6 与库内词条的关系
6.1 关系图谱
本篇与库内已有的三个 CPTAC 条目是分工关系,不是别名、不是版本、也不是合并视图。
| 条目 | 定位 | 与本篇的关系 |
|---|---|---|
| CPTAC 联盟总条目 | 十癌种拼图、联盟机制、方法学总述 | 本篇是其下鳞癌一支的深度展开 |
| CPTAC 影像总览条目 | 各癌种 TCIA 影像集合的索引 | 本篇明确把影像排除在外,需要影像时转那里 |
| CPTAC 胰腺癌条目 | 同联盟消化系统队列 | 方法学同构的平行条目,分册结构与编号习惯可直接对照 |
| CPTAC 胃癌条目 | 同联盟消化系统队列 | 同上,适合做跨癌种方法迁移 |
| TCGA-LUSC(若库内存在) | 同癌种基因组侧 | 与本篇构成「广度—深度」的互补 |
联盟总条目讲的是「十癌种拼起来是什么样」,本篇讲的是「单个癌种的蛋白层有多深、鳞癌的特异性落在哪几处、为什么需要三个分册」。两者的读者群有重叠,但问题不同。
6.2 与联盟总条目的分工
最容易出现的重复是规模数字。联盟层报的是十癌种合计,本篇报的是鳞癌单独。若两处都写「CPTAC 有一千余例」,本篇就失去了存在意义;反过来,若联盟层逐条展开每个癌种的分册结构,那也比较臃肿。
分界线可以这样划:联盟层回答「有哪些癌种、怎么统一处理、怎么跨癌种取数」;本篇回答「鳞癌这一支的三个分册怎么读、三个口径怎么选、与 TCGA 的边界在哪」。凡是需要知道「别的癌种也这样吗」的问题,回到联盟层;凡是需要知道「鳞癌这一册具体怎么用」的问题,留在这里。
6.3 与影像条目的分工
CPTAC 的肺鳞癌影像在 TCIA 有独立集合,按影像自己的编号组织。它与本篇的质谱队列不是一一对应的,影像覆盖的病例数与质谱覆盖的病例数不同,覆盖率也不对称。
需要做影像与蛋白关联的研究,流程是:先从影像集合拿到放射或病理覆盖的病例清单,再从本篇的分册里筛出这些病例,剩下的交集才是可用的配对集。这个交集通常比任何一侧单独的数量都小,写方案时应以交集为有效样本量。
6.4 与肺腺癌条目的组合
肺鳞癌与肺腺癌同属非小细胞肺癌,两个队列同属 CPTAC3、同平台、同编号体系。组合使用的正确方式是并行比较而不是拼接:各自算出蛋白层统计量,再比较方向与幅度是否一致。
拼接的错误在于把两个队列的蛋白矩阵直接合并且按癌种打标签。这样做忽略了批次结构(两队列的批次划分不同)与参照通道的差异,得到的癌种间差异会混入技术差异。若确实需要合并建模,至少要把队列作为批次变量纳入模型。
6.5 与 TCGA-LUSC 条目的组合
这是最容易出错的一处组合,因为两个条目都叫肺鳞癌。
正确组合方式有三条。第一,把 TCGA-LUSC 当发现层,把本篇当验证层:TCGA 定义亚型与频率,本篇检验这些结论在蛋白层是否成立。第二,绝不按 barcode 拼接原始矩阵。第三,任何跨计划的样本量相加都要先声明口径,因为两者对「一例」的定义不同。
6.6 三种组合配方
| 目标 | 组合方式 | 注意 |
|---|---|---|
| 验证蛋白层结论 | 本篇蛋白矩阵 + TCGA-LUSC 亚型标签 | 标签按病例对齐,不按 barcode |
| 找跨癌种的共有弱点 | 本篇 + 肺腺癌队列 + 头颈鳞癌队列 | 必须先做平台内归一 |
| 做多模态关联 | 本篇蛋白矩阵 + TCIA 影像集合 | 以交集病例为有效样本 |
| 做方法学试验 | 本篇三册 + 公开的小型基准集 | 三册先各自跑通再合并 |
§7 质量与已知问题
7.0 阅读本节前的一个前置校正
评价这份数据时不要用「数据集大小」这把尺子。它是研究成果的附随数据,设计目标不是覆盖尽可能多的病例,而是在一个癌种上把蛋白层测到当时的极限。用它跟 TCGA 比病例数,结论必然是「太小」;用它跟反相蛋白阵列比蛋白数与位点覆盖,结论就会反过来。
两种常见的框架错位都源于同一个习惯:先看规模,再看内容。对这份数据应当反过来,先看它测了哪几层、每层的运行次数与位点粒度,再看病例数够不够支撑你想要的统计量。
还有一个错位是把它当「已经整理好的表」。三册、两库、一个派生视图,没有任何一处提供合并好的矩阵。把它当表用,第一步就会卡住;把它当语料用,取舍就清楚了。
7.1 五维评分
| 维度 | 评分 | 依据 |
|---|---|---|
| 规模 | 偏低 | 百余例肿瘤,三个口径并存 |
| 深度 | 高 | 全蛋白组、磷酸化、乙酰化三层独立定量 |
| 结构一致性 | 中 | 三册同构,但跨库无共享主键 |
| 可获取性 | 高 | 蛋白处理后数据开放,无需申请 |
| 可复现性 | 中 | 论文口径与门户口径不同,需自行对齐 |
评分只在同癌种的公共资源之间比较才有意义。拿到别的癌种去比,规模一项会变,深度一项基本不变,因为 CPTAC 各癌种的分册结构是统一的。
7.3 已知的、可枚举的偏差
| 偏差 | 性质 | 影响 |
|---|---|---|
| 病例数小 | 设计取舍 | 效应估计的置信区间宽 |
| 三口径并存 | 登记差异 | 样本量易混用 |
| 乙酰化运行数少 | 富集复杂度决定的 | 该册统计功效最弱 |
| 无影像 | 数据分家 | 多模态研究需二次对齐 |
| TMT 批次结构 | 平台固有 | 必须显式建模 |
| 蛋白侧无版号 | 工程疏漏 | 版本无法精确定位 |
| 位点标识可能漂移 | 注释更新导致 | 需要肽段序列做锚 |
| 部分元数据非单值 | 采集侧未清洗 | 等值筛选会漏记录 |
八条偏差里,只有「蛋白侧无版号」属于工程层面的可改进项,其余都是设计或平台的固有属性。把固有属性当缺陷批评,是没有读懂取舍;把工程疏漏当固有属性接受,是降低了数据的使用标准。
7.4 外部验证矩阵
| 验证方向 | 可用对照 | 能验证什么 |
|---|---|---|
| 同癌种基因组层 | TCGA-LUSC | 突变频率与亚型定义是否一致 |
| 同癌种影像层 | TCIA 肺鳞癌集合 | 蛋白分型能否映射到影像表型 |
| 同平台跨癌种 | 肺腺癌、头颈鳞癌队列 | 分型方法能否迁移 |
| 同癌种独立队列 | 其他公共肺鳞癌蛋白组数据,如可用 | 结论是否可重复 |
| 下游派生视图 | cBioPortal 派生研究 | 预处理是否引入系统性差异 |
外部验证的实际执行成本不同。同癌种基因组层的验证最便宜,因为数据都在 GDC;同癌种独立队列的验证最贵,取决于外部资源是否可获取、测量原理是否可比。
7.5 它为何能持续:因为它被当成底座而不是产品
这类数据的存续不靠用户活跃度,靠的是机构承载与下游依赖。联盟有固定的经费周期与标本采集网络,数据有指定的托管节点,派生分析平台持续从中取数。三者形成闭环:只要联盟还在采集新癌种,旧队列就会作为方法学基线被反复引用。
另一个支撑因素是分册结构稳定。三个分册的命名习惯、字段约定、文件组织方式,在多个癌种之间是一致的。这种一致性降低了长期维护成本,也使得工具链可以复用。对一个要存续十余年的数据资源来说,一致性比先进性更重要。
最后一条是开放策略。蛋白层不设申请门槛,意味着任何人不需要建账号就能验证结论。验证成本低,引用就会持续,这是公共数据活得久的基本机制。
§8 在生态中的位置
8.1 组织方式
一份标本从采集到发布经过多个环节:采集站点提供带临床注释的标本,生物样本中心做处理与质控并分发,蛋白表征中心做质谱测量,数据协调中心收集并格式化数据,数据共同体内托管发布,数据分析中心做整合分析与可视化。
这个链条的每个环节都有对应的机构,链条本身比任何单一团队都稳定。理解这一点,才能理解为什么这份数据的结构看起来「不是为使用者设计的」:它是沿着生产流程组织的,而不是沿着分析需求组织的。
8.2 同类项目对照
| 项目 | 蛋白测量方式 | 规模特征 | 与鳞癌的关系 |
|---|---|---|---|
| 本队列 | 质谱三层 | 百余例 | 本体 |
| TCGA-LUSC | 反相蛋白阵列 | 五百余例 | 同癌种,蛋白层浅 |
| 泛癌蛋白基因组整合 | 质谱 | 十余癌种合计 | 包含本队列 |
| 大规模临床蛋白组队列 | 质谱,多为血浆 | 千例以上 | 组织类型不同,不可直接替代 |
对照的结论是:这份数据的生态位是「组织水平的深度蛋白层」,不是「血浆蛋白标志物的发现集」,也不是「大样本的流行病学队列」。三者的问题不同,不能互相替代。
8.3 为什么这种小队列仍然必要
有人会问,百余例的数据在千例级队列面前还有没有必要。答案在问题的性质上。千例级队列能回答「这个标志物在人群中是否稳定」,回答不了「这个基因改变传到蛋白层时经过了哪几步修饰」。后者需要的是同一批人的多层测量,而这恰恰是规模扩张时最先被牺牲的东西。
所以生态位是清晰的:小队列做机制,大队列做稳健性,两者互补而不是竞争。把小队列的结论直接当成临床可用的证据,是把机制验证当成了流行病学结论,这是这条链上最常见的越界。
§9 使用指引
9.1 三种角色的路径
| 角色 | 关心的问题 | 建议路径 |
|---|---|---|
| 做机制验证的研究者 | 某个基因改变是否传到蛋白 | 先看派生视图,再取全蛋白组与磷酸化两册 |
| 做方法学的研究者 | 缺失处理与批次校正怎么比较 | 三册全下,先在单册内跑通再合并 |
| 做工程的开发者 | 怎么把两库拼成一份可复用的表 | 先写对齐脚本,再封装读取接口 |
| 做多模态的研究者 | 影像与蛋白怎么接 | 先从影像侧取病例清单,再回到质谱侧筛 |
四种角色的共性是:都要先解决对齐,再解决分析。跳过对齐直接建模,得到的模型学到的是批次而不是生物学。
9.2 一条最短的可用流程
如果只想在一个下午内跑通全流程,可以按下面四个步骤走。
#--最短流程:三册登记规模 -> 鳞癌病例清单 -> 交集 -> 单册装载
import json, urllib.request
def gql(query):
req = urllib.request.Request(
"https://pdc.cancer.gov/graphql",
data=json.dumps({"query": query}).encode(),
headers={"Content-Type": "application/json"})
with urllib.request.urlopen(req) as r:
return json.load(r)
#--第一步:确认三册登记一致
for sid in ["PDC000234", "PDC000232", "PDC000233"]:
q = '{study(pdc_study_id:"%s"){cases_count aliquots_count}}' % sid
s = gql(q)["data"]["study"][0]
print(sid, s["cases_count"], s["aliquots_count"])
#--第二步:GDC 侧鳞癌病例数(条件三选一不可少)
flt = ('{"op":"and","content":['
'{"op":"=","content":{"field":"project.project_id","value":"CPTAC-3"}},'
'{"op":"=","content":{"field":"primary_site","value":"Bronchus and lung"}},'
'{"op":"=","content":{"field":"disease_type","value":"Squamous Cell Neoplasms"}}]}')
url = ("https://api.gdc.cancer.gov/cases?filters=" + urllib.parse.quote(flt)
+ "&size=0")
print("GDC 鳞癌病例", json.load(urllib.request.urlopen(url))["data"]["pagination"]["total"])
size=0 只取计数,不拉记录,是探数的标准做法。第一步的三个数字应当完全一致,第二步的数字应当略低于第一步,差额就是两侧登记的口径差。
9.3 一个可复用的装载函数
真正开始分析时,需要的不是计数,而是把单册蛋白主表读成矩阵,并把列名映射回病例。
#--单册装载:读定量主表,把列名映射为病例标识
import pandas as pd
def load_fraction(mat_path, sample_map_path):
mat = pd.read_csv(mat_path, sep="\t", low_memory=False)
#--第一列通常是基因或蛋白标识,设为索引
mat = mat.set_index(mat.columns[0])
smap = pd.read_csv(sample_map_path, sep="\t")
#--表头字段名随册不同,按前缀匹配而非硬编码
col_case = [c for c in smap.columns if "case" in c.lower()][0]
col_samp = [c for c in smap.columns if "sample" in c.lower() or "aliquot" in c.lower()][0]
rename = dict(zip(smap[col_samp].astype(str), smap[col_case].astype(str)))
keep = [c for c in mat.columns if c in rename]
mat = mat[keep].rename(columns=rename)
#--同一病例可能多列,按中位数聚合
return mat.T.groupby(level=0).median().T
prot = load_fraction("Proteome.tmt11.tsv", "Proteome.sample.txt")
print(prot.shape) #--行=蛋白,列=病例
这段代码有两处刻意写得宽松:表头字段按包含关系匹配,因为三册的字段名不完全相同;同一病例多列时取中位数,因为质谱对同一病例可能有重复进样。两处都是为了在不看具体文件的情况下跑通。
§10 AI 使用声明
10.1 这份数据在模型训练中的位置
它不适合做预训练语料,适合做评估与微调。原因不是规模小,而是结构特殊:三个分册的缺失结构不同,跨库无共享主键,直接喂给模型会学到大量与生物学无关的模式。
合理的用法有三类:作为多组学融合方法的验证集;作为缺失值填补方法的测试集;作为「基因改变到蛋白层」的传递规律的学习样本。三类用法的共同前提都是先把对齐与缺失处理好。
10.2 DAIMS 视角下的三层描述
DAIMS 是一套描述数据对象、代理与映射关系的框架,用来回答「数据是怎么来的、谁动过、怎么对应」。用它的视角看这份数据,可以分成三层。
| 层次 | 内容 | 本数据的表现 |
|---|---|---|
| 数据对象层 | 有哪些对象与文件 | 三册质谱文件、基因组文件、临床注释 |
| 代理层 | 谁产生、谁处理 | 采集站点、蛋白表征中心、数据协调中心 |
| 映射层 | 对象之间怎么对应 | 以病例标识为锚,两侧编号体系不同 |
三层里最薄弱的是映射层。数据对象层清晰,代理层有机构可查,映射层却只有病例标识这一个锚点,且两侧标识不通用。任何自动化流程都必须在映射层上额外做校验,否则会把错误的配对当成事实。
10.3 生成式模型的使用边界
用生成式模型处理这份数据时,有三条硬约束。
第一,任何关于样本量的回答都要带口径。百余例这个区间里有三个数字,分别对应论文、蛋白门户与基因组侧,混用即错。
第二,任何关于基因频率或效应量的回答都必须说明来源层。来自论文的、来自派生视图的、来自原始文件的,三者的定义不同。
第三,不要让模型凭空生成病例标识或文件路径。这份数据的文件命名有固定模板,但路径结构随下载方式变化,生成的路径几乎一定是错的。
10.4 不应由它承担的判断
治疗选择、预后告知、药物敏感性预测这三类判断,都不该由这份数据支撑。它是回顾性的手术标本队列,没有前瞻设计,没有当代治疗的随机分配,也没有外部验证。把它的蛋白-基因关联包装成临床工具,是把机制线索当成了临床证据。
常见误读(避坑清单)
| 常见说法 | 实际情况 | 证据 |
|---|---|---|
| 「CPTAC-LSCC 就是肺鳞癌的 TCGA」 | 两个独立计划,编号体系不同,蛋白测量原理不同 | GDC 侧 CPTAC 病例全部为 C3L 前缀 |
| 「三个分册各一百多例,一共三百多例」 | 三册共享同一批病例,不是相加 | PDC 三册 cases_count 相同 |
| 「它是 2020 年 Satoshi 的论文」 | 作者姓 Satpathy,2021 年 Cell 184 卷 16 期 | PubMed 34358469 |
| 「一百多例就是全部可分析样本」 | 论文口径、蛋白门户、基因组侧三个数字并存 | Cell 摘要与两库接口 |
| 「带 CT 和病理切片」 | 本数据无任何图像,影像在独立集合 | 三个分册的文件类别清单 |
| 「原始质谱可以直接下」 | 标 Proprietary,需登录 | 文件类型字段为 Proprietary |
| 「按 TCGA barcode 就能拼两库」 | 两库编号不通用,需按病例标识对齐 | 侧筛选结果显示无 TCGA 前缀 |
| 「乙酰化和全蛋白组一样厚」 | 乙酰化运行数远少于全蛋白组 | 两册的谱图文件数相差数倍 |
| 「蛋白丰度可以跨癌种比倍数」 | 参照通道不同,比值不可比 | TMT 输出的相对性质 |
| 「同平台合并就不用归一」 | 批次划分不同,必须归一 | 每批次通道上限决定十余个批次 |
| 「病例数少所以数据质量差」 | 规模是设计取舍,深度是换取的目标 | 三层独立定量的结构 |
| 「冻结成一版之后不再变」 | 蛋白侧无版号,按发布说明滚动更新 | 分册字段无版本项 |
FAQ
Q1:到底该用 108 还是 115?
复现论文用 108,统计蛋白侧登记规模用 115。两者差的是进入整合分析的门槛,不是数据丢失。写方法时说明用的是哪一个,结果里不要中途切换。
Q2:为什么 GDC 侧少了几例?
基因组侧的登记与蛋白侧的登记是两条线,两侧对「纳入」的定义不同。差额来自测序未完成、样本不合格或登记时点不同,具体到某一位病例的原因只能逐例查。
Q3:三个分册能合并成一份矩阵吗?
能,但只能按基因粗粒度合并,且会丢掉位点级信息。更常见的做法是各有各的用法:全蛋白组看丰度,磷酸化看激活,乙酰化看代谢相关修饰。强行合并成一份,会得到一个既丢信息又增加噪声的表。
Q4:乙酰化那一册能用吗?
能用,但要先数清楚有定量值的样本数。它的运行数少于病例数,直接拿病例数当分母算覆盖率会得到错误的结论。
Q5:怎么确认两库的病例能对上?
从蛋白册的样本对照表里取出病例标识集合,从 GDC 按三个条件筛出的病例集合,两者求交。交集数量就是可配对病例数,写方案时用它当分母。
Q6:有没有现成的机器学习基准?
没有官方榜单。常见的对照方式是用派生视图复现论文的分型结论,或用同平台的其他癌种做迁移测试。这两类对照都不是标准化基准,结论的可比性取决于预处理是否一致。
Q7:能拿它做药敏预测吗?
不建议。它没有药物暴露的随机分配,也没有结构化的疗效评价,蛋白丰度与药物反应的关联只能当作假说生成,不能当作预测模型。
Q8:批次效应有多严重?
严重到必须处理。每批次最多十份实验样本,百余例摊成十余个批次,批次与生物学变量如果不正交,任何组间比较都会混入批次差异。正确做法是把批次作为协变量或分层变量,而不是事后看主成分是否分离。
Q9:为什么不直接给一份合并好的矩阵?
因为数据是沿生产流程组织的,不是沿分析需求组织的。三册各自独立测量、独立打包,合并这一步在设计上就留给了使用者。
术语表
| 术语 | 含义 |
|---|---|
| CPTAC | 临床蛋白质组肿瘤分析联盟,美国国家癌症研究所主持 |
| LSCC | 肺鳞状细胞癌,非小细胞肺癌的鳞癌亚型 |
| LUSC | 同一疾病的另一个常见缩写,多用于 TCGA 项目名 |
| PDC | 蛋白质组数据共同体内,蛋白数据的托管门户 |
| GDC | 基因组数据共同体内,测序数据的托管门户 |
| 分册 | 按分析层拆分的独立登记单元,各有编号 |
| 分析层 | 该册测量的是全蛋白、磷酸化位点还是乙酰化位点 |
| 等分样 | 一份用于单次测量的样本等分 |
| TMT11 | 十一重同量异位标记,一次运行最多测十份实验样本 |
| 报告离子 | 标记物在质谱中产生的定量信号 |
| 参照通道 | TMT 批次内用于跨批次桥接的固定样本通道 |
| 位点 | 蛋白上发生修饰的具体氨基酸位置 |
| 磷酸肽 | 带磷酸化修饰的肽段 |
| 富集 | 在质谱前把目标修饰的肽段选择性富集出来 |
| 缺失率阈值 | 一行数据允许多少比例缺失才保留 |
| 谱图匹配 | 质谱信号与理论肽段的对应结果 |
| 蛋白装配 | 把肽段级结果汇总为蛋白级结果的中间表 |
| dbGaP | 受控访问的基因型与表型数据库 |
| C3L | CPTAC3 肺队列的病例编号前缀 |
| DAIMS | 描述数据对象、代理与映射关系的框架 |
| 派生视图 | 在原始数据之上再加工得到的简化视图 |
| 三角对照 | 三个相关队列放在一起比较结论的方向与幅度 |
附录 A:核心数字核对表
| 项 | 数值 | 来源 |
|---|---|---|
| 论文肿瘤例数 | 108 | Cell 2021,经派生研究描述转述 |
| 论文癌旁例数 | 99 | 同上 |
| PDC 登记病例 | 115 | PDC 三个分册的病例计数字段 |
| PDC 等分样 | 217 | 同上 |
| GDC 鳞癌病例 | 109 | GDC 按项目、部位、疾病三条件筛选 |
| 全蛋白组文件 | 2,224 | PDC 文件清单计数 |
| 磷酸化文件 | 1,169 | 同上 |
| 乙酰化文件 | 377 | 同上 |
| 全蛋白组运行数 | 550 | 处理后谱图文件数 |
| 磷酸化运行数 | 286 | 同上 |
| 乙酰化运行数 | 88 | 同上 |
| GDC 文件总数 | 6,836 | GDC 文件接口计数 |
| GDC 开放文件 | 1,659 | 同上,按访问级别分 |
| GDC 受控文件 | 5,177 | 同上 |
| GDC 开放体积 | 约 11.5 GB | 文件大小求和 |
| GDC 受控体积 | 约 42.5 TB | 同上 |
| 主论文卷期 | 184 卷 16 期 | PubMed 34358469 |
| 主论文页码 | 4348 至 4371 | 同上 |
附录 B:数字的来源分层
| 层级 | 数字 | 说明 |
|---|---|---|
| 官方接口层 | 115、217、三册文件数 | PDC 接口直接返回,可重跑复现 |
| 官方接口层 | 109、6,836、11.5 GB、42.5 TB | GDC 接口按筛选条件聚合 |
| 论文层 | 108、99 | 只对论文分析集成立 |
| 派生视图层 | 派生研究的样本数 | 与门户不同,依赖于导入时的裁剪规则 |
| 结构推算层 | 十余个批次 | 由通道上限与病例数推算,非官方字段 |
最后一层要特别注意:由通量推算出来的数字可以用来说明机制,不能当作事实陈述写进结论。
附录 C:完整参考文献
| 文献 | 用途 |
|---|---|
| Satpathy S 等. A proteogenomic portrait of lung squamous cell carcinoma. Cell 2021;184(16):4348-4371.e40. DOI 10.1016/j.cell.2021.07.016 | 主论文,分型与关键基因结论 |
| PDC 分册页 PDC000234 / PDC000232 / PDC000233 | 规模与文件结构的一手口径 |
| GDC 项目页 CPTAC-3 | 基因组侧的规模与筛选条件 |
| 派生研究页 lusc_cptac_2021 | 论文口径转述与派生矩阵 |
| TCGA-LUSC 项目页 | 同癌种对照,用于划边界 |
| TCIA 相关集合 | 影像侧边界说明 |
附录 D:任务代码
#--一次性核对:三册规模、文件结构、GDC 鳞癌计数
python3 - <<'PY'
import json, urllib.request
def gql(q):
r = urllib.request.Request("https://pdc.cancer.gov/graphql",
data=json.dumps({"query": q}).encode(),
headers={"Content-Type": "application/json"})
with urllib.request.urlopen(r) as resp:
return json.load(resp)
for sid in ["PDC000234", "PDC000232", "PDC000233"]:
s = gql('{study(pdc_study_id:"%s"){analytical_fraction cases_count aliquots_count}}' % sid)
print(sid, s["data"]["study"][0])
f = gql('{filesPerStudy(pdc_study_id:"%s"){data_category}}' % sid)
from collections import Counter
print(" ", Counter(x["data_category"] for x in f["data"]["filesPerStudy"]))
PY
附录 E:如果只记五件事
第一,它是肺鳞癌的质谱蛋白层数据,核心是三个分册,不是一个文件。
第二,108、115、109 三个数字并存,分别属于论文、蛋白门户与基因组侧,写方案前必须选定一个。
第三,蛋白在 PDC、基因组在 GDC,两侧没有共享主键,配对只能按病例标识人工对齐。
第四,它没有任何影像,影像在独立的集合里,覆盖病例也不同。
第五,规模是取舍换来的:用百余例换三层深度定量,做机制合适,做统计外推不合适。
编辑说明
核验时间 2026-10-29。核验方式:PDC 的 GraphQL 接口逐册查询 study 与 filesPerStudy 两个字段;GDC 的 REST 接口按「项目 + 部位 + 疾病类型」三条件筛选 cases 与 files,并对文件按访问级别、数据类别、数据类型、实验策略做聚合;PubMed E-utilities 核对论文题录;cBioPortal 接口取派生研究描述;NCI 联盟页面核对机构与流程。
与口述信息不一致之处:主论文作者姓为 Satpathy 而非 Satoshi,年份为 2021 而非 2020,卷期为 184 卷 16 期,DOI 为 10.1016/j.cell.2021.07.016,PMID 34358469,均以 PubMed 题录为准。样本量以论文口径 108 例肿瘤配 99 例癌旁为公开表述,同时保留 PDC 的 115 与 GDC 的 109 两个登记口径,三者在正文中逐一给出来源。
未覆盖的内容:未取得蛋白定量矩阵的实际行数(门户的矩阵接口对该册返回无数据),因此正文不给蛋白数;未取得 PDC 侧的肿瘤与癌旁样本拆分(分页接口未按研究过滤,结果不可信),因此正文不给该拆分;论文全文未获取(出版方付费墙),摘要与结论相关表述仅依据公开摘要与派生研究的描述段;未逐份核对质谱运行的质控指标。
体例遵循千方医数集 AI-Ready 词条规范 v5。正文汉字数与章节编号已通过本地校验。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- cptac — 共享标签:基因组学与多组学 / 蛋白质组学 / 肿瘤学
- iedb — 共享标签:基因组学与多组学 / 蛋白质组学 / 肿瘤学
- vdjdb — 共享标签:基因组学与多组学 / 蛋白质组学 / 肿瘤学
- tcga-luad — 共享标签:基因组学与多组学 / 肿瘤学 / 肺癌
- cptac-stad — 共享标签:基因组学与多组学 / 蛋白质组学 / 肿瘤学
- phosphositeplus — 共享标签:基因组学与多组学 / 蛋白质组学 / 肿瘤学
- cptac-pda — 共享标签:基因组学与多组学 / 蛋白质组学 / 肿瘤学
- uniprot — 共享标签:基因组学与多组学 / 蛋白质组学
- alphafold — 共享标签:基因组学与多组学 / 蛋白质组学
- cosmic — 共享标签:基因组学与多组学 / 肿瘤学
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

