Claudeのsingle-cell-rna-qcスキルでscRNA-seqのQCを回す手順
bio-researchプラグインのsingle-cell-rna-qcは、.h5adと10X .h5にMADベースのフィルタをかけます。入れ方、既定値、MT%の扱い、ガイドとコードの食い違いをまとめます。
single-cell-rna-qcは、Anthropicが配布するbio-researchプラグインに入っているskillです。シングルセルRNA-seq(scRNA-seq)のデータを渡すと、細胞ごとのQC指標を計算し、外れ値の細胞を除いた.h5adと3枚の図を書き出します。ここでは入れ方、実行されるスクリプトの中身、既定値、研究データに当てるときの調整点を順に見ていきます。
single-cell-rna-qcは何をするskillか
SKILL.mdの定義では、対象は.h5ad(scanpyなどのAnnData形式)と.h5(10X Genomics Cell Rangerの出力)です。QCの方針は、scverseのベストプラクティスに沿ったMADベースの外れ値除去です。
MADは中央値絶対偏差(median absolute deviation)のことです。「中央値から何MAD離れた細胞を外れ値とするか」で足切りの位置を決めるので、固定の閾値より、データセットごとの分布に合わせやすくなります。ガイドは、固定値の足切りがプロトコル・組織・種ごとの違いに対応できない点を、MADを使う理由に挙げています。
skillには2つの使い方があります。
| 使い方 | 中身 | 向く場面 |
|---|---|---|
| Approach 1 | 中身scripts/qc_analysis.pyを1回実行する | 向く場面標準のQC、複数データの一括処理 |
| Approach 2 | 中身qc_core.pyとqc_plotting.pyの関数を組み合わせる | 向く場面部分実行、細胞種ごとに閾値を変える、他の解析と連結 |
SKILL.mdは、特別な要件がなければApproach 1を使うよう書いています。
bio-researchプラグインの入れ方
bio-researchはknowledge-work-pluginsマーケットプレイスに登録されています。READMEには/install anthropics/knowledge-work-plugins bio-researchとありますが、Claude Codeの標準コマンドでは次の2行になります。
/plugin marketplace add anthropics/knowledge-work-plugins
/plugin install bio-research@knowledge-work-pluginsセッション内の/plugin installは、その場では入れずに詳細パネルを開きます。パネルでスコープを選んでから導入します。反映されないときは/reload-pluginsで読み込み直せます。同じマーケットプレイスから入れる別プラグインの例は、small-businessプラグインの記事にあります。マーケットプレイス自体の仕組みはプラグインとマーケットプレイスの解説が扱っています。
入れる前に、プラグインの中身を知っておくと安心です。READMEは「11のMCPサーバー連携と5つの分析skillを1つにまとめた」と説明しています。.mcp.jsonにはPubMed・bioRxiv・ChEMBL・OpenTargets・Consensus・Wiley・BioRender・Synapse・Owkin・ClinicalTrials・Benchlingの11エントリが並びます。Benchlingのurlは空欄です。QCだけが目的でも、これらの接続定義が一緒に入る点は、詳細パネルで確認できます。
分析skillの5つは、single-cell-rna-qc、scvi-tools、Nextflowパイプライン、Instrument Data to Allotrope、Scientific Problem Selectionです。READMEの「Single-Cell Analysis」の流れは、QCの後にscvi-toolsで統合・バッチ補正・細胞型アノテーションへ進む順になっています。
実行の流れ: 5ステップのスクリプトが何をするか
Claudeにデータのパスを渡して「QCして」と頼むと、skillの説明文に当たる依頼としてsingle-cell-rna-qcが選ばれます。説明文には、QC解析、低品質細胞の除去、データ品質の評価、scverse/scanpyのベストプラクティスに従う依頼、と書かれています。名前を明示するなら/bio-research:single-cell-rna-qcの形でも呼べます。
sample1_filtered_feature_bc_matrix.h5 をQCして。ヒトのデータで、
結果は qc_out/ に出してSKILL.mdが示す実行コマンドは次の形です。--output-dirは書き出し先を決めるオプションです。
python3 scripts/qc_analysis.py sample1_filtered_feature_bc_matrix.h5 \
--output-dir qc_out動かすにはanndata・scanpy・scipy・matplotlib・seaborn・numpyが要ります。SKILL.mdはこの6つを「Requirements」に挙げています。導入していない環境では、先にこれらを入れる必要があります。
qc_analysis.pyが進める5段階
- 1
読み込み
拡張子で分岐します。
.h5adはread_h5ad、.h5はscanpyのread_10x_h5で読みます。.h5のときだけ、遺伝子名の重複をvar_names_make_uniqueで解消します。 - 2
QC指標の計算
ミトコンドリア(MT)・リボソーム・ヘモグロビンの遺伝子群を前方一致や正規表現で見つけ、
total_counts・n_genes_by_counts・pct_counts_mtなどをobsに足します。 - 3
フィルタ前の図
3×3のパネル(ヒストグラム、バイオリン、散布図)を
qc_metrics_before_filtering.pngに保存します。 - 4
MADとMT%のフィルタ
総カウント数、検出遺伝子数、MT%の3指標を別々にMADで判定し、MT%には固定の上限も重ねます。いずれかに該当する細胞が
pass_qc=Falseになります。 - 5
細胞と遺伝子の除去
pass_qcが真の細胞だけを残し、続けて、検出された細胞数が少ない遺伝子を落とします。
出力は<入力名>_qc_results/(または--output-dir)にまとまります。
| ファイル | 内容 |
|---|---|
qc_metrics_before_filtering.png | 内容フィルタ前の分布 |
qc_filtering_thresholds.png | 内容閾値の線と、通過・不通過の色分け |
qc_metrics_after_filtering.png | 内容フィルタ後の分布 |
<入力名>_filtered.h5ad | 内容除去後のデータ。下流の解析に渡す |
<入力名>_with_qc.h5ad | 内容除去前の全細胞にQC注釈(pass_qcなど)を付けたもの |
_with_qc.h5adは元の細胞を残したままpass_qcの列を持つため、どの細胞がなぜ落ちたかを後から追えます。落とす前の状態に戻したいときもこちらを使います。
既定のしきい値を決めているもの
スクリプト冒頭の定数が既定値です。コマンドラインで上書きできます。
| 項目 | 既定値 | オプション |
|---|---|---|
| 総カウント数のMAD | 既定値5 | オプション--mad-counts |
| 検出遺伝子数のMAD | 既定値5 | オプション--mad-genes |
| MT%のMAD | 既定値3 | オプション--mad-mt |
| MT%の固定上限 | 既定値8(%) | オプション--mt-threshold |
| 遺伝子の最小検出細胞数 | 既定値20 | オプション--min-cells |
| MT遺伝子の接頭辞 | 既定値mt-,MT- | オプション--mt-pattern |
| リボソームの接頭辞 | 既定値Rpl,Rps,RPL,RPS | オプション--ribo-pattern |
ガイドは、この既定を「意図的に緩い」と説明します。希少な細胞集団を落とさないためで、後から厳しくするほうが、失った細胞を戻すより簡単だからです。SKILL.mdの「Best Practices」にも「Be permissive with filtering」とあります。
一方、MT%は他より厳しく扱われています。高いMT%は死にかけた細胞や破れた細胞を示すためで、MADを3に絞り、さらに固定の8%を重ねています。ここはpass_qcの判定で効く場所なので、次の節で調整を見ます。
データに合わせて調整する4つの場面
ガイドの「When to Adjust Parameters」を、コマンドに落とすと次のようになります。
# 神経細胞や心筋: MT%が自然に高いので固定上限を緩める
python3 scripts/qc_analysis.py brain.h5ad --mt-threshold 15
# 希少な細胞集団を調べる: 遺伝子フィルタを緩める
python3 scripts/qc_analysis.py sample.h5ad --min-cells 10
# 背景RNAが多い疑い: MADを狭くして厳しくする
python3 scripts/qc_analysis.py sample.h5ad --mad-counts 4 --mad-genes 4 --mad-mt 2.5
# マウスのデータ: 接頭辞は既定で両対応だが、明示もできる
python3 scripts/qc_analysis.py mouse.h5ad --mt-pattern "mt-" --ribo-pattern "Rpl,Rps"組織ごとの目安として、ガイドは脳・神経は10〜15%、血液は5〜8%のMT%を挙げています。腫瘍サンプルは生物学的なばらつきが大きく、緩めの閾値が要る場合が多いという記述です。
種の違いはMT遺伝子の接頭辞に出ます。マウスはmt-、ヒトはMT-で、既定のmt-,MT-は両方を拾います。それ以外の生物種では、接頭辞を自分で指定します。ガイドも、EnsemblなどのアノテーションでMT遺伝子の接頭辞を確かめるよう案内しています。
細胞種ごとに閾値を変えたいときはApproach 2を使います。SKILL.mdの例3は、神経細胞のMT%上限を15、それ以外を8にする書き方です。ただし例の末尾は、2つのapply_hard_thresholdでマスクを作るところまでです。2つのマスクを元のデータの細胞順に合わせて結合し、filter_cellsに渡す処理は、自分で足す必要があります。
ガイドとコードの食い違い: 対数変換の有無
ここで、references/scverse_qc_guidelines.mdとscripts/qc_core.pyを見比べると、1点だけ書き方が違います。
ガイドは、総カウント数と遺伝子数について「5 MADs(対数変換した値で)」と書いています。理由は、右に裾の長い分布を正規に近づけるためです。MT%は対数変換しない生のパーセントを使うと書かれています。
一方、detect_outliers_madの実装は、obsの列の値をそのままnp.medianとmedian_abs_deviationに渡します。log1pなどの変換処理は関数の中にありません。calculate_qc_metricsにあるlog1p=Falseは、scanpyが対数をとった列(log1p_total_countsなど)を別に作らないという指定です。MADもscaleを指定せず呼ばれるので、正規分布の標準偏差に換算する係数(1.4826)は掛かりません。
この差が効くのは、総カウント数のような右に歪んだ分布です。生の値で「中央値 ± 5 × MAD」を計算すると、分布の形によっては下限が0を下回り、少ない側の外れ値(空の液滴に近い細胞)がpass_qcの判定で拾われにくくなる可能性があります。実際にどう効くかは、データの分布しだいです。
確かめる手順は単純です。qc_filtering_thresholds.pngの下限の線が、ヒストグラムのどこに引かれているかを見ます。線が分布の左端より外にあるなら、その指標の低い側は実質的に素通りです。気になるときは、Approach 2で対数変換した列を作り、その列をdetect_outliers_madに渡す形に組み替えられます。
落とし穴
MT%の固定上限は、MADより先に効くことがある
MT%の外れ値は「MADによる判定」と「固定8%超」の和集合です。MT%が全体に高い組織では、固定の8%が先に大量の細胞を落とします。実行ログの「Total cells failing QC」の割合が大きいときは、まず--mt-thresholdを疑ってください。
このskillに含まれない処理と、入力の前提
ガイドは、このワークフローに入れていないものとして、背景RNAの補正(SoupX、CellBender、DecontX)、ダブレット検出(scDblFinder、scrublet、DoubletFinder)、細胞周期スコア、バッチ補正を挙げています。ダブレット検出は、液滴方式のデータでは常に推奨と書かれています。SKILL.mdの「Next Steps After QC」の順は、背景RNA補正、ダブレット検出、正規化、特徴量選択と次元削減、クラスタリングと細胞型アノテーションです。
つまり、このskillが出す_filtered.h5adは、下流解析の入口として使える状態ですが、QCの全工程が済んだ状態ではありません。
入力にも前提があります。
- 総カウント数や検出遺伝子数は
Xの値から計算されるので、.h5adを渡すならXに生カウントが入っている必要があります。SKILL.mdには、この条件を明記した記述がありません - SKILL.mdの
.h5の例はraw_feature_bc_matrix.h5です。Cell Rangerにはフィルタ済みの行列もあります。中央値とMADはファイル内の全バーコードで計算されるため、どちらを渡すかで基準が変わります - リボソームとヘモグロビンは指標として計算されますが、
pass_qcの判定には使われません
使い分け: QCをClaudeに任せる場面と手元で回す場面
| 状況 | 向き方 |
|---|---|
| 初見のデータの分布を素早く見たい | 向き方向いている。3枚の図と_with_qc.h5adが一度に出る |
| 複数サンプルを同じ条件で処理したい | 向き方向いている。同じコマンドを、サンプルごとに繰り返せる |
| 細胞種や組織ごとに基準を変えたい | 向き方条件次第。Approach 2のコードを足す必要がある |
| 論文の方法として基準を固定したい | 向き方条件次第。ガイドとコードの差(対数変換)を理解したうえで、値と式を記録する |
| 低カウント側の外れ値が重要な実験 | 向き方注意。対数変換の有無を、閾値の図で確かめる |
CSVやParquetを、DBを用意せずにその場で集計する別の手段は、DuckDBプラグインの記事が扱っています。研究者向けの環境全体の話は、Claude Scienceの文献レビュー実例にあります。
QCは、後続の統合やクラスタリングの前提になります。閾値を機械的に確定せず、図を見て「この組織で、この値が妥当か」を判断する工程を残しておく運用は、SKILL.mdの「Best Practices」が勧める進め方でもあります。