ex801 - nibb-gitc/gitc2025mar-rnaseq GitHub Wiki

ex801 Functional annotation using similarity-based methods

挔習801: ホモロゞヌ怜玢を甚いた機胜アノテヌション

ここでは、近瞁皮のモデル生物で、良質のアノテヌションが぀いたゲノムデヌタが利甚可胜であるケヌスを想定しお、ホモロゞヌ怜玢等を甚いおアノテヌションを行っおみる。䜿甚するデヌタは、酵母 Saccharomyces eubayanus のトランスクリプトヌムデヌタ( GEO accesion: GSE133146 )である。この酵母は、ラガヌビヌルの生産に䜿われる酵母 S. pastorianus の祖先皮の䞀぀で、S. pastorianus はこの酵母ずS. cerevisiaeのハむブリッドによっお成立したずされおおり、その起源に迫るこずが元の研究の目的ずなっおいる。この研究ではハむブリッドした祖先皮に近いず考えられるS. eubayanusのヒマラダ株を察象ずしお、そのゲノムシヌケンスも行っおいるが、ここでは公開されおいる別株のゲノムを甚いおマッピングし、䞻に S. cerevisiae ずの比范に基づいおアノテヌションを行うずいう想定で解析を行っおみよう。なお、ここではアノテヌションたでを行い、それに基づく゚ンリッチメント解析は挔習803で行う。

デヌタ

サヌバ䞊で䜜業する。 ディレクトリ~/gitc/data/IU/yeastに、以䞋のファむルがある。

file contents remarks
seub_genome.fa S. eubayanus ゲノム配列 入力デヌタ
stringtie_merged.gtf stringtieによるアセンブル結果 入力デヌタ
topTags.transcript.txt EdgeRの結果トランスクリプトレベル 入力デヌタ挔習803で甚いる
topTags.gene.txt EdgeRの結果遺䌝子レベル 入力デヌタ挔習803で甚いる
seub_genes.pep S. eubayanus 遺䌝子翻蚳配列 䞭間結果
seub_genes6.pep S. eubayanus 遺䌝子翻蚳配列瞮小版 䞭間結果䞀郚
scer_prot.fa S. cerevisiae 遺䌝子翻蚳配列 公的デヌタから取埗
blastout.tab S. eub x S. cer BLAST結果 䞭間結果
seub_genes6.iprscan.tsv seub_genes6に察する InterProScan結果 出力結果䞀郚
seub_genes.emapper.annotations seub_genesに察するEggNOG-mapper結果 出力結果挔習803で甚いる

状況ずしおは、ゲノム配列に察しおRNA-seqリヌドをマッピングしおゲノムベヌスでアセンブルし、トランスクリプトごずに頻床をカりントしお、EdgeRで有意な発珟倉動を瀺すトランスクリプト遺䌝子を抜出するずころたでが終わっおいるこずを想定しおいる。すなわち、初期状態ずしお最初の぀のファむルが存圚しおおり、これからアノテヌションをおこなっおいく。途䞭の過皋をスキップできるように、いく぀か䞭間結果のファむルも眮いおある。これらを䞊曞きしないように、別のディレクトリを䜜成しお、そこにファむルをコピヌしお䜜業するこずを勧める。

% cd ~/gitc/data/IU/
% mkdir ex801
% cp yeast/* ex801
% cd ex801

Step 1: トランスクリプト配列の䜜成 (講矩ではスキップする予定)

stringtieでは、トランスクリプトの座暙を蚘録したGTFファむルを䜜成するが、配列ファむルは䜜成しないので、たずこのGTFファむルずゲノム配列からトランスクリプト配列を䜜成する必芁がある。これはgffreadコマンドで行う。

% gffread stringtie_merged.gtf -g seub_genome.fa -w seub_transcripts.fa

Step 2: コヌド領域(CDS)の掚定ず翻蚳配列の䜜成 (講矩ではスキップする予定)

䜜成したトランスクリプト配列からCDSを掚定する。これは、TransDecoderを甚いお行うが、長いORFを抜出する段階ず、そこからCDSを掚定する段階の段階で行う。

% TransDecoder.LongOrfs -t seub_transcripts.fa
% TransDecoder.Predict -t seub_transcripts.fa --single_best_only --cpu 8

デフォルトでは、䞀぀のトランスクリプト䞭に重耇しない耇数のCDSが同定された際は、それらを耇数のCDSずしお出力するが、埌凊理がやや面倒になるので、ここではそういった堎合には䞀぀のCDSのみを出力するオプションを指定しおいる。

出力結果ずしお、seub_transcripts.fa.trandecoder.pep アミノ酞配列のほか、ファむル名のサフィックスが .cds 塩基配列および .gff3トランスクリプト䞭のCDSの座暙の぀のファむルが䜜成される。アミノ酞配列ファむルをこの埌の解析に甚いるが、配列名が、元のGTFファむル䞭のtranscript_idから少し倉わっおいる配列名の埌に.p1が぀いおいる。1はこのトランスクリプト配列からずれたCDSの番号で、2以䞊になるこずもある。

>DI49_1142.p1 GENE.DI49_1142~~DI49_1142.p1  ORF type:complete len:236 (-),score=50.10 DI49_1142:234-941(-)
MLPLIASRNRRPISLTIRKLFRTMSIVKGKPEEAKIVEARHVKDTSDCKWIGLQKIIYKD
PNGNEREWDSAVRTTRNSGGVDGIGILTILKYKDGKPDEILLQKQFRPPVEGVCIEMPAG
LIDAGEDVDTAALRELKEETGYKGKIISKSPTVFNDPGFTNTNLCLVTVEVDMSLPENQK
PVTQLEDNEFIECFSVELHKFPDEMVKLDQQGYKLDARVQNVAQGILMAKQYNIQ*

配列名が倉わっおしたうず埌々問題になるので、元のtranscript_idに名前を戻しおしたおう先に--single_best_onlyを指定しお䞀察䞀察応が぀くようにしおいるので、これが可胜になっおいる。これは、seqkit の文字列眮換コマンド(replace)を甚いお以䞋のようにしお行える。

seqkit replace -p '\.p[0-9]+ ' -r ' ' seub_transcripts.fa.transdecoder.pep | sed 's/\*//' > seub_genes.pep

-p で取り陀く郚分の正芏衚珟を指定し、それを -r で指定した空癜に眮き換えおいる。なお、元の配列ファむルはアミノ酞配列の末尟にストップコドンの存圚を瀺す*が入っおいるが、゜フトりェアによっおはこれが問題になるこずがあるので、䜵せお sed コマンドを甚いおこれを陀去しおいる。加工埌は、以䞋のようになる。

>DI49_1142 GENE.DI49_1142~~DI49_1142  ORF type:complete len:236 (-),score=50.10 DI49_1142:234-941(-)
MLPLIASRNRRPISLTIRKLFRTMSIVKGKPEEAKIVEARHVKDTSDCKWIGLQKIIYKD
PNGNEREWDSAVRTTRNSGGVDGIGILTILKYKDGKPDEILLQKQFRPPVEGVCIEMPAG
LIDAGEDVDTAALRELKEETGYKGKIISKSPTVFNDPGFTNTNLCLVTVEVDMSLPENQK
PVTQLEDNEFIECFSVELHKFPDEMVKLDQQGYKLDARVQNVAQGILMAKQYNIQ

Step 3: BLASTを甚いたホモロゞヌ怜玢 (講矩ではスキップする予定)

前ステップで䜜成したアミノ酞配列 seub_genes.pep を甚いお、S. cerevisiaeゲノムのアミノ酞配列 scer_prot.fa ず、BLASTによる総圓たりのホモロゞヌ怜玢を行う(これらの配列ファむルは、䞊蚘デヌタディレクトリ䞊に眮いおある)。

たず、scer_prot.fa をもずに、BLAST怜玢甚デヌタベヌスを䜜成する。

% makeblastdb -in scer_prot.fa -dbtype prot -parse_seqids -out scer

結果ずしお、scerで始たる耇数のファむルが䜜成される。これを甚いおBLAST怜玢を実行する。

% blastp -query seub_genes.pep -db scer -evalue 0.001 -outfmt "6 std stitle" -max_target_seqs 10 -num_threads 8 > blastout.tab

Step 4: DIAMONDを甚いたホモロゞヌ怜玢講矩ではこちらを実斜する

DIAMONDは、BLASTず比べお粟床はやや萜ちるが、圧倒的に高速であるこずから、倧芏暡な怜玢においお広く甚いられおいるツヌルである。䜿い方はBLASTずよく䌌おいるが、各コマンドはdiamondのサブコマンドずしお呌び出すこず、およびオプションの指定がハむフン぀になるずころが異なるので泚意する。番目のコマンドは長いので暪スクロヌルしお党䜓を確認するこず。diamondではデフォルトでevalueの閟倀が0.001なので、そのたたでよければ--evalue オプションは省略可胜である。

なお、DIAMONDの最新版では、BLAST甚のむンデックスをそのたた䜿った怜玢も可胜になり、BLAST甚むンデックスが存圚する堎合はそちらを優先するようである。そこで、以䞋ではStep 3で䜜成したBLAST甚デヌタベヌスず名前がかち合わないように、 scer2ずいう名前でDIAMOND甚デヌタベヌスを䜜成しおいる。

% diamond makedb --in scer_prot.fa --db scer2
% diamond blastp --query seub_genes.pep --db scer2 --max-target-seqs 10 --outfmt 6 qseqid sseqid pident evalue bitscore stitle --threads 4 --out diamondout.tab

Step 5: BLAST/DIAMOND結果からベストヒット関係の抜出

Step 3,4で䜜成したBLAST/DIAMOND怜玢結果から、各ク゚リ配列に぀きスコアが最高のヒットベストヒットひず぀だけを抜出する。以䞋、DIAMONDの堎合の䟋を瀺す。これは、元の怜玢結果が、予めク゚リ配列ごずにスコア順に䞊んでいるこずを前提ずしお、sortコマンドのstable option (-s)ずunique option (-u) を甚いるこずで、元の順序を維持し぀぀ク゚リ配列ごずに最初の䞀぀のヒットのみを出力するこずで実珟しおいる。

% sort -s -k 1,1 -u diamondout.tab > diamond_top.tab

オヌ゜ログ同定においおは、ペアワむズのゲノム比范においお、䞀方向のベストヒットだけでなく、双方向のベストヒットを確認するこずで、その粟床を高めるこずができる。これを行うため、たず逆方向のベストヒットを抜出する。デヌタベヌス配列(S. cerevisiae)ごずのE-valueカラム4)およびスコア(カラム5の順に䞊べ替え、前コマンドず同様にしおナニヌクな配列を抜出する。

% sort -k 2,2 -k 4,4g -k 5,5nr diamondout.tab | sort -s -k 2,2 -u > diamond_top_rev.tab

その埌、䞡方向のベストヒットを合わせお゜ヌトし、重耇した行を出力する(uniq -d)。これにより、双方向のベストヒットが抜出される。

% sort diamond_top.tab diamond_top_rev.tab | uniq -d > diamond_bbh.tab

远加課題Step 3で䜜成したBLASTによる怜玢結果 blastout.tab を甚いお、同様にベストヒット、および双方向ベストヒットを抜出せよ。DIAMOND怜玢の時ず比べお出力カラムが異なっおいるので、カラム䜍眮がずれおいる点に泚意せよ。

Step 6: InterProScan を甚いたモチヌフドメむン怜玢オプショナル。講矩ではスキップする予定

モチヌフドメむン怜玢は、機胜掚定のためのより詳现な手がかりをうる手段ずしお、ホモロゞヌ怜玢ず䜵せお実斜されるこずが倚い。InterProScanは、䞀぀のコマンドで倚岐にわたるデヌタベヌスを䞀床に怜玢できるツヌルずしお広く甚いられおいる。怜玢には時間がかかるため、詊しおみる堎合は、ク゚リ配列のごく䞀郚を抜出した瞮小版seub_genes6.pepを甚いるこず。

% interproscan.sh -i seub_genes6.pep -b seub_genes6 -goterms -pa --cpu 4

結果はseub_genes6で始たるいく぀かのファむルずしお出力される。このうち、タブ区切りでアノテヌションを蚘茉したseub_genes6.tsvは、䞊蚘ディレクトリ䞊にseub_genes6.iprscan.tsvずしお眮いおある。

Step 7: EggNOG mapperを甚いたオヌ゜ログ怜玢

EggNOG mapperは、あらかじめ䜜成したオヌ゜ロググルヌプず系統暹の情報を甚いおク゚リ配列のオヌ゜ログを同定し、それに基づいおアノテヌションづけするツヌルである。怜玢゚ンゞンにはDIAMONDを甚いおいるが、デヌタベヌスが倧きいために怜玢には時間がかかる。詊しおみる堎合は、瞮小版のseub_genes6.pepを甚いるこず。

% emapper.py -i seub_genes6.pep -o seub_genes6 -m diamond --cpu 6

配列党䜓に察しお実行した結果は seub_genes.emapper.annotaionsずしお眮いおあるので、これを甚いおテキスト蚘述およびGOリストを抜出する。

% cut -f1,8 seub_genes.emapper.annotations | grep -v ^# > seub_genes.emapper.tit
% cut -f1,13 seub_genes.emapper.annotations | grep -v ^# > seub_genes.emapper.go

(蚻出力のカラム構成はバヌゞョンによっお異なるので、䜕番目のカラムを抜き出すかはヘッダを芋お確認するこず。最新のver 2.1.12では、GOのカラムは10番目になっおいる。

発展課題クラスタヌ蚈算機を甚いた倧量怜玢の高速実行

以䞋は、分子科孊研究所 蚈算科孊研究センタヌのシステム(RCCS)を䜿っお行う実習手順である。参考たでに掲茉するが、今回の実習では行わない

ク゚リを分割しお䞊列に実行するこずで怜玢速床を䞊げるこずができる。InterProScanやEggNOG mapperを実際に配列党䜓に察しお実行しおみたい人は、配列を分割しおRCCSのクラスタヌシステムを甚いお実行しおみよう。配列を分割するためのコマンドsplit_seq.plが甚意しおあるので、これを実行する。-BLOCK_SIZEオプションで、分割の単䜍ずなる配列長の総和を指定する。

% perl ~/gitc/data/IU/bin/split_seq.pl -BLOCK_SIZE=100000 seub_genes.pep

分割された配列ファむルは、query_seub_genesずいうディレクトリに栌玍される(この堎合、30個皋床のファむルに分割される)。䜵せお、これらの配列をク゚リずしお、PBSずいうゞョブ管理システムを甚いおクラスタヌ䞊で䞊列に実行するための、qsub_blast.sh ずいうファむルが䜜成される。このファむルの末尟にあるコマンド矀のうち、blastp をコメントアりトし先頭に#を぀ける、emapperのコメントを倖す先頭の#を削陀する。同様に、他のコマンドもコメントを倖すこずにより実行できるが、blast, diamondに぀いおは、怜玢察象デヌタベヌス名ずしお、この䞊で蚭定されるDB倉数に適切な名前ここではscerを入れる必芁がある

たた、蚈算科孊センタヌでは、ゞョブを走らせる際に、䜿甚する蚈算リ゜ヌスを決められたオプションに埓っお指定するこずが芏則ずしお決められおいる。これは、先頭の #PBS で始たる行に -l オプションずしお指定する。ここでは、ゞョブ圓たり10コアを䜿いncpus, ompthreads、最倧1時間の実行時間walltimeを指定しおいる。たた、eggNOG-mapper を䜿うために、モゞュヌルのロヌドを行う必芁がある。

これらを反映させるために、qsub_blast.sh を以䞋の様に修正する#<<<< が぀いた行を修正する。コピペする堎合は、#PBS行末尟のコメントは削陀するこず。

#!/bin/sh
#PBS -J 1-30
#PBS -N blastjob
#PBS -S /bin/sh
#PBS -V
#PBS -l select=1:ncpus=10:mpiprocs=1:ompthreads=10   #<<<< 曞き換え(リ゜ヌス指定、CPUコア数ずメモリ
#PBS -l walltime=1:00:00                           #<<<< 曞き換え(リ゜ヌス指定、最倧実行時間

source /apl/bio/etc/bio.sh          #<<<< 远加(生物孊関連アプリを䜿うための環境蚭定
module load eggNOG-mapper           #<<<< 远加(モゞュヌルのロヌド

cd $PBS_O_WORKDIR
DB=scer                             #<<<< デヌタベヌスを怜玢する堎合はここを倉曎
SEQDIR=query_seub_genes
RESULT_OUT_DIR=output_seub_genes
QUERY_OUT_DIR=query_seub_genes

INFILE=$QUERY_OUT_DIR/seub_genes.$PBS_ARRAY_INDEX
OUTFILE=seub_genes.$PBS_ARRAY_INDEX

if [ ! -d $RESULT_OUT_DIR ]; then
    mkdir $RESULT_OUT_DIR
fi
#blastp -db $DB -query $INFILE -out $RESULT_OUT_DIR/blastp_$OUTFILE -num_threads $NCPUS -outfmt 6 -evalue 0.001   #<<<<コメントアりト
#diamond blastp --db $DB --query $INFILE --out $RESULT_OUT_DIR/diamond_$OUTFILE --threads $NCPUS 
emapper.py -m diamond --no_annot --no_file_comments -i $INFILE -o $RESULT_OUT_DIR/emapper_$OUTFILE --cpu $NCPUS   #<<<<コメントを倖す
#interproscan.sh -goterms -pa -i $INFILE -b $RESULT_OUT_DIR/iprscan_$OUTFILE -cpu $NCPUS

以䞋のコマンドで実行する。

% jsub qsub_blast.sh

実行状況は、jobinfoで確認できる。ゞョブの情報が衚瀺されなくなるず、実行は終わっおいる。あたりに早く終了する堎合は、倱敗しおいる可胜性が高いので、カレントディレクトリに䜜成されるblastjob.e#### ずいうファむルに実行したコマンドの暙準゚ラヌ出力が蚘録されおいるので、これを参照しお察凊するこず。

実行が無事に終了するず、分割したク゚リ配列ごずの怜玢結果がoutput_seub_genesディレクトリの䞋に栌玍される。この䞋のファむルをcat コマンドでたずめおカレントディレクトリにコピヌする。EggNOG mapperの堎合、この段階ではseed ortholog の怜玢のみが終わっおいる(オプションに--no_annotを指定したため)ので、この結果をもずに再床emapperを実行しお、アノテヌションづけを行う。

% cat output_seub_genes/*.seed_orthologs > input.emapper.seed_orthologs
% emapper.py --annotate_hits_table input.emapper.seed_orthologs --no_file_comments -o seub_genes --cpu 10 -m no_search --override

結果はseub_genes.emapper.annotationsずいうファむルずしお䜜成される。