S
single-cell-clustering-and-batch-correction-with-omicverse
single-cell-clustering-and-batch-correction-with-omicverse について
単一細胞研究者向けの omicverse スキルです。AnnData の前処理、複数のクラスタリング手法の比較、バッチ補正と評価を扱い、手順の前提条件と結果の検証を重視します。
主な機能
- 01AnnData の品質管理と前処理
- 02Leiden、Louvain、scICE、GMM によるクラスタリング
- 03トピックモデルと cNMF 分析
- 04omicverse の手法によるバッチ補正
- 05クラスタリングと統合の評価
活用シーン
- 01クラスタリング結果を参照アノテーションと比較
- 02バッチ補正後の混合状態を確認
- 03生物学的シグナルを考慮して埋め込みを評価
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ omicverse/ omicverse --skill single-cell-clustering-and-batch-correction-with-omicverseインストール後、Claude Code で/single-cell-clustering-and-batch-correction-with-omicverseを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
omicverse を使用した単一細胞クラスタリングとバッチ補正
概要
このスキルでは、単一細胞チュートリアルの t_cluster.ipynb と t_single_batch.ipynb の内容をまとめています。ユーザーが AnnData オブジェクトを前処理し、クラスタリング手法(Leiden、Louvain、scICE、GMM、トピックモデル/cNMF モデル)を比較検討して、omicverse のユーティリティでバッチを評価または調和させたい場合に使用します。
手順
- ライブラリをインポートし、プロットのデフォルト設定を適用する
omicverse as ov、scanpy as sc、プロット用ヘルパー(歯状回のデモデータを使用する場合はscvelo as scv)を読み込みます。- 埋め込みプロットを作成する前に、
ov.plot_set()またはov.utils.ov_plot_set()を適用して、図のスタイルを omicverse に合わせます。
- データを読み込み、バッチにアノテーションを付ける
- クラスタリングのデモでは
scv.datasets.dentategyrus()を取得します。統合の場合は、提供された.h5adファイルをov.read()で読み込み、各コホートのadata.obs['batch']に識別子を設定します。 - 入力がスパースな数値行列であることを確認します。QC の手順で必要な場合は、
adata.X = adata.X.astype(np.int64)で変換します。
- クラスタリングのデモでは
- 品質管理を実行する
ov.pp.qc(adata, tresh={'mito_perc': 0.2, 'nUMIs': 500, 'detected_genes': 250}, batch_key='batch')を実行して低品質の細胞を除外し、バッチごとの要約統計を確認します。- 中間のフィルタリング済みオブジェクト(
adata.write_h5ad(...))を保存し、クリーンなチェックポイントから再開できるようにします。
- 前処理を行い、特徴量を選択する
ov.pp.preprocess(adata, mode='shiftlog|pearson', n_HVGs=3000, batch_key=None)を呼び出して正規化と対数変換を行い、高変動遺伝子にフラグを付けます。adata.raw = adataを設定し、以降のモデリング用にadata.var.highly_variable_featuresでサブセット化します。- 発現量をスケーリングし(
ov.pp.scale(adata))、ov.pp.pca(adata, layer='scaled', n_pcs=50)で PCA スコアを計算します。ov.utils.plot_pca_variance_ratio(adata)を使って、説明分散を確認することを推奨します。
- 近傍グラフを構築し、ベースラインのクラスタリングを行う
sc.pp.neighbors(adata, n_neighbors=15, n_pcs=50, use_rep='scaled|original|X_pca')またはov.pp.neighbors(...)を使って近傍グラフを構築します。ov.utils.cluster(adata, method='leiden'|'louvain', resolution=1)、ov.single.leiden(adata, resolution=1.0)、またはov.pp.leiden(adata, resolution=1)を使って Leiden または Louvain のラベルを生成します。解像度によってクラスタの粒度が調整されることをユーザーに伝えます。- 重要 - 依存関係の確認:クラスタリングやプロットの前に、必ず前提条件を確認します。
# クラスタリングの前に、近傍グラフが存在することを確認 if 'neighbors' not in adata.uns: if 'X_pca' in adata.obsm: ov.pp.neighbors(adata, n_neighbors=15, use_rep='X_pca') else: raise ValueError("PCA must be computed before neighbors graph") # クラスター別にプロットする前に、クラスタリングが実行済みか確認します if 'leiden' not in adata.obs: ov.single.leiden(adata, resolution=1.0) ov.pl.embedding(adata, basis='X_umap', color=['clusters','leiden'], frameon='small', wspace=0.5)で埋め込みを可視化し、クラスターが分離していることを確認します。プロットする前に、color=パラメーターに指定する列がadata.obsに存在することを必ず確認してください。
- 高度なクラスタリング戦略を検討する
- scICE コンセンサス:
model = ov.utils.cluster(adata, method='scICE', use_rep='scaled|original|X_pca', resolution_range=(4,20), n_boot=50, n_steps=11)をインスタンス化し、model.plot_ic(figsize=(6,4))で安定性を確認してから、model.best_k個のグループを選択します。 - ガウス混合モデル:モデルベースの割り当てには、
ov.utils.cluster(..., method='GMM', n_components=21, covariance_type='full', tol=1e-9, max_iter=1000)を実行します。 - トピックモデリング:
LDA_obj = ov.utils.LDA_topic(...)を学習し、LDA_obj.plot_topic_contributions(6)を確認します。LDA_obj.predicted(k)でクラスターを推定し、必要に応じてLDA_obj.get_results_rfc(...)で改善します。 - cNMF プログラム:
cnmf_obj = ov.single.cNMF(... components=np.arange(5,11), n_iter=20, num_highvar_genes=2000, output_dir=...)を初期化して、因子分解(factorize、combine)を行います。k_selection_plotで K を選択し、cnmf_obj.get_results(...)とcnmf_obj.get_results_rfc(...)で使用スコアを反映します。
- scICE コンセンサス:
- クラスタリング品質を評価する
adjusted_rand_score(adata.obs['clusters'], adata.obs['leiden'])で既知の参照データと予測ラベルを比較し、選択したパラメーターの妥当性を示すために、各手法(Leiden、Louvain、GMM、LDA の各種モデル、cNMF モデル)の指標を報告します。
- 複数のレイアウトで埋め込む
ov.utils.mde(...)を使って、さまざまな潜在空間(adata.obsm["scaled|original|X_pca"]、調和化した埋め込み、トピック構成)から MDE 投影を作成し、ov.pl.embedding(..., color=['batch','cell_type'])またはov.pl.embeddingでプロットして、クラスターとバッチの混合を一貫して確認します。
- バッチ補正と統合を実行する
ov.single.batch_correction(adata, batch_key='batch', methods='harmony'|'combat'|'scanorama'|'scVI'|'CellANOVA', n_pcs=50, ...)を順に適用し、調和化した埋め込みをadata.obsm(X_harmony、X_combat、X_scanorama、X_scVI、X_cellanova)に保存します。scVIでは潜在サイズ(n_latent=30)とgene_likelihood="nb"を指定します。CellANOVA ではcontrol_dictを使って対照プールを定義します。- 補正のたびに、
ov.utils.mdeで 2D に投影し、batchとcell_typeを可視化して、混合と保持状態を確認します。
- 統合のパフォーマンスをベンチマークする
- 最終オブジェクトを保存し(
adata.write_h5ad('neurips2021_batch_all.h5ad', compression='gzip'))、必要に応じて再読み込みします。 scib_metrics.benchmark.Benchmarkerに埋め込みのリスト(["X_pca", "X_combat", "X_harmony", "X_cellanova", "X_scanorama", "X_mira_topic", "X_mira_feature", "X_scVI"])を指定し、bm.benchmark()でバッチと生物学的要素のトレードオフを計算して、bm.plot_results_table(min_max_scale=False)で要約します。
- 最終オブジェクトを保存し(
- 一般的なトラブルシューティング
- HVG にサブセット化する前に、
adata.rawにスケーリング前のログ正規化済み行列が格納されていることを確認します。 - クラスタリング前に、
use_rep='scaled|original|X_pca'で指定する文字列がadata.obsmに存在することを確認します。存在しない場合は、前処理を再実行してください。 - cNMF や scVI の実行時はメモリ使用量を監視し、小規模なデータセットでは
n_iter、components、または潜在次元数を調整します。 - パイプラインの依存関係に関するエラー:「Could not find 'leiden' in adata.obs」のようなエラーが発生した場合は、必ず前提条件を確認し、満たしてください。
- leiden/louvain クラスタリングの前 →
'neighbors' in adata.unsを確認します - クラスタリング結果でプロットする前 → クラスター列が
adata.obsに存在することを確認します - UMAP/埋め込みの前 → PCA または別の次元削減が完了していることを確認します
- leiden/louvain クラスタリングの前 →
- コード生成のパターン:複数ステップのコードを生成するときは、前のステップが正常に完了したと決めつけず、防御的なチェックを行います。これにより、ユーザーが手順を順不同で実行したり、別々のセッションで実行したりした場合の連鎖的な失敗を防げます。
- HVG にサブセット化する前に、
例
- 「歯状回の細胞を正規化し、Leiden、scICE、GMM のクラスターを比較して、提供された
clustersに対する ARI スコアを報告してください。」 - 「3 つの NeurIPS データセットを Harmony と scVI でバッチ補正し、
batchとcell_typeで色分けした MDE 埋め込みを作成して、埋め込みをベンチマークしてください。」 - 「前処理済みの AnnData オブジェクトでトピックモデルと cNMF モデルを学習し、分類器で洗練されたクラスター割り当てを取得して、得られたプログラムを UMAP 上に可視化してください。」
参考資料
- クラスタリングの手順:
t_cluster.ipynb - バッチ統合の手順:
t_single_batch.ipynb - コピーしてすぐ使えるコマンド:
reference.md
コメント
Markdown 対応