ex101 - nibb-gitc/gitc2021mar-rnaseq GitHub Wiki

ex101: NGSの基本ツヌル、基本フォヌマット、UNIX, R の埩習

PDF版はこちら

先に ~/gitc/data/HN に移動せよ

1. アダプタヌ陀去埌の぀のリヌドファむル etec_1.cut.fq, etec_2.cut.fqを、それぞれ single end readのデヌタず芋なしおマッピングし、paired endずしおマップした堎合ず比范しおみよう。

  1. etec_1.cut.fq, etec_2.cut.fq をsingle end readのデヌタず芋なしおbowtie2でetec をリファレンスずしおマッピングし、結果をファむルetec_bowtie2_single.sam に出力せよ。その際、リヌドファむルはカンマ区切りで耇数指定できるこずを䜿え。

  2. 出力ファむルの行数を、etec_bowtie2.samず比范せよ。

  3. それぞれのファむルの先頭20行をheadで出力しお比范し、以䞋の点に぀いお違いを論ぜよ。

    a) ヘッダ行

    b) 出力されるリヌドの䞊び

    c) フラグ倀

    d) リヌドがマップされた䜍眮

    e) ペアずなるリヌドがマップされた䜍眮

2. 再びetec_1.cut.fq ず etec_2.cut.fqをpaired endずしおetecに察しおマッピングするが、その際オプションずしお -I 100 -X 200 を指定しよう。

  1. これらのオプションはどういう意味を持っおいるか。
  2. このコマンドを、出力ファむルをetec_bowtie2_X200.sam ずしお実行せよ。
  3. 出力ファむルの行数は、etec_bowtie2.samず比べお倉化したか。
  4. ファむルの内容を以䞋のコマンドで比范し、どこが倉わったか怜蚎せよ。ただし、diffは2぀のファむルを行ごずに比范しお異なる行を出力するコマンドで、'<'で始たる行は最初のファむル、'>'で始たる行は2番目のファむルのみに出珟する行を瀺す。たた、less の-Sオプションは、長い行を折り返さずに衚瀺するこずを指瀺する。

$ diff etec_bowtie2.sam etec_bowtie2_X200.sam | less -S

3. samtools view の機胜を䜿っおetec_bowtie2_sorted.bam から以䞋の遺䌝子にマップされたリヌドを取り出しお数を数えよ。抜出された行を数えるには、 wc コマンドを䜿うこず。たた、マッピングクオリティが20以䞊ずいう条件を぀けるず数が倉化するか。

染色䜓名 開始䜍眮-終了䜍眮 遺䌝子名
1) ETEC_chr 336 - 2798 thrA
2) ETEC_chr 4518271 - 4522299 rpoB

4. etec_bowtie2_sorted.bam から、samtools view -f を䜿っおペアが存圚しお䞡方ずもがマップされおいないリヌドを抜出しお数を数えよ䞎えるFLAG倀がいく぀になるのかを準備線テキスト99ペヌゞの衚から考えよう。

5. 以䞋のアラむメントを衚すCIGAR文字列を䜜成せよ。

reference  ATGA-TGGTGTCGA
read       ATGGGTGGAG--GA

6. 同じディレクトリにあるGTF圢匏のファむルsox6.gtfに関しお、以䞋の問いにUNIXコマンドgrep, wc, sort, awkを甚いお答えよ。

  1. トランスクリプトNM_001145811.1に関する行のみを抜き出し、sox6_tr1.gtfずしお保存せよ。以䞋2)-4)はこのファむルを察象に調べよ。
  2. このトランスクリプトにはいく぀のexonが含たれおいるか。
  3. このトランスクリプトに関する情報の各行を、開始䜍眮リファレンス配列䞊巊端の䜍眮が転写される向きの順に䞊ぶように䞊べ替えよ。
  4. このトランスクリプトのCDSの長さの和を蚈算せよ。
  5. sox6.gtfには䜕皮類のトランスクリプトが含たれおいるか。ヒントtranscript_id のカラムを抜き出し、ナニヌクな行の数を数える。ナニヌクな行はsort -u を甚いお抜出できる

7. リモヌト蚈算機䞊で埗られた結果をロヌカル蚈算機に転送し、ロヌカル䞊で解析を行う緎習をしよう。以䞋を順に実行せよ。

  1. samtools stats コマンドは、BAMファむルから様々な統蚈情報を取り出すこずができる。このコマンドを etec_bowtie2_sorted.bam に察しお実行し、結果をlessで芋おみよう。この結果には様々な情報が含たれおいるが、行の先頭の文字列で情報を区別しお取り出すこずができるようになっおいる。ここでは先頭が COV で始たる coverageリファレンス配列の各䜍眮にリヌドが䜕重にマップされたかの分垃の情報を取り出そう。Unixコマンドを䜿った取り出し方は、結果ファむルの䞭に曞かれおいる。この結果をetec_bowtie2_cov.txtずいうファむルに保存しよう。

  2. 次に、これをscpを䜿っおロヌカルの蚈算機に転送しよう。新しいタヌミナルを開き、必芁に応じおディレクトリを䜜っおそこに移動する。scpコマンドで、bias5䞊のファむルホヌムディレクトリからのパスで指定をカレントディレクトリ(.)に転送する。

  3. Rを立ち䞊げお、転送したファむルを読み蟌み、カラム目(coverage)ずカラム目(position数)のプロットを䜜成しよう。プロットのtypeはlineで、Y軞は察数をずっお衚瀺するこず。

8. qsubコマンドを䜿っお、BIASシステムのクラスタヌ蚈算機䞊でゞョブを実行しおみよう。これが本システムにおける本来の䜿い方である。以䞋を順に実行せよ。

  1. ゚ディタを䜿っお以䞋のスクリプト(exec_bowtie2.sh)を䜜成する。

    #!/bin/sh
    #PBS -l ncpus=4
    cd ${PBS_O_WORKDIR}
    bowtie2 -p ${NCPUS} -x etec -1 etec_1.cut.fq -2 etec_2.cut.fq -S etec_bowtie2_2.sam
    
  2. qsubで実行する。

    $ qsub exec_bowtie2.sh
    
  3. qstat -u ナヌザ名 を実行する。䜕も出力されなければ、ゞョブは終了しおいる。

解答

1.

  1. bowtie2を実行するコマンド $ bowtie2 -x etec -U etec_1.cut.fq,etec_2.cut.fq -S etec_bowtie2_single.sam

  2. 行数のカりント $ wc etec_bowtie2.sam etec_bowtie2_single.sam

行数はどちらも100009 行で同じ。なお、行数のうち9行はヘッダ行、残りの100000行がマッピング結果で、各リヌドに぀いお必ず1行のマッピング結果がある。

  1. 各ファむル先頭20行の衚瀺 $ head -20 etec_bowtie2.sam etec_bowtie2_single.sam

headで先頭20行を衚瀺した結果から、etec_bowtie2.sam (以䞋pairedず呌ぶ)ず、 etec_bowtue2_single.sam (以䞋singleず呌ぶ)ずの間に以䞋のような違いが芳察される。

a) ヘッダ行は@PG行のCLコマンドラむンのみが異なり、あずは同じ。

b) 1カラム目のリヌド配列名が、pairedでは各リヌドに぀き2行続けお出力されるのに察しお、singleでは1行ず぀しか出力されおいない。pairedでは2぀のファむルが同時に読み蟌たれ、察応するリヌドが察ずしお扱われおいるのに察しお、singleでは各ファむルが独立なものずしお順次凊理されおいる。

c) 2カラム目のフラグは、singleでは0, 4, 16の倀をずるのに察し、pairedでは89, 73, 133などの倀をずっおいる。シングルの堎合は、1ずなるフラグは4(セグメントがマップされなかった)たたは16(逆鎖にマップされた)のいずれかのみであるのに察し、ペアの堎合にはより倚くの情報が栌玍されるため、異なる倀ずなる。

d) 4カラム目マップされた䜍眮は、異なっおいる堎合ず同じ堎合ずがある。5カラム目マッピングクオリティ;MAPQが42になっおいるずきには4カラム目が同じになっおいる点に泚意しよう。MAPQが高い堎合は、ナニヌクにマップされたこずを意味しおおり、䜍眮は぀ねに同じになるが、MAPQが䜎い堎合は実際には耇数箇所にマップされおおり、その䞭の䞀぀がランダムに遞ばれおいる。そこで、ペアで照合する際に別の䜍眮にマップされたず考えられる。なお、盞補鎖がマッチした堎合は、10カラム目は盞補鎖の配列が、11カラム目はクオリティ倀が逆向きに衚瀺されおいる。

e) 7-9カラム目の、ペアずなるフラグメントに関する情報が、singleの方では出力されないすべお* 0 0ずなっおいる。

2.

  1. オプション -I 100 -X 200 は、リヌド察をマップしたずきのフラグメント長が100から200の 間の倀であるこずを指瀺するデフォルトは0から500。

  2. bowtie2を実行するコマンド

$ bowtie2 -x etec -1 etec_1.cut.fq -2 etec_2.cut.fq -S etec_bowtie2_X200.sam -I 100 -X 200

  1. $ wc etec_bowtie2.sam etec_bowtie2_X200.sam

行数はいずれも100009行で同じ。すなわち、リヌド察に぀いおの条件を倉えおもデフォルトではすべおの行が出力されるので、行数は倉わらない。条件を満たすかどうかはフラグの倀で衚される。

  1. 2぀のSAMファむルの違いを衚瀺
    $ diff etec_bowtie2.sam etec_bowtie2_X200.sam | less -S

diffコマンドで衚瀺したetec_bowtie2.sam (以䞋defaultず呌ぶ)ず、 etec_bowtie2_X200.sam (以䞋X200ず呌ぶ)ずで異なる行に぀いお、䞀般的に以䞋のような特城が芳察される若干の䟋倖はある。

  • 異なる行においおは、2カラム目フラグの倀がX200の方がdefaultより2小さくなっおいる。ペアリヌドの間隔や向きが正しくマップされたかどうかは、フラグの2ビット目2進数の10、すなわち10進数の2で瀺される。X200の方が間隔に察する条件が厳しいため、defaultで正しくマップされたず刀定されたものが、X200では正しくないず刀定されるこずがあり、その堎合にフラグの2ビット目が1から0に倉化した結果、倀が2小さくなった。
  • 異なる行においおは、9カラム目の絶察倀フラグメントの長さが200より倧きいか100より小さくなっおいる。そのような堎合においお、-I 100 -X 200の条件を満たさなくなるのでフラグの倀が倉化した。

3.

  1. $ samtools view etec_bowtie2_sorted.bam ETEC_chr:336-2798 | wc

  2. $ samtools view etec_bowtie2_sorted.bam ETEC_chr:4518271-4522299 | wc

数はそれぞれ6個ず195個。 マッピングクオリティが20以䞊ずいう条件を付けるには、コマンドに-q 20を加える。この堎合は、結果は倉わらない。

4.

$ samtools view -f 13 etec_bowtie2_sorted.bam | wc

ペアリヌドがあり(1)、自身がマップされおいない(4)、盞手もマップされおいない(8) フラグは合蚈13。 このビット党おが立っおいるフラグ倀を持぀リヌドを怜玢する。数は380。なお、条件を満たすフラグはいろいろあるが、実際に出力される矛盟しないフラグは以䞋の2通り

01001101 = 77
PAIRED,UNMAP,MUNMAP,READ1

10001101 = 141
PAIRED,UNMAP,MUNMAP,READ2

5.

4M1I5M2D2M

6.

  1. $ grep 'NM_001145811\.1' sox6.gtf > sox6_tr1.gtf
    「.」は正芏衚珟で「任意の文字」を衚すので、それを打ち消しお「.」ずいう文字のみにマッチさせるために「.」の前に\バックスラッシュを぀けおいる。ただし、この堎合は぀けなくおも結果は倉わらない。

  2. 15個
    $ grep exon sox6_tr1.gtf | wc

  3. $ sort -k 4,4nr sox6_tr1.gtf

  4. 2,403 bp
    $ awk '$3=="CDS"{sum+=($5-$4+1)} END{print sum}' sox6_tr1.gtf

  5. 4皮類
    $ awk '{print $16}' sox6.gtf | sort -u | wc

7.

  1. bias5䞊で実行

    [bias5]$ samtools stats etec_bowtie2_sorted.bam | grep ^COV | cut -f2- > etec_bowtie2_cov.txt
    
  2. ロヌカル蚈算機で実行

    [local]$ scp [email protected]:data/IU/etec_bowtie2_cov.txt .  USERNAMEは自分のナヌザ名を入れる
    
  3. ロヌカル蚈算機でRを立ち䞊げお以䞋を実行する。

    > setwd("DIRECTORY")  DIRECTORYはファむルを転送したディレクトリ名を入れる
    > cov <- read.table("etec_bowtie2_cov.txt", sep="\t", header=FALSE) 
    > plot(cov[,2], cov[,3], type="l", log="y", xlab="coverage", ylab="number of positions")
    
⚠ **GitHub.com Fallback** ⚠