跳转至

伴随诊断 CDx 生信分析


一句话说明

伴随诊断(CDx)就是"用药前先检测"——通过基因检测确认患者是否有特定的靶点突变,只有检测阳性才用对应的靶向药,这是精准医疗的核心应用场景。


核心知识点

1. CDx 基本概念

  • CDx(Companion Diagnostics):与特定靶向药物配套的体外诊断检测
  • 本质:检测生物标志物 → 筛选适合的患者 → 用对应的药
  • 监管要求:FDA 要求某些靶向药必须配合 CDx 使用
  • 白话:就像配钥匙——只有基因"锁孔"和药物"钥匙"匹配才有效

2. FDA 批准的经典 CDx 案例

基因/标志物药物癌种检测方法
EGFR 突变Erlotinib, OsimertinibNSCLCNGS Panel
ALK 融合Crizotinib, AlectinibNSCLCFISH/NGS
BRAF V600EVemurafenib黑色素瘤PCR/NGS
HER2 扩增Trastuzumab乳腺癌IHC/FISH
BRCA1/2 突变Olaparib卵巢癌NGS
TMB-H (>=10)Pembrolizumab泛癌种WES/Panel
MSI-H/dMMRPembrolizumab泛癌种NGS/IHC

3. CDx 生信分析的特殊要求

  • 分析验证(analytical validation):灵敏度、特异性、可重复性、检测下限
  • 临床验证(clinical validation):与临床终点(OS/PFS)的关联
  • 质控严格:每次运行需要阳性/阴性对照
  • 报告标准化:结果必须明确为"阳性/阴性"或"检出/未检出"

4. 大 Panel 综合基因检测

  • FoundationOne CDx:324 基因 Panel(FDA 批准)
  • MSK-IMPACT:468 基因 Panel(FDA 批准)
  • 一次检测覆盖多个靶点,比逐个检测更高效

实战代码

# === CDx 报告生成:从 VCF 到临床可操作变异 ===
import pandas as pd                    # 数据处理

# 1. 定义临床可操作变异库(简化版)
actionable_db = {
    # 基因: [(突变, 药物, 证据等级, 癌种)]
    "EGFR": [
        ("L858R", "Osimertinib", "Level 1", "NSCLC"),
        ("exon19del", "Osimertinib", "Level 1", "NSCLC"),
        ("T790M", "Osimertinib", "Level 1", "NSCLC"),
    ],
    "BRAF": [
        ("V600E", "Dabrafenib+Trametinib", "Level 1", "Melanoma"),
        ("V600E", "Encorafenib+Cetuximab", "Level 1", "CRC"),
    ],
    "ALK": [
        ("fusion", "Alectinib", "Level 1", "NSCLC"),
    ],
    "BRCA1": [
        ("pathogenic", "Olaparib", "Level 1", "Ovarian"),
    ],
    "BRCA2": [
        ("pathogenic", "Olaparib", "Level 1", "Ovarian"),
    ],
}

def generate_cdx_report(vcf_annotated_df, cancer_type, tmb, msi_status):
    """生成 CDx 风格的临床报告"""
    report = []                        # 报告条目

    # 检查每个变异是否可操作
    for _, var in vcf_annotated_df.iterrows():
        gene = var["gene"]             # 基因名
        protein = var["protein_change"] # 蛋白变化
        vaf = var["vaf"]               # VAF

        if gene in actionable_db:      # 如果在可操作库中
            for mutation, drug, level, indication in actionable_db[gene]:
                if mutation in protein or mutation == "pathogenic":
                    report.append({
                        "标志物": f"{gene} {protein}",
                        "药物": drug,
                        "证据等级": level,
                        "适应症": indication,
                        "VAF": f"{vaf:.1%}",
                        "状态": "检出"
                    })

    # 检查 TMB
    if tmb >= 10:                      # TMB-High
        report.append({
            "标志物": f"TMB-H ({tmb:.1f} mut/Mb)",
            "药物": "Pembrolizumab",
            "证据等级": "Level 1",
            "适应症": "泛癌种",
            "VAF": "N/A",
            "状态": "阳性"
        })

    # 检查 MSI
    if msi_status == "MSI-H":          # MSI-High
        report.append({
            "标志物": "MSI-H/dMMR",
            "药物": "Pembrolizumab",
            "证据等级": "Level 1",
            "适应症": "泛癌种",
            "VAF": "N/A",
            "状态": "阳性"
        })

    # 生成报告表
    report_df = pd.DataFrame(report)
    print("=" * 60)
    print("     伴随诊断检测报告 (CDx Report)")
    print("=" * 60)
    print(f"癌种: {cancer_type}")
    print(f"TMB: {tmb:.1f} mut/Mb")
    print(f"MSI: {msi_status}")
    print("-" * 60)
    if len(report_df) > 0:
        print(report_df.to_string(index=False))
    else:
        print("未检出临床可操作变异")
    print("=" * 60)
    return report_df

# 使用示例
# generate_cdx_report(mutations, "NSCLC", tmb=12.5, msi_status="MSS")
# === CDx Panel 数据分析质控 ===

# 1. 检查靶区域覆盖度(CDx要求每个靶位点深度达标)
mosdepth --by target_regions.bed \     # 按靶区域统计
  --thresholds 100,250,500 \           # 覆盖度阈值
  --no-per-base \                      # 不输出逐碱基
  sample_qc \                          # 输出前缀
  aligned.bam                          # 输入BAM

# 2. 检查每个 hotspot 位点的深度
samtools depth -a \                    # 包含零深度位点
  -b hotspot_positions.bed \           # hotspot位点
  aligned.bam | \                      # 输入BAM
  awk '$3 < 500 {print $0, "LOW_COVERAGE"}' \  # 标记低覆盖
  > hotspot_coverage.txt               # 输出

# 3. 统计 on-target 率
picard CollectHsMetrics \
  I=aligned.bam \                      # 输入BAM
  O=hs_metrics.txt \                   # 输出
  R=hg38.fa \                          # 参考基因组
  BAIT_INTERVALS=bait.interval_list \  # 探针区域
  TARGET_INTERVALS=target.interval_list  # 靶区域

面试常问点

★ CDx 和 LDT 有什么区别?

参考答案:CDx(伴随诊断)是经过 FDA 审批的商业化检测产品,有严格的分析验证和临床验证,结果直接用于指导用药。LDT(Laboratory Developed Test,实验室自建检测)是实验室自己开发的检测方法,由 CLIA 实验室监管但不需要 FDA 审批。LDT 的灵活性更高、更新更快,但验证标准不如 CDx 严格。在美国,一些大型 Panel(如 MSK-IMPACT)以 LDT 形式运营,也获得了 FDA 批准。

★ CDx 生信 pipeline 和研究型 pipeline 有什么不同?

参考答案:CDx pipeline 要求更严格:(1) 必须锁定软件版本、参考数据库版本、参数配置,不能随意更新;(2) 每个分析步骤都需要验证文档(IQ/OQ/PQ);(3) 需要跑阳性/阴性对照样本确认分析性能;(4) 结果报告必须标准化为临床可理解的格式(检出/未检出/不确定);(5) 要有完整的审计追踪(audit trail)。研究型 pipeline 则更灵活,可以用最新工具和参数。


速查卡片

问题答案
CDx 全称Companion Diagnostics
目的药物配套基因检测
FDA CDx PanelFoundationOne CDx (324基因)
证据等级系统OncoKB Level 1-4, R1-2
EGFR CDxOsimertinib (NSCLC)
HER2 CDxTrastuzumab (乳腺癌)
分析验证内容灵敏度、特异性、检测下限
临床验证与 OS/PFS 的关联
LDT实验室自建检测
报告格式标准化:检出/未检出