跳转至

线粒体基因组分析

一句话概述

利用NOVOPlasty从测序数据中组装线粒体基因组,通过MITOS进行自动注释,最终基于线粒体基因构建系统发育树,是物种鉴定、进化生物学和群体遗传学研究的核心流程。


核心知识点表格

知识点关键内容常用工具
线粒体DNA特征环状、母系遗传、高拷贝数、快速进化-
基因组组装Seed-extend策略从WGS中提取mt readsNOVOPlasty, GetOrganelle
基因组注释tRNA/rRNA/蛋白编码基因识别MITOS, MitoAnnotator
序列比对多基因联合比对MAFFT, MUSCLE
系统发育建树最大似然法/贝叶斯法IQ-TREE, RAxML, MrBayes
基因排列分析基因顺序比较、重排事件CREx, MLGO
选择压力分析dN/dS比值计算PAML, HyPhy
可视化环状基因组图谱CGView, OGDRAW

各步骤详解

第一步:理解线粒体基因组特征

白话解释: 线粒体是细胞的"发电站",有自己独立的一套DNA。哺乳动物的线粒体DNA(mtDNA)通常只有16-17kb,是一个环状分子,包含37个基因(13个蛋白编码基因、22个tRNA、2个rRNA)。因为线粒体数量多(每个细胞几百到几千个),所以在全基因组测序数据中,线粒体reads的覆盖度通常远高于核基因组。

技术细节: - 动物线粒体基因组:典型大小15-20kb,紧凑排列,基因间隔极短 - 植物线粒体基因组:极大变异(200kb-11Mb),含大量重复序列和叶绿体转移片段 - 真菌线粒体基因组:大小变异大(20-200kb),含内含子 - 密码子使用:线粒体使用非标准遗传密码(如UGA编码色氨酸而非终止)

代码示例:

# 查看参考线粒体基因组信息
# 从NCBI下载参考序列
wget "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_012920&rettype=fasta" -O human_mt_ref.fasta

# 查看序列长度
grep -v "^>" human_mt_ref.fasta | tr -d '\n' | wc -c
# 输出: 16569


第二步:线粒体基因组组装(NOVOPlasty)

白话解释: NOVOPlasty的工作原理类似"拼拼图":你给它一小段已知的线粒体序列(seed),它从全基因组测序数据中找到与seed匹配的reads,然后向两端不断延伸,最终拼出完整的环状线粒体基因组。优势在于不需要先把所有reads组装,直接从原始数据中"钓"出线粒体序列。

技术细节: - Seed-and-extend算法:从seed序列出发,利用k-mer overlap向两端迭代延伸 - 自动检测环化:当延伸序列首尾重叠时,判定组装完成 - 内存需求低:通常4-8GB RAM即可完成 - 支持杂合体检测:可输出多个构象

代码示例:

# 安装NOVOPlasty
git clone https://github.com/ndierckx/NOVOPlasty.git
cd NOVOPlasty

# 准备配置文件 config.txt
cat > config.txt << 'EOF'
Project:
-----------------------
Project name          = MyMito
Type                  = mito
Genome Range          = 12000-22000
K-mer                 = 33
Max memory            = 8
Extended log          = 0
Save assembled reads  = no
Seed Input            = seed.fasta
Extend seed directly  = no
Reference sequence    = 
Variance detection    = no
Heteroplasmy          = 
HP excluded file      = 
Chloroplast sequence  = 

Dataset 1:
-----------------------
Read Length            = 150
Insert size           = 300
Platform              = illumina
Single/Paired         = PE
Combined reads        = 
Forward reads         = sample_R1.fastq.gz
Reverse reads         = sample_R2.fastq.gz
Store Hash            = yes

Optional:
-----------------------
Insert size auto      = yes
Use Quality Scores    = no
Output path           = ./output/
EOF

# 准备seed序列(通常用COX1或cytb基因片段)
# 可以从近缘物种的线粒体基因组中提取
echo ">COX1_seed" > seed.fasta
echo "ATGTTCGGGTGGTTTGGAAACTGACTCATC..." >> seed.fasta

# 运行NOVOPlasty
perl NOVOPlasty4.3.3.pl -c config.txt

# 查看输出
ls output/
# Circularized_assembly_1_MyMito.fasta  # 环化成功的组装结果
# log_MyMito.txt                         # 运行日志

GetOrganelle替代方案:

# 安装GetOrganelle
pip install getorganelle
get_organelle_config.py --add animal_mt

# 运行组装
get_organelle_from_reads.py \
    -1 sample_R1.fastq.gz \
    -2 sample_R2.fastq.gz \
    -o getorganelle_output \
    -t 8 \
    -R 20 \
    -k 21,45,65,85,105 \
    -F animal_mt

# GetOrganelle优势:使用多种k-mer自动选择最优组装


第三步:组装质量评估

白话解释: 组装完成后,需要检查结果是否正确。主要看三点:1)长度是否在预期范围内;2)是否成功环化;3)coverage是否均匀。

技术细节: - 覆盖深度验证:将reads回比到组装序列,检查覆盖均匀性 - 参考比较:与近缘物种线粒体比较,确认基因排列合理 - 长度验证:与同属物种比较基因组大小

代码示例:

# 将reads比对回组装结果
bwa index output/Circularized_assembly_1_MyMito.fasta
bwa mem -t 8 output/Circularized_assembly_1_MyMito.fasta \
    sample_R1.fastq.gz sample_R2.fastq.gz | \
    samtools sort -o mt_mapped.bam
samtools index mt_mapped.bam

# 计算覆盖深度
samtools depth mt_mapped.bam > coverage.txt

# 绘制覆盖曲线(R脚本)
Rscript -e '
cov <- read.table("coverage.txt", col.names=c("chr","pos","depth"))
pdf("mt_coverage.pdf", width=10, height=4)
plot(cov$pos, cov$depth, type="l", xlab="Position", ylab="Depth",
     main="Mitochondrial Genome Coverage")
abline(h=mean(cov$depth), col="red", lty=2)
dev.off()
cat("Mean coverage:", mean(cov$depth), "\n")
cat("Min coverage:", min(cov$depth), "\n")
'

# 检查基因组大小
grep -v "^>" output/Circularized_assembly_1_MyMito.fasta | tr -d '\n' | wc -c


第四步:线粒体基因组注释(MITOS)

白话解释: 注释就是告诉你组装出的这条序列上哪些位置是什么基因。MITOS是专门为线粒体设计的注释工具,能自动识别tRNA、rRNA和蛋白编码基因,并根据不同物种使用正确的遗传密码表。

技术细节: - MITOS2使用BLAST搜索同源蛋白和RNA结构预测 - 支持多种遗传密码表(脊椎动物用Code 2,无脊椎动物用Code 5等) - 自动识别基因边界和读框方向 - 输出标准GenBank格式注释文件

代码示例:

# 方法1:使用MITOS2 web服务器
# 访问 http://mitos2.bioinf.uni-leipzig.de/
# 上传序列,选择遗传密码表,提交

# 方法2:命令行安装MITOS2
conda create -n mitos -c bioconda mitos
conda activate mitos

# 运行MITOS2注释
runmitos.py \
    -i output/Circularized_assembly_1_MyMito.fasta \
    -o mitos_output \
    -r /path/to/mitos2_refdata \
    -c 2 \               # 遗传密码表: 2=脊椎动物线粒体
    --best \             # 只保留最佳注释结果
    --rrna 1 \
    --trna 1 \
    --intron 0

# 查看注释结果
cat mitos_output/result.bed    # BED格式基因坐标
cat mitos_output/result.gff    # GFF格式注释
cat mitos_output/result.fas    # 各基因序列
cat mitos_output/result.seq    # 蛋白序列

# 方法3:使用MitoAnnotator(适合鱼类)
# 访问 http://mitofish.aori.u-tokyo.ac.jp/annotation/input/

使用tRNAscan-SE补充tRNA注释:

# 安装
conda install -c bioconda trnascan-se

# 运行tRNA预测
tRNAscan-SE -O \
    -o trna_output.txt \
    output/Circularized_assembly_1_MyMito.fasta

# -O: 搜索线粒体tRNA(organellar mode)


第五步:基因提取与多序列比对

白话解释: 从注释好的线粒体基因组中提取特定基因序列(如COX1、CYTB),与其他物种的同源基因放在一起做比对,为后面建树做准备。多基因联合分析比单基因更可靠。

技术细节: - 蛋白编码基因通常选择保守基因(COX1, COX2, CYTB等) - 可用密码子比对(codon-aware alignment)提高准确性 - 多基因联合需要partition模型 - 比对后需要修剪(trimming)去除比对质量差的区域

代码示例:

# 从注释结果提取各基因序列
# 假设已有多个物种的COX1和CYTB序列

# 使用MAFFT进行多序列比对
mafft --auto --adjustdirection COX1_all_species.fasta > COX1_aligned.fasta
mafft --auto CYTB_all_species.fasta > CYTB_aligned.fasta

# 蛋白编码基因推荐使用密码子比对
# 先翻译为蛋白→比对→反推核酸比对
macse -prog alignSequences \
    -seq COX1_all_species.fasta \
    -gc_def 2 \
    -out_NT COX1_NT_aligned.fasta \
    -out_AA COX1_AA_aligned.fasta

# 使用trimAl修剪比对结果
trimal -in COX1_aligned.fasta -out COX1_trimmed.fasta -automated1

# 连接多基因比对(concatenation)
# 使用FASconCAT或AMAS
python3 AMAS.py concat \
    -i COX1_trimmed.fasta CYTB_trimmed.fasta ND1_trimmed.fasta \
    -f fasta \
    -d dna \
    -p partition.txt \
    --out-format fasta \
    --part-format raxml

# 查看partition文件
cat partition.txt
# DNA, COX1 = 1-1536
# DNA, CYTB = 1537-2691
# DNA, ND1 = 2692-3648


第六步:系统发育建树

白话解释: 系统发育树就是物种的"族谱图"。根据DNA序列的相似程度来推断它们之间的亲缘关系。主流方法有最大似然法(Maximum Likelihood)和贝叶斯法(Bayesian Inference)。

技术细节: - ML方法:搜索使数据出现概率最大的树形拓扑 - BI方法:通过MCMC采样计算后验概率 - 模型选择:使用ModelFinder自动选择最优替换模型 - 分区模型:不同基因/密码子位点使用不同进化模型 - 支持度评估:Bootstrap(ML)或后验概率(BI)

代码示例:

# 方法1:IQ-TREE(最大似然法,推荐)
# 自动模型选择 + 分区分析 + ultrafast bootstrap
iqtree2 -s concatenated.fasta \
    -p partition.txt \
    -m MFP \
    --merge rclusterf \
    -B 1000 \
    --alrt 1000 \
    -T AUTO \
    --prefix mt_phylo

# 输出文件:
# mt_phylo.treefile  - 最优树
# mt_phylo.iqtree    - 详细结果报告
# mt_phylo.contree   - 一致性树(含支持值)

# 方法2:RAxML-NG
raxml-ng --all \
    --msa concatenated.fasta \
    --model partition.txt \
    --bs-trees 200 \
    --threads auto \
    --prefix raxml_mt

# 方法3:MrBayes(贝叶斯法)
cat > mrbayes_cmd.nex << 'EOF'
begin mrbayes;
    set autoclose=yes nowarn=yes;
    execute concatenated.nex;
    charset COX1 = 1-1536;
    charset CYTB = 1537-2691;
    partition genes = 2: COX1, CYTB;
    set partition = genes;
    lset nst=6 rates=invgamma;
    unlink statefreq=(all) revmat=(all) shape=(all) pinvar=(all);
    prset applyto=(all) ratepr=variable;
    mcmc ngen=5000000 samplefreq=1000 printfreq=1000 
         nchains=4 nruns=2 savebrlens=yes;
    sump burnin=1250;
    sumt burnin=1250 contype=halfcompat;
end;
EOF

mb mrbayes_cmd.nex


第七步:树的可视化与基因组图谱

白话解释: 最后需要把结果画成好看的图。系统发育树用iTOL或ggtree美化;环状线粒体基因组图用OGDRAW或CGView展示基因排列。

技术细节: - iTOL: 在线工具,支持大量注释类型 - ggtree: R包,高度可定制 - OGDRAW: 专门绘制细胞器基因组环形图 - CGView: Java程序,支持GC含量、GC skew等

代码示例:

# R脚本:使用ggtree绘制系统发育树
library(ggtree)
library(treeio)
library(ggplot2)

# 读取IQ-TREE结果
tree <- read.iqtree("mt_phylo.contree")

# 基本树形图
p <- ggtree(tree, layout="rectangular") +
    geom_tiplab(size=3) +
    geom_nodelab(aes(label=UFboot), size=2, hjust=-0.2) +
    geom_treescale() +
    theme_tree2()

ggsave("phylo_tree.pdf", p, width=10, height=12)

# 带Bootstrap支持度的彩色树
p2 <- ggtree(tree) +
    geom_tiplab(size=3) +
    geom_nodepoint(aes(color=UFboot), size=2) +
    scale_color_continuous(low="red", high="green",
                          name="Bootstrap") +
    theme_tree2()

ggsave("phylo_tree_bootstrap.pdf", p2, width=10, height=12)

# 使用OGDRAW绘制线粒体基因组环形图
# 在线工具: https://chlorobox.mpimp-golm.mpg.de/OGDraw.html
# 输入GenBank格式文件即可

# 或使用CGView
java -jar cgview.jar \
    -i mt_genome.xml \
    -o mt_genome_map.png \
    -f png

实战命令

# === 完整流程一键脚本 ===

#!/bin/bash
# 线粒体基因组分析流程
set -e

SAMPLE="species_A"
THREADS=8
R1="raw_data/${SAMPLE}_R1.fastq.gz"
R2="raw_data/${SAMPLE}_R2.fastq.gz"
SEED="reference/COX1_seed.fasta"
CODE=2  # 脊椎动物线粒体遗传密码

# 1. 质控
fastp -i $R1 -o clean_R1.fq.gz \
      -I $R2 -O clean_R2.fq.gz \
      -w $THREADS -h fastp_report.html

# 2. 组装(GetOrganelle)
get_organelle_from_reads.py \
    -1 clean_R1.fq.gz -2 clean_R2.fq.gz \
    -o assembly_output -t $THREADS \
    -R 20 -k 21,45,65,85,105 -F animal_mt

# 3. 注释
runmitos.py \
    -i assembly_output/*.fasta \
    -o annotation_output \
    -r /db/mitos2_refdata -c $CODE --best

# 4. 提取蛋白编码基因
python3 extract_genes.py annotation_output/result.gff \
    assembly_output/*.fasta genes/

# 5. 多序列比对(每个基因单独比对)
for gene in genes/*.fasta; do
    mafft --auto $gene > aligned/$(basename $gene)
done

# 6. 修剪
for aln in aligned/*.fasta; do
    trimal -in $aln -out trimmed/$(basename $aln) -automated1
done

# 7. 连接比对
python3 AMAS.py concat -i trimmed/*.fasta \
    -f fasta -d dna --out-format fasta \
    -p partition.txt

# 8. 建树
iqtree2 -s concatenated.fasta -p partition.txt \
    -m MFP -B 1000 --alrt 1000 -T $THREADS

echo "Pipeline completed!"

面试常问点

Q1: 为什么线粒体基因组常用于系统发育研究? A: 1)母系单性遗传,不发生重组,进化历史清晰;2)进化速率适中(比核基因快5-10倍),适合近缘物种分辨;3)高拷贝数,易于获取;4)基因排列保守,orthologue容易确定;5)基因组小,全基因组信息容易获得。

Q2: NOVOPlasty和GetOrganelle有什么区别? A: NOVOPlasty使用seed-extend策略,一次扩展;GetOrganelle使用多k-mer de Bruijn图策略,先用目标序列过滤reads再组装,对复杂基因组更robust。GetOrganelle对植物叶绿体/线粒体组装表现更好。

Q3: 为什么需要分区模型(partition model)? A: 不同基因、不同密码子位点的进化速率和替换模式不同。第三密码子位点进化最快,第二密码子位点最保守。分区模型允许不同分区使用不同的进化模型参数,更准确地反映真实进化过程。

Q4: 如何判断系统发育树是否可靠? A: 1)Bootstrap支持值 >70%(ML)或后验概率 >0.95(BI)认为可靠;2)不同方法(ML/BI)得到一致拓扑;3)不同基因建树结果一致;4)增加taxon sampling不改变主要关系;5)检查长枝吸引(LBA)问题。

Q5: 线粒体假基因(NUMTs)如何影响分析? A: NUMTs是转移到核基因组的线粒体片段,已失去功能。如果误将NUMTs当作真正的线粒体序列会导致错误结论。解决方法:1)利用高覆盖度区分(真线粒体覆盖度远高于核基因组);2)翻译检查是否有终止密码子;3)比较进化速率是否异常。


易错点

  1. 遗传密码表选错:动物线粒体使用非标准遗传密码,如果用标准密码表翻译会出现大量错误终止密码子。脊椎动物用Code 2,果蝇用Code 5。

  2. 植物线粒体组装难度被低估:植物线粒体含大量重复序列、频繁重组、含叶绿体转移序列,组装远比动物困难,通常需要长reads辅助。

  3. 未检测NUMTs污染:PCR扩增时可能同时扩出核基因组中的NUMTs假基因,导致异源序列进入分析。

  4. 比对质量未检查:自动比对可能在高变区产生错误比对,影响建树结果。需要目视检查和适当修剪。

  5. 外群选择不当:外群太远会引入长枝吸引,太近则无法确定树根位置。

  6. 忽略异质性(heteroplasmy):个体内可能存在多种线粒体单倍型,混合组装会产生错误共识序列。

  7. 起点位置不一致:环状基因组的线性化起点位置可能不同,影响基因坐标比较。


补充知识

线粒体基因组在不同研究中的应用

应用领域具体用途典型基因
DNA条形码物种鉴定COX1 (动物)
群体遗传学种群结构、基因流全基因组/D-loop
系统发育物种进化关系多基因联合
法医学个体识别、亲缘鉴定D-loop/HVR
古DNA灭绝物种鉴定全基因组
疾病研究线粒体疾病全基因组变异

常用遗传密码表

Code适用范围关键差异
1标准/核基因组-
2脊椎动物线粒体AGA/AGG=终止, UGA=Trp
3酵母线粒体CUN=Thr
4霉菌/原生生物线粒体UGA=Trp
5无脊椎动物线粒体AGA/AGG=Ser, UGA=Trp
9棘皮动物线粒体AAA=Asn, AGA=Ser

进化模型选择指南

GTR+I+G: 最通用,参数最多
HKY+G: 较简单,转换/颠换区分
K2P: 最简单,等碱基频率假设
对于线粒体蛋白编码基因:
- 建议按密码子位点分区
- 第3位点通常需要GTR+G
- 第1、2位点用较简单模型即可
使用ModelFinder自动选择: -m MFP

有用的数据库

  • NCBI RefSeq: 参考线粒体基因组数据库
  • MitoFish: 鱼类线粒体基因组数据库
  • BOLD Systems: DNA条形码数据库
  • Mamit-tRNA: 哺乳动物线粒体tRNA数据库
  • OGRe: 动物细胞器基因组数据库