实验1:突变数据处理与分析

作者

王诗翔

发布于

2026年4月23日

实验目标

通过本实验,学生将学会:

  • 使用 maftools 读取和处理 MAF 数据
  • 了解 MAF 数据的基本结构和字段
  • 绘制突变概览图和 oncoplot
  • 进行基因突变频率分析
  • 完成生存分析实践

实验准备

安装必要包

# 安装 maftools
if (!require("BiocManager"))
    install.packages("BiocManager")
BiocManager::install("maftools")

# 加载包
library(maftools)

数据准备

本实验使用 maftools 内置的 TCGA LAML(急性髓系白血病)数据。

# 加载示例数据路径
laml.maf <- system.file("extdata", "tcga_laml.maf.gz", package = "maftools")
laml.clin <- system.file("extdata", "tcga_laml_annot.tsv", package = "maftools")

# 数据下载链接(课程网站提供)
# <a href="../data/tcga_laml.maf.gz" download>下载 MAF 数据</a>
# <a href="../data/tcga_laml_clinical.tsv" download>下载临床数据</a>

1. MAF 数据读取

创建 MAF 对象

# 读取 MAF 文件并合并临床数据
laml <- read.maf(maf = laml.maf, clinicalData = laml.clin)

# 查看 MAF 对象基本信息
laml
点击查看运行结果
An object of class  MAF
                    ID  summary   Mean  Median
 1:              Samples      193     NA      NA
 2:               Genes      880     NA      NA
 3:   Missense_Mutations     565     NA      NA
 4:   Nonsense_Mutations      85     NA      NA
 5:  Frame_Shift_Del_Ins      75     NA      NA
 6:            Variants     1627      8       6
 7:                TITV      193     NA      NA

查看 MAF 数据结构

# 查看样本概览
sample_summary <- getSampleSummary(laml)
head(sample_summary, 10)
点击查看运行结果
   Tumor_Sample_Barcode Mutations_per_sample Missense_Mutation Nonsense_Mutation
1:         TCGA-AB-2809                    6                3                0
2:         TCGA-AB-2810                   10                5                1
3:         TCGA-AB-2811                    5                2                1
4:         TCGA-AB-2812                    8                4                0
5:         TCGA-AB-2813                    7                3                1
...
# 查看基因突变概览
gene_summary <- getGeneSummary(laml)
head(gene_summary, 10)
点击查看运行结果
   Hugo_Symbol Mutations_per_gene Missense_Mutation Nonsense_Mutation Frame_Shift_Del
1:        FLT3                 54               29               8               5
2:        DNMT3A               48               22              10               4
3:         NPM1               30                1              16              13
4:         IDH2               20               10               0               0
5:         IDH1               18               13               0               0
...
# 查看变异类型分布
fields_summary <- getFields(laml)
head(fields_summary, 10)

查看临床数据

# 查看临床数据
clinical_data <- getClinicalData(laml)
head(clinical_data, 10)
点击查看运行结果
   Tumor_Sample_Barcode   FAB_classification Days_to_last_followup Overall_Survival_Status
1:         TCGA-AB-2809                    M4                   365                       Alive
2:         TCGA-AB-2810                    M3                   124                       Alive
3:         TCGA-AB-2811                    M1                    82                       Alive
...

2. 突变概览可视化

绘制突变概览图

# 绘制突变类型分布图
plotmafSummary(maf = laml, rmOutlier = TRUE, addStat = 'median', dashboard = TRUE)
点击查看结果说明

该图包含以下几个部分:

  • 上方左图:各样本的突变数量分布
  • 上方右图:突变类型分布(TITV)
  • 下方左图:基因突变数量分布
  • 下方右图:变异分类分布

绘制 Oncoplot

Oncoplot 是展示基因突变分布的核心可视化工具。

# 绘制前20个高频突变基因的 oncoplot
oncoplot(maf = laml, top = 20)
点击查看结果说明

Oncoplot 展示内容:

  • :基因名称,按突变频率排序
  • :样本,按突变模式聚类
  • 颜色:不同突变类型
  • 右侧条形图:基因突变频率
  • 左侧条形图:样本突变数量

自定义 Oncoplot

# 添加临床数据注释
oncoplot(
    maf = laml,
    top = 10,
    clinicalFeatures = c("FAB_classification", "Overall_Survival_Status"),
    sortByAnnotation = TRUE
)

3. 突变频率分析

查看高频突变基因

# 获取高频突变基因列表
top_genes <- getGeneSummary(laml)
top_genes <- top_genes[order(-top_genes$Mutations_per_gene), ]
head(top_genes, 10)

绘制瀑布图(Waterfall Plot)

# 绘制特定基因的瀑布图
waterfall(
    maf = laml,
    genes = c("FLT3", "DNMT3A", "NPM1", "IDH1", "IDH2"),
    fontSize = 12
)

4. 突变类型分析

TITV 分析(转换颠换分析)

# 绘制 TITV 分析图
titv(maf = laml, plotType = "bar")
点击查看结果说明

TITV 分析展示:

  • 转换(Ti):A→G, G→A, C→T, T→C
  • 颠换(Tv):A→C, A→T, G→C, G→T, C→A, C→G, T→A, T→G
  • 各样本的转换/颠换比例分布

变异类型分布统计

# 统计各变异类型数量
variant_counts <- laml@variant.classification.summary
print(variant_counts)

5. 生存分析实践

准备生存分析数据

# 查看可用临床数据字段
clinical_vars <- colnames(getClinicalData(laml))
print(clinical_vars)

基因突变生存分析

# 分析 FLT3 基因突变与生存的关系
mafSurvival(
    maf = laml,
    genes = "FLT3",
    clinicalData = getClinicalData(laml),
    clinicalFeature = "Overall_Survival_Status",
    timeFeature = "Days_to_last_followup"
)
点击查看结果解读指南

生存分析结果解读要点:

  • 风险比(HR):>1 表示突变增加风险,<1 表示突变降低风险
  • P值:<0.05 表示差异显著
  • 生存曲线:直观展示两组生存差异
  • 置信区间:反映估计的不确定性

比较多个基因

# 分析多个基因的生存差异
mafSurvival(
    maf = laml,
    genes = c("FLT3", "DNMT3A", "NPM1"),
    clinicalData = getClinicalData(laml),
    clinicalFeature = "Overall_Survival_Status",
    timeFeature = "Days_to_last_followup"
)

6. 突变关联分析

基因突变互斥/协同分析

# 分析基因突变之间的互斥或协同关系
somaticInteractions(
    maf = laml,
    top = 25,
    pvalue = c(0.05, 0.1)
)
点击查看结果说明

突变关联分析结果:

  • 互斥(Mutually Exclusive):基因突变很少同时发生
  • 协同(Co-occurring):基因突变常同时发生
  • P值:评估关联是否显著
  • 热图:可视化关联模式

7. 数据子集操作

按样本筛选

# 随机选择部分样本进行分析
set.seed(123)  # 设置随机种子保证可重复性
samples <- laml@variants.per.sample$Tumor_Sample_Barcode
selected_samples <- sample(samples, 50)

laml_subset <- subsetMaf(laml, tsb = selected_samples)

# 查看子集数据
laml_subset

按基因筛选

# 选择特定基因进行分析
genes_of_interest <- c("FLT3", "DNMT3A", "NPM1", "TP53")
laml_genes <- subsetMaf(laml, genes = genes_of_interest)

# 查看筛选后的基因突变情况
getGeneSummary(laml_genes)

8. Oncoplot 进阶定制

添加基因通路注释

# 创建基因通路分组
pathways <- list(
    "Signaling" = c("FLT3", "KIT"),
    "Epigenetic" = c("DNMT3A", "IDH1", "IDH2"),
    "Transcription" = c("NPM1", "RUNX1")
)

# 绘制带通路注释的 oncoplot
oncoplot(
    maf = laml,
    top = 15,
    pathways = pathways,
    pathwayTitle = "Gene Pathways"
)

实验作业

完成以下练习并提交 R Markdown 报告:

作业1:绘制 Oncoplot

使用以下代码绘制 oncoplot:

library(maftools)
set.seed(学号)  # 请替换为你的学号

laml.maf <- system.file("extdata", "tcga_laml.maf.gz", package = 'maftools')
laml.clin <- system.file('extdata', 'tcga_laml_annot.tsv', package = 'maftools')

laml <- read.maf(maf = laml.maf, clinicalData = laml.clin)
samps <- laml@variants.per.sample$Tumor_Sample_Barcode
laml <- subsetMaf(laml, tsb = sample(samps, 150))

# 绘制 oncoplot
oncoplot(maf = laml, top = 20)

作业2:生存分析

  1. 挑选一个基因进行生存分析
  2. 说明挑选该基因的理由(参考文献或临床意义)
  3. 对生存分析结果进行解读

示例代码

# 基因选择建议:查看基因突变频率和临床意义
gene_summary <- getGeneSummary(laml)
head(gene_summary, 20)

# 选择感兴趣的基因进行生存分析
mafSurvival(
    maf = laml,
    genes = "你选择的基因",
    clinicalData = getClinicalData(laml),
    clinicalFeature = "Overall_Survival_Status",
    timeFeature = "Days_to_last_followup"
)

提交要求

  • 将分析过程整理为 R Markdown 文档
  • 保存为 HTML 格式
  • 包含完整的代码、结果和解读