跳转至

基因组重复序列分析

一句话概述:基因组中约50%的序列是重复序列(转座子、卫星DNA等),RepeatMasker通过同源搜索屏蔽已知重复,RepeatModeler2从头发现新的转座元件家族,2025年Terrier深度学习分类器进一步提升了TE分类的准确性和覆盖率。

核心知识点速览

概念白话解释
重复序列基因组中出现多次的DNA序列(人类基因组~50%是重复)
转座元件(TE)能在基因组中"跳来跳去"的DNA序列
散在重复分散在基因组各处的TE(SINE/LINE/LTR/DNA转座子)
串联重复连续排列的短序列重复(微卫星/卫星DNA)
LINE长散在核元件(如L1,~6kb,自主转座)
SINE短散在核元件(如Alu,~300bp,非自主转座)
LTR逆转座子两端有长末端重复序列的逆转座子(类似内源性逆转录病毒)
RepeatMasker基于同源搜索的重复序列屏蔽工具
RepeatModeler2从头发现新TE家族的工具
Dfam转座元件家族的开放数据库

一、重复序列基础

1.1 重复序列分类

基因组重复序列的层级分类:

重复序列
├── 散在重复(Interspersed Repeats)= 转座元件
│   ├── I类(逆转座子,copy-and-paste机制)
│   │   ├── LTR逆转座子(有长末端重复)
│   │   │   ├── Gypsy/Ty3
│   │   │   ├── Copia/Ty1
│   │   │   └── ERV(内源性逆转录病毒)
│   │   └── 非LTR逆转座子(无长末端重复)
│   │       ├── LINE(长散在核元件)
│   │       │   ├── L1(人类最活跃,~6kb)
│   │       │   └── L2
│   │       └── SINE(短散在核元件)
│   │           ├── Alu(灵长类特有,~300bp)
│   │           └── MIR
│   └── II类(DNA转座子,cut-and-paste机制)
│       ├── TIR转座子(有末端反向重复)
│       │   ├── hAT
│       │   ├── Mariner/Tc1
│       │   └── MULE
│       └── Helitron(滚环复制)
├── 串联重复(Tandem Repeats)
│   ├── 卫星DNA(大块着丝粒/端粒区)
│   ├── 小卫星(10-60bp重复单元)
│   └── 微卫星/SSR(1-6bp重复单元,如ACACAC)
└── 低复杂度序列(如poly-A、AT-rich)

人类基因组重复序列组成:
  LINE: ~20%(其中L1最多)
  SINE: ~13%(主要是Alu)
  LTR: ~8%(主要是ERV)
  DNA转座子: ~3%
  其他重复: ~6%
  总计: ~50%

1.2 为什么要分析重复序列?

重复序列分析的重要性:

1. 基因组注释必需步骤
   基因预测前必须先屏蔽重复序列
   否则基因预测工具会把TE误判为基因

2. 进化研究
   TE插入/扩增可以追踪物种进化历史
   不同物种的TE组成差异很大

3. 功能研究
   TE可以作为调控元件(增强子/启动子)
   Alu元件与RNA编辑密切相关
   L1仍在人类基因组中活跃转座

4. 疾病相关
   新的TE插入可以导致基因突变
   TE激活与癌症和衰老相关
   内源性逆转录病毒与自身免疫疾病相关

5. 基因组组装
   重复序列是基因组组装的最大障碍
   了解重复结构有助于评估组装质量

二、RepeatMasker分析

2.1 安装

# 方法1:Conda安装(推荐)
conda install -c bioconda repeatmasker  # 安装RepeatMasker

# 方法2:Docker/Singularity容器
# Dfam-TETools容器包含所有工具
singularity pull docker://dfam/tetools:latest  # 下载容器

# 方法3:从源码安装
wget https://www.repeatmasker.org/RepeatMasker/RepeatMasker-4.1.9.tar.gz  # 下载
tar -xzf RepeatMasker-4.1.9.tar.gz  # 解压
cd RepeatMasker
perl ./configure  # 配置(需要搜索引擎如RMBlast)

# 安装搜索引擎RMBlast
conda install -c bioconda rmblast  # 安装RMBlast

# 检查安装
RepeatMasker -v  # 查看版本

2.2 基本使用

# RepeatMasker基本用法:用已知TE库搜索基因组中的重复序列

# ===== 标准运行 =====
RepeatMasker \
  -species human \              # 物种(自动选择相应TE库)
  -pa 8 \                       # 并行线程数
  -gff \                        # 输出GFF格式注释
  -dir output_dir/ \            # 输出目录
  -xsmall \                     # 用小写字母标记重复(而非N或X)
  genome.fa                     # 输入基因组FASTA

# 常用参数说明:
# -species: 物种名(human/mouse/rice/drosophila等)
# -lib: 使用自定义重复库(优先于-species)
# -pa: 并行线程数
# -gff: 输出GFF格式
# -xsmall: 小写屏蔽(便于后续分析仍能看到序列)
# -nolow: 不屏蔽低复杂度序列
# -no_is: 不屏蔽散在重复
# -s: 慢速但灵敏模式
# -q: 快速但不太灵敏模式

# ===== 输出文件说明 =====
# genome.fa.out: 主输出文件(每个重复的详细信息)
# genome.fa.out.gff: GFF格式注释
# genome.fa.masked: 屏蔽后的基因组(重复序列被替换为N)
# genome.fa.tbl: 统计摘要表

# ===== 使用自定义重复库 =====
# 如果分析非模式生物,先用RepeatModeler建库
RepeatMasker \
  -lib custom_repeats.fa \      # 使用自定义TE库
  -pa 8 \
  -gff \
  -xsmall \
  genome.fa

2.3 结果解读

# 查看统计摘要
cat output_dir/genome.fa.tbl

# 典型输出(人类基因组示例):
# ==================================================
# file name: genome.fa
# sequences:             24
# total length:  3088269832 bp
# GC level:         40.89 %
# bases masked:  1515524231 bp ( 49.07 %)
# ==================================================
#                 number of      length    percentage
#                 elements*      occupied   of sequence
# --------------------------------------------------
# SINEs:            1728424    228855370 bp    7.41 %
#   ALUs            1181287    166523652 bp    5.39 %
#   MIRs             547137     62331718 bp    2.02 %
# LINEs:             919526    573282985 bp   18.56 %
#   LINE1            509699    467498994 bp   15.14 %
#   LINE2            349832     82919367 bp    2.69 %
# LTR elements:      477759    252783477 bp    8.19 %
#   ERVL             113795     42575456 bp    1.38 %
#   ERVL-MaLRs       194765     75003786 bp    2.43 %
#   ERV_classI       119069    105413329 bp    3.41 %
# DNA elements:      466879    102523277 bp    3.32 %
# Unclassified:            0            0 bp    0.00 %
# Total interspersed repeats:  1157445109 bp   37.49 %
# Small RNA:          10949      1701340 bp    0.06 %
# Satellites:         30665     73785752 bp    2.39 %
# Simple repeats:    816225     37802665 bp    1.22 %
# Low complexity:    126282      6451610 bp    0.21 %
# ==================================================

2.4 R语言分析RepeatMasker输出

# 解析RepeatMasker输出
library(tidyverse)

# 读取.out文件(跳过头部3行)
rm_output <- read.table("genome.fa.out",
                         skip = 3,            # 跳过头部
                         fill = TRUE,          # 填充缺失列
                         stringsAsFactors = FALSE)

# 设置列名
colnames(rm_output) <- c("SW_score", "perc_div", "perc_del",
                          "perc_ins", "query_seq", "query_begin",
                          "query_end", "query_left", "strand",
                          "repeat_name", "repeat_class", "repeat_begin",
                          "repeat_end", "repeat_left", "ID")

# 清理数据
rm_clean <- rm_output %>%
  mutate(
    length = as.numeric(query_end) - as.numeric(query_begin) + 1,  # 长度
    divergence = as.numeric(perc_div)  # 序列散度
  ) %>%
  filter(!is.na(length))  # 去除无效行

# 1. TE类别统计
class_summary <- rm_clean %>%
  group_by(repeat_class) %>%
  summarise(
    count = n(),                           # 数量
    total_bp = sum(length),                # 总碱基数
    mean_div = mean(divergence, na.rm = TRUE)  # 平均散度
  ) %>%
  arrange(desc(total_bp))

print(class_summary)

# 2. TE组成饼图
ggplot(class_summary %>% head(10),
       aes(x = "", y = total_bp, fill = repeat_class)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  labs(title = "Repeat Element Composition") +
  theme_void()

# 3. TE散度分布(反映TE年龄)
ggplot(rm_clean, aes(x = divergence, fill = repeat_class)) +
  geom_histogram(binwidth = 1, alpha = 0.6) +  # 直方图
  facet_wrap(~ repeat_class, scales = "free_y") +  # 按类分面
  labs(x = "Sequence Divergence (%)", y = "Count",
       title = "TE Age Distribution (Kimura Distance)") +
  theme_minimal()
# 散度低 = 最近插入的(年轻的TE)
# 散度高 = 古老的TE

# 4. 染色体上TE密度分布
te_density <- rm_clean %>%
  mutate(bin = as.numeric(query_begin) %/% 1e6) %>%  # 1Mb窗口
  group_by(query_seq, bin) %>%
  summarise(te_count = n(),
            te_bp = sum(length))

ggplot(te_density %>% filter(query_seq == "chr1"),
       aes(x = bin, y = te_bp / 1e6)) +
  geom_line(color = "steelblue") +
  labs(x = "Position (Mb)", y = "TE Coverage (Mb)",
       title = "TE Density along Chr1") +
  theme_minimal()

三、RepeatModeler2从头发现

3.1 运行RepeatModeler2

# RepeatModeler2用于从新基因组中发现未知的TE家族
# 特别适合非模式生物

# 安装
conda install -c bioconda repeatmodeler  # Conda安装

# 步骤1:建立基因组数据库
BuildDatabase \
  -name genome_db \             # 数据库名
  -engine rmblast \             # 搜索引擎
  genome.fa                     # 输入基因组

# 步骤2:运行RepeatModeler2
RepeatModeler \
  -database genome_db \         # 步骤1创建的数据库
  -pa 16 \                      # 并行线程
  -engine rmblast \             # 搜索引擎
  -LTRStruct                    # 启用LTR结构搜索(RepeatModeler2新功能)

# RepeatModeler2包含3个从头发现算法:
# 1. RECON — 基于序列自比对和聚类
# 2. RepeatScout — 基于种子扩展
# 3. LtrHarvest/Ltr_retriever — 结构化LTR逆转座子搜索(新增)

# 输出文件:
# genome_db-families.fa — TE家族的共识序列
# genome_db-families.stk — 种子比对文件
# 可以直接作为RepeatMasker的-lib输入

# 步骤3:用发现的库运行RepeatMasker
RepeatMasker \
  -lib genome_db-families.fa \  # 使用RepeatModeler的输出
  -pa 8 \
  -gff \
  -xsmall \
  genome.fa

3.2 TE分类

# RepeatModeler2自带分类器(RepeatClassifier)
# 但可能有些家族标记为"Unknown"

# 2025年新工具Terrier——深度学习TE分类器
# 比DeepTE、TERL、TEclass2分类准确率更高
# 覆盖97.1%的Repbase序列

# 使用Terrier对Unknown TE进行分类
python terrier.py \
  --input unknown_families.fa \    # Unknown TE序列
  --output classified_families.fa \ # 分类后的TE序列
  --model terrier_model.h5         # 预训练模型

# TEtrimmer(2025)——自动化TE边界修正
# 比EDTA和RepeatModeler2更快、更准确地注释TE
TEtrimmer \
  --input genome_db-families.fa \  # RepeatModeler输出
  --genome genome.fa \             # 参考基因组
  --output trimmed_families.fa     # 修正后的TE库

四、完整注释流水线

# 基因组重复序列注释的标准流程

# ===== 步骤1:从头发现新TE家族 =====
BuildDatabase -name genome_db -engine rmblast genome.fa
RepeatModeler -database genome_db -pa 16 -LTRStruct

# ===== 步骤2:合并自定义库和已知库 =====
# 把RepeatModeler发现的TE和Dfam/RepBase的已知TE合并
cat genome_db-families.fa Dfam_consensus.fa > combined_lib.fa

# ===== 步骤3:RepeatMasker屏蔽 =====
RepeatMasker \
  -lib combined_lib.fa \
  -pa 16 \
  -gff \
  -xsmall \
  -dir repeat_annotation/ \
  genome.fa

# ===== 步骤4:分析和可视化 =====
# 使用R脚本(见上面的分析代码)

# ===== 步骤5:用于基因注释 =====
# 把屏蔽后的基因组用于基因预测
# Augustus/BRAKER/MAKER等工具需要屏蔽后的基因组

常见报错与解决

报错信息原因解决方案
RepeatMasker: search engine not found没安装RMBlastconda install rmblast
No repeat library found物种名不识别用-lib指定自定义库
RepeatModeler: out of memory基因组太大增加内存或分染色体处理
Unknown TE familiesRepeatClassifier无法分类用Terrier深度学习重分类
BuildDatabase: fasta error序列名有特殊字符清理序列名(去除空格和特殊符号)
Low masking percentage物种TE含量少或库不全先用RepeatModeler建自定义库

速查表

# 重复序列注释流程
RepeatModeler2(从头发现) → 合并已知TE库(Dfam)
→ RepeatMasker(同源屏蔽) → 统计分析 → 基因注释

# RepeatMasker关键参数
-species: 物种名(使用Dfam/RepBase库)
-lib: 自定义TE库
-pa: 并行线程数
-gff: 输出GFF注释
-xsmall: 小写屏蔽
-s/-q: 灵敏/快速模式

# RepeatModeler2关键参数
-database: BuildDatabase创建的数据库名
-pa: 并行线程数
-LTRStruct: 启用LTR结构搜索(推荐)
-engine: rmblast或abblast

# TE分类方法
RepeatClassifier: RepeatModeler自带(基本)
Terrier(2025): 深度学习分类器(覆盖率97.1%)
TEtrimmer(2025): 自动化边界修正

# 人类基因组TE组成
LINE(~20%) > SINE(~13%) > LTR(~8%) > DNA(~3%)
总散在重复: ~45%
串联重复+低复杂度: ~5%
总重复: ~50%

# 数据库
Dfam: 开放TE家族数据库(推荐)
RepBase: 商业TE数据库(需要订阅)
NCBI RepeatDB: NCBI的重复序列资源

面试高频问题

Q1:转座元件I类和II类的区别是什么?

:I类(逆转座子)通过"复制-粘贴"(copy-and-paste)机制转座——先转录为RNA,逆转录为cDNA,再插入基因组新位置,原位置的拷贝保留。包括LTR逆转座子(如ERV)和非LTR逆转座子(如LINE/SINE)。II类(DNA转座子)通过"剪切-粘贴"(cut-and-paste)机制——转座酶直接将DNA从原位置切出并插入新位置。I类每次转座会增加一个拷贝,所以I类TE在基因组中数量多;II类转座不增加拷贝数。

Q2:RepeatMasker和RepeatModeler的关系是什么?

:两者互补。RepeatModeler2是从头发现(de novo)工具——从新基因组序列中发现未知的TE家族,生成TE共识序列库。RepeatMasker是同源搜索工具——用已知的TE库(Dfam数据库或RepeatModeler生成的库)搜索基因组中的重复序列并屏蔽。标准流程是先用RepeatModeler2发现物种特异的TE,再合并已知库后用RepeatMasker屏蔽。RepeatMasker只能找到库里有的TE,RepeatModeler2可以发现全新的TE家族。

Q3:为什么基因预测前要屏蔽重复序列?

:①TE中含有的ORF和剪接信号会被基因预测工具误判为真实基因——例如LINE-1编码的ORF1p和ORF2p会被预测为蛋白编码基因;②串联重复和低复杂度序列会干扰序列比对——导致同源基因搜索产生虚假比对;③重复序列中的错配会影响基因模型的准确性。屏蔽方法有两种:硬屏蔽(用N替换)适合ab initio预测,软屏蔽(用小写字母)适合同源搜索(BLAST仍然可以匹配但会降低权重)。

Q4:TE散度分析能告诉我们什么?

:TE散度(Kimura距离)反映TE插入基因组的时间。新插入的TE与共识序列(参考序列)几乎完全一致(散度低),随着时间推移积累突变导致散度增加。因此散度分布图相当于TE的"年龄谱":①低散度峰代表近期活跃的TE爆发事件;②高散度的TE代表古老的插入。比较不同物种的TE散度谱可以揭示物种特异的TE扩增事件——如人类基因组中Alu元件有一个低散度峰(仍在活跃转座),而L2在高散度区(古老的已不活跃的TE)。

Q5:2025年TE分析有什么新进展?

:①Terrier(2025年Briefings in Bioinformatics)——深度学习TE分类器,覆盖97.1%的Repbase序列,在非模式生物中表现优于DeepTE和TEclass2,解决了RepeatModeler输出中大量"Unknown"分类的问题;②TEtrimmer(2025年)——自动化TE边界修正工具,比EDTA和RepeatModeler2更快速和准确地注释TE的精确边界;③长读长测序(PacBio HiFi/ONT)大幅提升了重复区域的组装质量,使得全长TE的结构分析成为可能;④EDTA(Extensive de novo TE Annotator)整合了多种从头发现和同源方法,提供更全面的TE注释流水线。