147-学习使用TxDb对象
刘小泽写于19.11.17
教程来自Bioconductor:https://bioconductor.org/packages/release/bioc/vignettes/GenomicFeatures/inst/doc/GenomicFeatures.pdf【更新于19-10-29】
0 前言
需要一个包:GenomicFeatures
,方便从UCSC、BioMart数据库中提取、处理转录本相关的信息
suppressPackageStartupMessages(library('GenomicFeatures'))
这个包就是利用TxDb对象来存储转录本的metadata,包含了5’/3’非翻译区(UTRs)、蛋白编码区(CDSs)、外显子。TxDb对象的背后是一个SQLite数据库,包含了基因组坐标,前mRNA、外显子、蛋白编码序列的对应关系和相对应的基因ID
1 如何从TxDb对象获取数据
1-1 首先加载转录本数据
最简单的方式就是这样:
library(TxDb.Hsapiens.UCSC.hg19.knownGene)
txdb <- TxDb.Hsapiens.UCSC.hg19.knownGene
> txdb
TxDb object:
# Db type: TxDb
# Supporting package: GenomicFeatures
# Data source: UCSC
# Genome: hg19
# Organism: Homo sapiens
# Taxonomy ID: 9606
# UCSC Table: knownGene
# Resource URL: http://genome.ucsc.edu/
# Type of Gene ID: Entrez Gene ID
# Full dataset: yes
# miRBase build ID: GRCh37
# transcript_nrow: 82960
# exon_nrow: 289969
# cds_nrow: 237533
# Db created by: GenomicFeatures package from Bioconductor
# Creation time: 2015-10-07 18:11:28 +0000 (Wed, 07 Oct 2015)
# GenomicFeatures version at creation time: 1.21.30
# RSQLite version at creation time: 1.0.0
# DBSCHEMAVERSION: 1.1
从中可以看到,这个数据中默认的基因ID是Entrez ID,因此如果自己使用的基因名不一致,还需要提前转换
1-2 可以根据想要的染色体进行过滤
查看目前包含的染色体
seqlevels(txdb)
# 你会发现除了常见的染色体,还有大量命名很奇怪的,比如”"chrUn_gl000233"“
如果只想要1号染色体的
seqlevels(txdb) <- "chr1"
又想复位怎么办?
想要原来全部的染色体,重新筛选,两种方法:
(简单粗暴) 重新加载一遍那个包,把txdb覆盖掉
(有点技术)利用一个复位函数
seqlevels(txdb) <- seqlevels0(txdb)
1-3 提取想要的数据
TxDb
和ChipDb、OrgDb
都很像,都支持columns()、keytypes()、keys()、select()
等函数,对于提取子集最有帮助了
查看txdb数据库支持哪些ID转换
> columns(txdb)
[1] "CDSCHROM" "CDSEND" "CDSID" "CDSNAME" "CDSSTART"
[6] "CDSSTRAND" "EXONCHROM" "EXONEND" "EXONID" "EXONNAME"
[11] "EXONRANK" "EXONSTART" "EXONSTRAND" "GENEID" "TXCHROM"
[16] "TXEND" "TXID" "TXNAME" "TXSTART" "TXSTRAND"
[21] "TXTYPE"
看看txdb允许查询的数据类型
> keytypes(txdb)
[1] "CDSID" "CDSNAME" "EXONID" "EXONNAME" "GENEID" "TXID"
[7] "TXNAME"
用select挑选出来
需要提供 注释信息 + 查询ID + 转换后的ID类型 + 查询ID的类型
keys <- c("100033416", "100033417", "100033420")
> select(txdb, keys, columns="TXNAME", keytype="GENEID")
'select()' returned 1:1 mapping between keys and columns
GENEID TXNAME
1 100033416 uc001yxl.4
2 100033417 uc001yxo.3
3 100033420 uc001yxr.3
练习:还是上面👆的基因,找出它们所在的染色体和正负链
cols <- c("TXNAME", "TXSTRAND", "TXCHROM")
> select(txdb, keys=keys, columns=cols, keytype="GENEID")
'select()' returned 1:1 mapping between keys and columns
GENEID TXNAME TXCHROM TXSTRAND
1 100033416 uc001yxl.4 chr15 +
2 100033417 uc001yxo.3 chr15 +
3 100033420 uc001yxr.3 chr15 +
1-4 将提取的数据返回为GRanges对象
虽然用select
提取数据很方便,但如果能保存成GRanges对象,后面提取信息会更加便利。比如提取外显子、转录本、编码区域的坐标信息
使用transcripts()、exons()、cds()
函数,它们运行的结果就会返回GRanges对象
获取chr15的转录本的GRanges对象 => transcripts()
seqlevels(txdb) <- "chr15"
GR <- transcripts(txdb)
# chr15的转录本数量
> length(GR)
[1] 3337
> GR[1:3]
GRanges object with 3 ranges and 2 metadata columns:
seqnames ranges strand | tx_id tx_name
<Rle> <IRanges> <Rle> | <integer> <character>
[1] chr15 20362688-20364420 + | 53552 uc001yte.1
[2] chr15 20487997-20496811 + | 53553 uc001ytf.1
[3] chr15 20723929-20727150 + | 53554 uc001ytj.3
-------
seqinfo: 1 sequence from hg19 genome
获取chr15的正负链信息 => strand()
tx_strand <- strand(GR)
> tx_strand
factor-Rle of length 3337 with 2 runs
Lengths: 1732 1605
Values : + -
Levels(3): + - *
# 正负链总数
> sum(runLength(tx_strand))
[1] 3337
利用transcripts函数进行筛选
利用的过滤条件存储在columns(txdb)
中
比如取出3号染色体的正链转录本
# 先把txdb复位
seqlevels(txdb) <- seqlevels0(txdb)
# 然后用tx_chrom指定染色体编号,tx_strand指定链
GR_chr3 <- transcripts(txdb, filter=list(tx_chrom = "chr3", tx_strand = "+"))
> length(GR_chr3)
[1] 2179
# 看结果链的类型:全都是+链
> unique(strand(GR_chr3))
[1] +
Levels: + - *
利用promoters函数获得启动子区域
# 比如要获得chr3的信息
seqlevels(txdb) <- "chr3"
PR <- promoters(txdb, upstream=2000, downstream=400)
> PR
GRanges object with 4328 ranges and 2 metadata columns:
seqnames ranges strand | tx_id tx_name
<Rle> <IRanges> <Rle> | <integer> <character>
uc003bot.3 chr3 236279-238678 + | 13060 uc003bot.3
uc003bou.3 chr3 236279-238678 + | 13061 uc003bou.3
uc003bov.2 chr3 237326-239725 + | 13062 uc003bov.2
uc003bow.2 chr3 237326-239725 + | 13063 uc003bow.2
uc011asi.2 chr3 359366-361765 + | 13064 uc011asi.2
... ... ... ... . ... ...
uc003fyp.3 chr3 197686487-197688886 - | 17383 uc003fyp.3
uc003fyq.4 chr3 197676397-197678796 - | 17384 uc003fyq.4
uc021xjx.1 chr3 197773630-197776029 - | 17385 uc021xjx.1
uc003fyx.3 chr3 197807143-197809542 - | 17386 uc003fyx.3
uc010iat.2 chr3 197807143-197809542 - | 17387 uc010iat.2
-------
seqinfo: 1 sequence from hg19 genome
1-5 整合分组(grouped features)
有时关心的不止是某个基因/转录本的坐标,还有:某个基因包含多少转录本;某个转录本有多少外显子
就可以利用transcriptsBy()、exonsBy()或cdsBy()
转录本按照基因分组
transcriptsBy()
函数返回的是GRangesList对象。
GRList <- transcriptsBy(txdb, by = "gene")
length(GRList)
[1] 1271
> names(GRList)[10:13]
[1] "100128025" "100128164" "100128378" "100128640"
> GRList[11:12]
GRangesList object of length 2:
$`100128164`
GRanges object with 2 ranges and 2 metadata columns:
seqnames ranges strand | tx_id tx_name
<Rle> <IRanges> <Rle> | <integer> <character>
[1] chr3 169661772-169684522 - | 17029 uc011bpp.2
[2] chr3 169672015-169684522 - | 17030 uc003fgf.3
-------
seqinfo: 1 sequence from hg19 genome
$`100128378`
GRanges object with 1 range and 2 metadata columns:
seqnames ranges strand | tx_id tx_name
<Rle> <IRanges> <Rle> | <integer> <character>
[1] chr3 52096110-52099128 - | 16010 uc010hmb.2
-------
seqinfo: 1 sequence from hg19 genome
除了按照基因分组,还可以按照exon/cds
分组
除了对转录本进行分组,还可以使用exonsBy / cdsBy
,不过它们只能按照转录本或基因分组tx/gene
获取每个转录本的全部外显子 => exonsBy
> GRList <- exonsBy(txdb, by = "tx")
> length(GRList)
[1] 4328
> names(GRList)[10:13]
[1] "13069" "13070" "13071" "13072"
> GRList[[12]]
GRanges object with 25 ranges and 3 metadata columns:
seqnames ranges strand | exon_id exon_name exon_rank
<Rle> <IRanges> <Rle> | <integer> <character> <integer>
[1] chr3 2140550-2140662 + | 47793 <NA> 1
[2] chr3 2142242-2142323 + | 47795 <NA> 2
[3] chr3 2380862-2380917 + | 47797 <NA> 3
[4] chr3 2613100-2613242 + | 47799 <NA> 4
[5] chr3 2777899-2778025 + | 47800 <NA> 5
... ... ... ... . ... ... ...