rna-seq-analysis について
RNA-seqの定量と差次的発現解析を支援する判断ロジックをまとめたスキルです。ワークフロー選択やDESeq2設定を行う人向けに、STARとSalmonの使い分け、鎖特異性の確認、モデル設定の注意点を扱います。
主な機能
- 01BAMの要否に応じたSTARとSalmonの選択
- 02鎖特異性の確認方法
- 03Salmon出力をDESeq2へ渡す手順
- 04DESeq2のデザイン式と事前フィルターの確認
- 05サンプル順序とバッチ交絡の検出
活用シーン
- 01RNA-seqのアラインメントまたは定量法の選択
- 02カウント前のライブラリー鎖特異性確認
- 03DESeq2による差次的発現解析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ awslabs/ hcls-agent-skills --skill rna-seq-analysisインストール後、Claude Code で/rna-seq-analysisを入力して読み込まれたか確認します。
同梱ファイルscripts/deseq2_contrast.py
詳細
RNA-seq 解析 — パイプラインスキル(薄い足場)
概要
定量パス(STAR と Salmon)の選択、ストランド性の判定、LLM が頻繁に誤る DESeq2 モデリングの落とし穴に関する判断ロジックを追加します。
使用方法
- アライメントベース(STAR+featureCounts)とアライメントフリー(Salmon)のどちらで定量するか選ぶときに有効化します
- いずれかのカウントソースから DESeq2 をセットアップするときに有効化します
- 想定外に低いカウントや弱い DE シグナルをデバッグするときに有効化します
コアコンセプト
判断ロジック
Need BAMs? (variant calling, fusions, novel transcripts)
├── YES → STAR two-pass + featureCounts
└── NO → Salmon (faster, lower RAM, bias-corrected)
Salmon output → DESeq2:
└── Use DESeqDataSetFromTximport (preserves length offset)
└── NEVER round txi$counts and pass to DESeqDataSetFromMatrix
Filtering strategy (VQSR equivalent):
├── ≥30 samples → VQSR-like (default DESeq2 shrinkage works well)
└── <30 samples → still works, but pre-filter aggressively
ストランド性の判定(カウント前に必ず確認してください):
| キット | featureCounts -s | Salmon -l |
|---|---|---|
| TruSeq Stranded / dUTP | 2 | ISR (PE) / SR (SE) |
| Ligation / forward | 1 | ISF / SF |
| Unstranded | 0 | IU / U |
infer_experiment.py(RSeQC)または Salmon の lib_format_counts.json で確認してください。
重要なパラメーター
| パラメーター | 値 | 変更するタイミング |
|---|---|---|
--sjdbOverhang | readLength - 1(デフォルト 100) | 100bp 以外のリード |
--twopassMode Basic | DE では常に使用 | QC 実行で速度を優先する場合のみ省略 |
Salmon --gcBias --seqBias | 常に有効 | Illumina では省略しない |
Salmon --validateMappings | 常に有効 | 選択的アライメントを有効化 |
featureCounts -s | キット依存 | 必ず実測で確認 |
| DESeq2 の事前フィルタリング | rowSums(counts >= 10) >= smallest_group | シーケンス深度が浅い場合は 10 を調整 |
lfcShrink type | "apeglm" | 任意のコントラストには "ashr" を使用 |
| デザイン式 | ~ batch + condition(関心のある変数を最後に配置) | 関心のある項は常に最後に配置 |
よくある間違い
-
誤り: 実測で確認せず、ストランド性(
-s)を推測する 正解: featureCounts の実行前にinfer_experiment.pyまたは Salmon のlib_format_counts.jsonで確認する 理由: ストランド性を誤ると、カウントが 2~10 倍低くなり、DE シグナルが弱くなります -
誤り: 正規化済みカウント(TPM、FPKM、CPM)を DESeq2 に渡す 正解: 必ず生の整数カウントから始める 理由: 正規化値は負の二項モデルを破綻させます
-
誤り:
txi$countsを丸めてDESeqDataSetFromMatrixに渡す 正解: 長さオフセットを保持するDESeqDataSetFromTximport(txi, ...)を使用する 理由: 丸めると、転写産物長バイアスに対する遺伝子ごとの長さ補正が失われます -
誤り: デザイン式で関心のある変数を先に置く(
~ condition + batch) 正解: 関心のある変数を最後に置く:~ batch + condition理由: DESeq2 はデフォルトで最後の項を検定します -
誤り: DESeq2 がサンプルの順序を一致するように並べ替えると思い込む 正解: DESeq オブジェクトを作成する前に
stopifnot(all(colnames(cts) == rownames(coldata)))を確認する 理由: 順序が一致しない場合、DESeq2 はサンプルに誤ったラベルを付けても警告しません -
誤り: カウントの少ない遺伝子の事前フィルタリングを省略する 正解:
rowSums(counts(dds) >= 10) >= smallest_group_sizeでフィルタリングする 理由: ほぼゼロの遺伝子は実行時間を増やし、多重検定補正の効果を薄めます -
誤り: ストランドライブラリで STAR の
ReadsPerGene.out.tabの 2 列目を使用する 正解: キットに応じて 3 列目(forward)または 4 列目(reverse)を使用する 理由: 2 列目は非ストランド対応です。ストランドデータに使用すると、実質的なカウントが半減します -
誤り: マッピング済みリードが 10M 未満、またはマッピング率が 70% 未満のサンプルを含める 正解: フィッティング前に除外するか、フラグを付ける 理由: 品質の低いサンプルはサイズファクターと分散推定値を歪めます
-
誤り: バッチと条件が完全に交絡している状態でモデリングする 正解: まず
table(coldata$batch, coldata$condition)を確認する 理由: 完全に相関した効果を分離できる統計モデルはありません
回答形式
- 必要なコマンドまたはコードを最初に示し、その後に説明します
- 次の構成にします:入力の確認 → 動作するコード → 重要なパラメーターの説明 → 注意点
- タスクごとに、完全に動作する例を 1 つ示します。すべての代替案は示しません
- コードコメントは最小限にし、実用的な内容(存在理由ではなく、何をするか)に絞ります
- 目安:コード 50~100 行と、その前後の簡潔な説明