跳转至

微卫星不稳定性(MSI)检测方法

一句话概述:MSI 是 DNA 错配修复(MMR)缺陷的标志,MSI-H 是免疫治疗的重要预测标志物,可通过 PCR(金标准)、IHC 和 NGS(MSIsensor/mSINGS)三种方法检测。


核心知识点速查表

概念白话解释
微卫星基因组中短串联重复序列(如 ACACAC...)
MSI微卫星区域的长度发生变化(重复数增减)
MMR错配修复系统(MLH1/MSH2/MSH6/PMS2 四个关键基因)
MSI-H高度不稳定(≥2/5 个标记或 ≥30% 不稳定)
MSS微卫星稳定(无不稳定)
MSI-L低度不稳定(仅 1/5 个标记不稳定)
dMMR错配修复缺陷(与 MSI-H 等价)
Bethesda panel经典的5个微卫星位点(BAT-25等)

一、MSI 的原理(白话版)

比喻:DNA 复制时,碰到重复序列(ACACAC...),复制机器容易"打滑"——多复制或少复制几个重复单元。正常情况下,错配修复系统(MMR)会检查修正这些错误。如果 MMR 系统坏了(dMMR),这些"打滑"错误就积累下来,表现为微卫星长度变化——这就是 MSI

MSI-H 的临床意义: - Lynch 综合征(遗传性 MMR 缺陷) - 散发性结直肠癌(MLH1 启动子甲基化) - 免疫治疗标志物(MSI-H/dMMR 适用 pembrolizumab)


二、方法 1:MSIsensor(NGS 检测,推荐)

# MSIsensor 从配对的肿瘤-正常 BAM 文件中检测 MSI
# 最常用的 NGS-based MSI 检测工具

# 安装
conda install -c bioconda msisensor  # conda安装
# 或
git clone https://github.com/ding-lab/msisensor.git
cd msisensor && make

# 第 1 步:扫描参考基因组中的微卫星位点
msisensor scan \
    -d reference.fa \                # 参考基因组
    -o microsatellites.list          # 输出微卫星位点列表

# 输出包含数十万个微卫星位点(人类基因组约有 ~50万个)

# 第 2 步:检测 MSI
msisensor msi \
    -d microsatellites.list \        # 微卫星位点列表
    -n normal.bam \                  # 正常样本BAM
    -t tumor.bam \                   # 肿瘤样本BAM
    -o msi_output                    # 输出前缀

# 输出文件:
# msi_output              — 总结报告(MSI score)
# msi_output_dis          — 每个位点的详细分布
# msi_output_somatic      — 不稳定位点列表

# MSI score 解读:
# MSI score > 3.5% → MSI-H(不稳定位点占比 >3.5%)
# MSI score ≤ 3.5% → MSS

MSIsensor2(无需正常对照)

# MSIsensor2 不需要配对正常样本(tumor-only模式)
# 适合没有正常对照的临床样本

# 安装
conda install -c bioconda msisensor2

# 运行
msisensor2 msi \
    -M models_hg38 \                 # 预训练模型
    -t tumor.bam \                   # 肿瘤BAM(不需要正常样本)
    -o msi2_output                   # 输出前缀

# 注意:需要下载对应基因组版本的预训练模型

三、方法 2:mSINGS(从 Panel 数据检测)

# mSINGS 适合从靶向Panel测序数据中检测 MSI
# 安装
git clone https://github.com/ding-lab/msings.git

# 第 1 步:创建基线(多个正常样本)
# 需要 ≥15 个正常样本的 BAM 文件来建立基线
msings create_baseline \
    -b normal_bam_list.txt \         # 正常样本BAM列表
    -m msi_targets.bed \             # Panel中的微卫星位点
    -o baseline                       # 输出基线文件

# 第 2 步:分析肿瘤样本
msings analyzer \
    -b tumor.bam \                   # 肿瘤BAM
    -m msi_targets.bed \             # Panel中的微卫星位点
    -n baseline \                     # 基线文件
    -o msi_result                     # 输出结果

# mSINGS score > 0.2 → MSI-H

四、方法 3:用 Python 从 VCF 分析 MSI

# ========== Python脚本:简单MSI分析 ==========
import pysam                                         # BAM操作

def check_msi_loci(bam_file, msi_loci, ref_file):
    """检查特定微卫星位点的稳定性"""
    bam = pysam.AlignmentFile(bam_file, "rb")        # 打开BAM

    results = {}
    for locus in msi_loci:                            # 遍历每个位点
        chrom, start, end, name = locus               # 位点信息

        # 统计该区域的插入/缺失
        indel_count = 0                                # indel计数
        total_reads = 0                                # 总读数

        for read in bam.fetch(chrom, start, end):     # 获取该区域的读
            total_reads += 1
            # 检查CIGAR中是否有插入或缺失
            for op, length in read.cigartuples:        # 遍历CIGAR操作
                if op in [1, 2]:                       # 1=插入,2=缺失
                    indel_count += 1
                    break

        if total_reads > 0:
            instability = indel_count / total_reads    # 不稳定比例
            results[name] = {
                "total_reads": total_reads,
                "indel_reads": indel_count,
                "instability_ratio": instability,
                "status": "unstable" if instability > 0.1 else "stable"
            }

    # 汇总判断
    unstable_count = sum(1 for r in results.values()
                         if r["status"] == "unstable")
    total_loci = len(results)

    if unstable_count / total_loci >= 0.3:            # ≥30% 不稳定
        msi_status = "MSI-H"
    elif unstable_count > 0:
        msi_status = "MSI-L"
    else:
        msi_status = "MSS"

    print(f"MSI状态: {msi_status}")
    print(f"不稳定位点: {unstable_count}/{total_loci}")
    return msi_status, results

# Bethesda panel 5个经典微卫星位点
bethesda_loci = [
    ("chr2", 95849362, 95849386, "BAT-25"),    # 单核苷酸重复
    ("chr4", 55598212, 55598236, "BAT-26"),    # 单核苷酸重复
    ("chr2", 47641560, 47641586, "D2S123"),    # 二核苷酸重复
    ("chr5", 112073515, 112073545, "D5S346"),  # 二核苷酸重复
    ("chr17", 70117161, 70117185, "D17S250"),  # 二核苷酸重复
]

五、三种检测方法比较

特征PCR+毛细管电泳IHCNGS
原理检测微卫星长度变化检测MMR蛋白表达计算不稳定位点比例
金标准否(但越来越常用)
需要正常对照MSIsensor需要,MSIsensor2不需要
通量低(5个位点)低(4个蛋白)高(数百~数千位点)
结果MSI-H/MSI-L/MSSdMMR/pMMRMSI-H/MSS
优点金标准无需DNA提取可与其他检测同时做
缺点需要DNA+正常对照需要病理切片+专业判读计算复杂

六、常见报错与解决

问题原因解决方法
MSIsensor 微卫星位点数为 0参考基因组版本不匹配确认 BAM 和 scan 用同一参考
结果全部 MSS测序深度太低微卫星区域需要 >100X 深度
PCR 和 NGS 结果不一致两种方法检测不同位点以PCR为金标准,NGS做补充
IHC 显示 dMMR 但 NGS 是 MSS罕见不一致(约 5-10%)建议做 PCR 确认

七、面试高频问题

Q1:MSI-H 和 dMMR 的关系?

MSI-H(检测DNA层面的微卫星不稳定)和 dMMR(检测蛋白层面的MMR缺陷)本质上是同一个生物学现象的两面。约95%的情况下两者一致。不一致的原因:某些 MMR 突变不影响蛋白表达但影响功能;或 IHC 判读主观性。

Q2:为什么 MSI-H 肿瘤对免疫治疗有效?

MSI-H → MMR缺陷 → 大量体细胞突变(TMB高)→ 产生大量新抗原 → 免疫原性强 → 免疫检查点抑制剂解除免疫刹车后T细胞可以有效杀伤肿瘤。

Q3:Lynch 综合征怎么筛查?

(1) 所有结直肠癌/子宫内膜癌患者做MSI/IHC筛查;(2) MSI-H/dMMR → 排除散发性原因(MLH1甲基化+BRAF V600E)→ 胚系MMR基因测序确认。


八、速查表

# === MSI 检测速查 ===

# MSIsensor(配对检测)
msisensor scan -d ref.fa -o ms.list
msisensor msi -d ms.list -n normal.bam -t tumor.bam -o result

# MSIsensor2(无配对)
msisensor2 msi -M models -t tumor.bam -o result

# 阈值:
# MSIsensor: score > 3.5% → MSI-H
# mSINGS: score > 0.2 → MSI-H
# Bethesda: ≥2/5 位点不稳定 → MSI-H

# MMR 基因(IHC检测):
# MLH1, MSH2, MSH6, PMS2
# 任一蛋白缺失 = dMMR

# 临床意义:
# MSI-H/dMMR → pembrolizumab适应症(所有实体瘤)
# Lynch综合征筛查
# 结直肠癌预后标志物(II期MSI-H预后好,不需化疗)

参考资料:MSIsensor (Niu et al. 2014)、NCCN Guidelines 2024、FDA pembrolizumab MSI-H适应症