GenomicFeatures

GenomicFeatures はトランスクリプトのアノテーションを取得したり、管理したりするためのパッケージである。そのやりとりは TxDb オブジェクトを通して行う。

library("GenomicFeatures")

ヒトのトランスクリプトアノテーションを例に利用してみる。

library(TxDb.Hsapiens.UCSC.hg38.knownGene)
txdb <- TxDb.Hsapiens.UCSC.hg38.knownGene

染色体の種類を出力するとき seqlevel 関数を利用する。

seqlevels(txdb)[1:25]
##  [1] "chr1"  "chr2"  "chr3"  "chr4"  "chr5"  "chr6"  "chr7"  "chr8"  "chr9"
## [10] "chr10" "chr11" "chr12" "chr13" "chr14" "chr15" "chr16" "chr17" "chr18"
## [19] "chr19" "chr20" "chr21" "chr22" "chrX"  "chrY"  "chrM"

アノテーションデータの取得

ある遺伝子 ID を与えて、それに関連するアノテーションを取得することができる。具体的にどのようなデータが取得できるかは columns 関数で調べることができる。また、データを取得するときにあたえる検索条件に利用できる属性は keytypes で調べることができる。

columns(txdb)
##  [1] "CDSID"      "CDSNAME"    "CDSCHROM"   "CDSSTRAND"  "CDSSTART"
##  [6] "CDSEND"     "EXONID"     "EXONNAME"   "EXONCHROM"  "EXONSTRAND"
## [11] "EXONSTART"  "EXONEND"    "GENEID"     "TXID"       "EXONRANK"
## [16] "TXNAME"     "TXTYPE"     "TXCHROM"    "TXSTRAND"   "TXSTART"
## [21] "TXEND"

keytypes(txdb)
## [1] "GENEID"   "TXID"     "TXNAME"   "EXONID"   "EXONNAME" "CDSID"    "CDSNAME"

以下、遺伝子の Ensembl ID を与えて、その遺伝子のトランスクリプトの開始位置と終了位置を取得する例。TxDb.Hsapiens.UCSC.hg38.knownGene は Ensembl ID を受け付けないので、org.Hs.eg.db パッケージを利用して、Ensembl ID を Entrez ID に変換しておく。

library(org.Hs.eg.db)

id <- select(org.Hs.eg.db,
             keys = c("ENSG00000004660", "ENSG00000007314"),
             keytype = "ENSEMBL",
             columns = c("ENSEMBL", "ENTREZID"))
id
##           ENSEMBL ENTREZID
## 1 ENSG00000004660    84254
## 2 ENSG00000007314     6329

res <- select(txdb,
              keys = id[, 2],
              keytype = "GENEID",
              columns = c("GENEID", "TXSTART", "TXEND", "TXTYPE"))
res
##   GENEID TXTYPE  TXSTART    TXEND
## 1  84254   <NA>  3860323  3890743
## 2  84254   <NA>  3860323  3893043
## 3  84254   <NA>  3865157  3893043
## 4   6329   <NA> 63938554 63972918

mat <- merge(id, res, by.x = 2, by.y = 1)
mat
##   ENTREZID         ENSEMBL TXTYPE  TXSTART    TXEND
## 1     6329 ENSG00000007314   <NA> 63938554 63972918
## 2    84254 ENSG00000004660   <NA>  3860323  3890743
## 3    84254 ENSG00000004660   <NA>  3860323  3893043
## 4    84254 ENSG00000004660   <NA>  3865157  3893043

GRanges オブジェクトの取得

トランスクリプトのデータの取得

トランスクリプトの名前、開始位置や終了位置などは上述のように二次元配置で取得できるが、Bioconductor を利用した解析の場合は、 GRanges クラスのオブジェクトとして取得したほうが便利である。

gr <- transcripts(txdb)
## GRanges object with 104178 ranges and 2 metadata columns:
##            seqnames               ranges strand   |     tx_id     tx_name
##               <Rle>            <IRanges>  <Rle>   | <integer> <character>
##        [1]     chr1       [11874, 14409]      +   |         1  uc001aaa.3
##        [2]     chr1       [11874, 14409]      +   |         2  uc001aab.3
##        [3]     chr1       [11874, 14409]      +   |         3  uc010nxq.1
##        [4]     chr1       [30366, 30503]      +   |         4  uc031tlb.1
##        [5]     chr1       [69091, 70008]      +   |         5  uc001aal.1
##        ...      ...                  ...    ... ...       ...         ...
##   [104174]     chrY [26315642, 26315875]      -   |     92692  uc033fht.1
##   [104175]     chrY [26578095, 26578328]      -   |     92693  uc033fhu.1
##   [104176]     chrY [57094007, 57094084]      -   |     92694  uc033fhw.1
##   [104177]     chrY [57094564, 57094605]      -   |     92695  uc033fhx.1
##   [104178]     chrY [57212178, 57214703]      -   |     92696  uc011ncc.1
##   -------
##   seqinfo: 455 sequences (1 circular) from hg38 genome

この例では、染色体 1 から性染色体まで合計 104,178 個のトランスクリプトが登録されていることがわかる。各トランスクリプトの名前、座標やストランドなども書かれている。

例えば、X 染色体のデータのみがほしい場合は以下のようにする。

gr[seqnames(gr) == "chrX"]
## GRanges object with 3772 ranges and 2 metadata columns:
##          seqnames                 ranges strand   |     tx_id     tx_name
##               <Rle>            <IRanges>  <Rle>   | <integer> <character>
##      [1]     chrX       [276324, 303355]      +   |     88361  uc011mgx.2
##      [2]     chrX       [281394, 303355]      +   |     88362  uc004cpc.3
##      [3]     chrX       [319145, 321319]      +   |     88363  uc011mgz.3
##      [4]     chrX       [319145, 321319]      +   |     88364  uc033dot.1
##      [5]     chrX       [624344, 646823]      +   |     88365  uc004cph.1
##      ...      ...                    ...    ... ...       ...         ...
##   [3768]     chrX [155489011, 155612961]      -   |     92128  uc004fnn.4
##   [3769]     chrX [155492535, 155612961]      -   |     92129  uc004fnp.4
##   [3770]     chrX [155907487, 155907564]      -   |     92130  uc033fck.1
##   [3771]     chrX [155908044, 155908109]      -   |     92131  uc033fcl.1
##   [3772]     chrX [156025658, 156028183]      -   |     92132  uc011nad.1
##   -------
##   seqinfo: 455 sequences (1 circular) from hg38 genome

同様な考えで、トランスクリプト名が uc004fnp.4 のデータのみを取得したい場合は以下のようにする。

 gr[elementMetadata(gr)$tx_name == "uc004fnp.4"]
## GRanges object with 1 range and 2 metadata columns:
##       seqnames                 ranges strand |     tx_id     tx_name
##          <Rle>            <IRanges>  <Rle>   | <integer> <character>
##   [1]     chrX [155492535, 155612961]      - |     92129  uc004fnp.4
##   -------
##   seqinfo: 455 sequences (1 circular) from hg38 genome

エクソンのデータの取得

トランスクリプトのデータの取得のように、エクソンの場合は exons 関数を用いる。

ex <- exons(txdb)
ex
## GRanges object with 327656 ranges and 1 metadata column:
##            seqnames               ranges strand   |   exon_id
##               <Rle>            <IRanges>  <Rle>   | <integer>
##        [1]     chr1       [11874, 12227]      +   |         1
##        [2]     chr1       [12595, 12721]      +   |         2
##        [3]     chr1       [12613, 12721]      +   |         3
##        [4]     chr1       [12646, 12697]      +   |         4
##        [5]     chr1       [13221, 14409]      +   |         5
##        ...      ...                  ...    ... ...       ...
##   [327652]     chrY [57094007, 57094084]      -   |    293786
##   [327653]     chrY [57094564, 57094605]      -   |    293787
##   [327654]     chrY [57212178, 57213357]      -   |    293788
##   [327655]     chrY [57213856, 57213964]      -   |    293789
##   [327656]     chrY [57214350, 57214703]      -   |    293790
##   -------
##   seqinfo: 455 sequences (1 circular) from hg38 genome

塩基配列データの取得

BSgenoem パッケージのデータと合わせて利用することで、トランスクリプトの塩基配列を取得することができる。ただし、TxDb と BSgenome のゲノムのバージョンが一致しているのを確認すること。次の例ではどちらも UCSC version 38 であることをパッケージの名前から確認できる。

library(TxDb.Hsapiens.UCSC.hg38.knownGene)
library(BSgenome.Hsapiens.UCSC.hg38)
txdb <- TxDb.Hsapiens.UCSC.hg38.knownGene
seq <- extractTranscriptSeqs(Hsapiens, txdb)
seq
##   A DNAStringSet instance of length 104178
##           width seq                                         names
##      [1]   1652 CTTGCCGTCAGCCTTTTCTT...AAGCACACTGTTGGTTTCTG uc001aaa.3
##      [2]   1595 CTTGCCGTCAGCCTTTTCTT...AAGCACACTGTTGGTTTCTG uc001aab.3
##      [3]   1488 CTTGCCGTCAGCCTTTTCTT...AAGCACACTGTTGGTTTCTG uc010nxq.1
##      [4]    138 GGATGCCCAGCTAGTTTGAA...ATTCAGAATTAAGCATTTTA uc031tlb.1
##      [5]    918 ATGGTGACTGAATTCATTTT...ATTCTAGTGTAAAGTTTTAG uc001aal.1
##      ...    ... ...
## [104174]     28 TGGGAAGTGAGGAGTGTCTCTGCCTGGC                uc033dok.1
## [104175]     30 CAGAATGGTAGATCCACTGACAGCTTGCAC              uc033dom.1
## [104176]    844 GCGGCACCCAGAGAGGGTCC...AGGAAACGAATAAATCTCTG uc033don.1
## [104177]   1420 TTGGGTATCCAGGCTCTGAG...AATAAATGTTCACCAAGGCA uc033doo.1
## [104178]     28 TGATTGGTGTGTTTACAAACCTTGAGCT                uc033dop.1

translate(seq[1:20])
##   A AAStringSet instance of length 20
##      width seq                                              names
##  [1]   550 LAVSLFFDLFFLFMCICCLLAQT...LTPRRLHPAQLEILY*KHTVGF uc001aaa.3
##  [2]   531 LAVSLFFDLFFLFMCICCLLAQT...LTPRRLHPAQLEILY*KHTVGF uc001aab.3
##  [3]   496 LAVSLFFDLFFLFMCICCLLAQT...DPETFASCTARDPLLKAHCWFL uc010nxq.1
##  [4]    46 GCPASLNFR*TTNNFVA*ICPKLSLGHTYAKKHYWLFI*DSELSIL   uc031tlb.1
##  [5]   306 MVTEFIFLGLSDSQELQTFLFML...KDMKTAIRQLRKWDAHSSVKF* uc001aal.1
##  ...   ... ...
## [16]  2163 VPGAVLLPSRRAAGTRVLSLLSQ...STFHLIFLYKHFSSE*KFFQTV uc031pjk.1
## [17]  1014 VLTRSWQWQVSGFRIKPRIRNFT...RLWRAKIAPLHPSLGNKSKTPS uc001abu.1
## [18]   163 QRLGLAGRSLRSEGKSLKTLMSK...MPEHQSRCEFQRGSLEIGLRPA uc001abv.1
## [19]   851 ADPCGVREGGTGSGLGSRAEGKV...AQPSSRYVWSFMLKNK**SLSR uc001abw.1
## [20]   706 GKV*RRLCPRGSCRCILRSATAR...PSRRMGPWLYFQGPPTLPSLCV uc031pjl.1
## There were 14 warnings (use warnings() to see them)