RNA-seq解析入門⑤:カウント編

RNA-seq
📚 この記事について
遺伝子ごとのリード数を集計し、発現変動解析の入力となるカウントマトリクスを作ります。
🔙 前の記事RNA-seq解析入門④:マッピング編
🔜 次の記事RNA-seq解析入門⑥:発現変動解析編
📌 前提:STAR などで出力したソート済み BAM と、マッピング時と同じ GTF があること

RNA-seq(RNA sequencing)のカウント(定量)は、各遺伝子に何本のリードが対応するかを数える工程です。ここでは2つの方式の違いと、HTSeq-count の実践的な使い方を押さえます。

1. カウントのゴール


マッピングでリードをゲノム上に貼り合わせたら、次は各遺伝子に何本のリードが重なっているかを数えます。この数値が大きいほど、その遺伝子がよく発現していたことを意味します。

図1:カウントは遺伝子ごとのリード数を集計する
図1:カウントは遺伝子ごとのリード数を集計する

結果はカウントマトリクス(行=遺伝子、列=サンプル)として出力され、次の発現変動解析の入力になります。

2. 2つの方式


カウントの方法は大きく2つに分かれます。

図2:BAM ベースとアラインメントフリーの2方式
図2:BAM ベースとアラインメントフリーの2方式

BAM ベースは、マッピング済みの BAM を入力にします(featureCounts・HTSeq-count)。中間ファイルを確認できるのが利点です。

アラインメントフリーは、マッピングを行わず FASTQ から直接定量します(Salmon・kallisto)。処理が非常に速い一方、BAM が残らないため中間の確認はできません。

本シリーズは BAM ベース(STAR → HTSeq-count)の流れで解説します。

3. 4つのツールと使い分け


ツール 方式 特徴
featureCounts BAM ベース C 実装で高速。複数サンプルを一括処理できる
HTSeq-count BAM ベース Python 製。コマンドがシンプルだが処理は遅い
Salmon アラインメントフリー 超高速。バイアス補正が充実
kallisto アラインメントフリー 超高速・省メモリ

featureCounts は Subread パッケージのツールで、C 実装のため非常に高速です(Liao et al., Bioinformatics, 2014)。数十サンプルの一括処理に向いています。

HTSeq-count は Python 製で、コマンドがシンプルなため挙動を追いやすいツールです(Putri et al., Bioinformatics, 2022)。処理は featureCounts より遅いため、大規模データには不向きです。

Salmon は FASTQ から直接トランスクリプトの発現量を推定し、バイアス補正も充実しています(Patro et al., Nature Methods, 2017)。tximport 経由で DESeq2 に渡す流れが標準化しつつあります。

kallisto は擬似アライメント(pseudo-alignment)により、軽量・高速に定量します(Bray et al., Nature Biotechnology, 2016)。メモリが限られた環境に向いています。

状況 選択
はじめてカウントをする HTSeq-count
大量サンプルを BAM から速く処理したい featureCounts
マッピングを省いて高速に定量したい Salmon
メモリが少ない環境で高速に定量したい kallisto

4. HTSeq-count の使い方


インストール

bash
# pip でインストール
pip install HTSeq

# conda でも可
conda install -c bioconda htseq

# バージョン確認
htseq-count --version

基本コマンド

bash
htseq-count \
  -f bam \
  -r pos \
  -s no \
  -t exon \
  -i gene_id \
  output/sample_Aligned.sortedByCoord.out.bam \
  annotation.gtf \
  > counts.txt
オプション 意味
-f bam 入力形式。BAM を使うので bam を指定します
-r pos BAM のソート方法。STAR の出力は座標ソート済みなので pos です
-s no ストランド特異性。ライブラリに合わせて no / yes / reverse を選びます
-t exon GTF のどの feature を対象にするか。通常はエクソン
-i gene_id 集計の単位。gene_id で遺伝子単位に集計されます
annotation.gtf アノテーション。マッピング時と同じものを使います
> counts.txt 結果をファイルに保存します(リダイレクト)
⚠️ ストランド特異性(-s)は必ず確認する
指定する値はライブラリ調製キットによって変わります。誤るとカウントが大幅に減ります。不明な場合は RSeQC の infer_experiment.py で判定できます。一般的な TruSeq Stranded キットでは reverse を指定します。

出力の形式

text
# 遺伝子ID              カウント数
ENSG00000000003    1523
ENSG00000000005       4
ENSG00000000419     892
...
__no_feature       4821   # どの遺伝子にも対応しなかった
__ambiguous        1204   # 複数遺伝子に重なった
__too_low_aQual     302   # マッピング品質が低すぎた
⚠️ 末尾の特殊行は解析前に除く
アンダースコアで始まる行(__no_feature など)は、どの遺伝子にも割り当てられなかったリードの統計です。発現変動解析の入力にする前に、これらの行を除外します(除外のコードは⑥発現変動解析編に示します)。

慣れてきたら次のオプションも使えます。

  • -m union:複数の遺伝子に重なるリードの扱い(既定 union)。intersection-strict なども選べます。
  • -a 10:マッピング品質スコアのしきい値(既定 10)。
  • --additional-attr gene_name:出力に遺伝子名の列を追加します。
  • -n 4:使用する CPU コア数(HTSeq 2.0 以降)。

5. 注意点


  • GTF はマッピング時と同じものを使う:版が違うと遺伝子 ID が対応せず、カウントが欠落します。
  • -s の誤設定はカウントを大きく減らす:カウント総数が極端に少ないときは、まずここを疑います。
  • 特殊行を残したまま解析しない__ で始まる行は必ず除外します。

カウント表をこの先どう扱うか


HTSeq-count が返すのは、遺伝子 ID とカウント値が並んだテキストです。ここから先に続くのは、末尾の特殊行を落とし、サンプルごとのファイルを1枚の表にまとめ、遺伝子 ID に名前を対応させる、といった表の操作です。この工程はコマンドのオプションを覚える話ではなく、pandas の DataFrame を書く作業になります。ツールは動かせるのに解析が進まない、という状態はここで起きがちです。

『改訂 独習Pythonバイオ情報解析』には、この工程を正面から扱う「RNA-Seq カウントデータの処理」の章があります。pandas の基本を押さえたうえで、カウント表の読み込み、アノテーションの付与、正規化、クラスタリングまでを順に進める構成です。__ で始まる行を除く、複数サンプルを結合する、といった操作を自分で書けるようになります。

改訂 独習Pythonバイオ情報解析

改訂 独習Pythonバイオ情報解析(実験医学別冊)

羊土社・2025年1月/7,150円(税込)。Miniconda での環境構築、Jupyter Notebook、Python の基本文法、NumPy・pandas による表データの操作を順に押さえたうえで、RNA-Seq カウントデータの処理と Scanpy によるシングルセル解析へ進む構成。

※上記リンクはアフィリエイト広告(PR)です

まとめ


  • カウントは遺伝子ごとのリード数を集計し、カウントマトリクスを作る工程。
  • BAM ベース(featureCounts・HTSeq-count)とアラインメントフリー(Salmon・kallisto)の2方式がある。
  • 初学者にはコマンドがシンプルな HTSeq-count。大量サンプルなら featureCounts。
  • -s(ストランド特異性)はキットに合わせて必ず確認し、__ 行は解析前に除外する。

関連記事


参考文献


  • Putri, G. H., Anders, S., Pyl, P. T., Pimanda, J. E., & Zanini, F. (2022). Analysing high-throughput sequencing data in Python with HTSeq 2.0. Bioinformatics, 38(10), 2943–2945. doi:10.1093/bioinformatics/btac166
  • Anders, S., Pyl, P. T., & Huber, W. (2015). HTSeq—a Python framework to work with high-throughput sequencing data. Bioinformatics, 31(2), 166–169. doi:10.1093/bioinformatics/btu638
  • Liao, Y., Smyth, G. K., & Shi, W. (2014). featureCounts: an efficient general purpose program for assigning sequence reads to genomic features. Bioinformatics, 30(7), 923–930. doi:10.1093/bioinformatics/btt656
  • Patro, R., Duggal, G., Love, M. I., Irizarry, R. A., & Kingsford, C. (2017). Salmon provides fast and bias-aware quantification of transcript expression. Nature Methods, 14(4), 417–419. doi:10.1038/nmeth.4197
  • Bray, N. L., Pimentel, H., Melsted, P., & Pachter, L. (2016). Near-optimal probabilistic RNA-seq quantification. Nature Biotechnology, 34(5), 525–527. doi:10.1038/nbt.3519

コメント

タイトルとURLをコピーしました