第8章: シングルセル・空間解析

8. シングルセル・空間解析

学習目標

  • 本章の主要概念を説明できる(用語/前提条件含む)
  • 現実データ/ユースケースでの適用手順を述べられる
  • ベストプラクティスや落とし穴を理由とともに指摘できる
  • QC閾値、クラスタリング、UMAP表示をデータセット依存の判断として扱い、固定値を機械的に流用しない

8.1 シングルセルRNA-seq解析

前処理とQC:

single-cell RNA-seq の QC は、組織、サンプル調製、プラットフォーム、細胞型構成、核 RNA か全細胞 RNA かによって妥当な範囲が変わります。以下は処理の流れを示す概念例であり、max_mito_fractionmax_genes のような除外閾値は、QC 分布図、空滴・ダブレット推定、実験メタデータ、既知マーカーを確認してからデータセットごとに決めます。

QC 判定は、少なくとも次の順序で確認します。まず n_genes、総カウント、ミトコンドリア比率、ダブレット候補の分布を可視化します。次に、サンプルごとの実験メタデータと既知マーカーを照合し、最後に閾値を変えたときに主要クラスタや細胞型注釈が不自然に崩れないかを確認します。

2026年時点の運用メモ(確認日: 2026-05-13 JST):

  • Scanpy / Seurat v5 は single-cell 解析の代表的な実装だが、同じ処理名でも既定値、データ構造、拡張パッケージ、version により結果が変わる。レポートでは AnnDataMuDataSeurat objectSpatialData などのデータ構造とライブラリ version を記録する。
  • Visium HD / HD 3’ のような single-cell-scale spatial assay は 2 µm x 2 µm のバーコード領域や画像位置合わせを扱うため、bin、spot、segmentation、cell label を混同しない。
  • QC 閾値は「本書推奨の固定値」ではなく、QC metric の分布、サンプル品質、核 RNA / 全細胞 RNA、組織、希少細胞の保持方針を明示して決める。確認済み出典は Source notes の監査メモに集約する。

🧪 概念例

import scanpy as sc
import pandas as pd
import numpy as np

class SingleCellProcessor:
    """single-cell RNA-seq(scRNA-seq)前処理パイプライン"""
    
    def __init__(self, min_genes=200, min_cells=3,
                 max_mito_fraction=None, max_genes=None):
        self.min_genes = min_genes
        self.min_cells = min_cells
        self.max_mito_fraction = max_mito_fraction
        self.max_genes = max_genes
        
    def quality_control(self, adata):
        """
        品質管理とフィルタリング
        
        Args:
            adata: AnnData object
        """
        # sparse / dense の違いを吸収するため、Scanpy のQC指標計算を使う
        adata.var['mt'] = adata.var_names.str.startswith('MT-')
        sc.pp.calculate_qc_metrics(
            adata, qc_vars=['mt'], percent_top=None, log1p=False, inplace=True
        )
        adata.obs['percent_mito'] = adata.obs['pct_counts_mt'] / 100
        adata.obs['n_genes'] = adata.obs['n_genes_by_counts']
        
        # フィルタリング
        sc.pp.filter_cells(adata, min_genes=self.min_genes)
        sc.pp.filter_genes(adata, min_cells=self.min_cells)
        
        # 外れ値除去の閾値は固定値ではなく、データセットごとに決める。
        if self.max_mito_fraction is not None:
            adata = adata[
                adata.obs['percent_mito'] < self.max_mito_fraction
            ].copy()
        if self.max_genes is not None:
            adata = adata[adata.obs['n_genes'] < self.max_genes].copy()
        
        return adata

正規化と変動遺伝子選択: 🧪 概念例

def normalize_and_select_features(adata):
    """
    データ正規化と高変動遺伝子の選択
    """
    # Library size normalization
    sc.pp.normalize_total(adata, target_sum=1e4)
    
    # Log transformation
    sc.pp.log1p(adata)
    
    # Highly variable genes selection
    sc.pp.highly_variable_genes(
        adata, min_mean=0.0125, max_mean=3, min_disp=0.5
    )
    
    # Keep only HVGs
    adata = adata[:, adata.var.highly_variable]
    
    return adata

8.2 次元削減とクラスタリング

次元削減手法: 🧪 概念例

class DimensionReduction:
    """次元削減手法の実装"""
    
    def perform_pca(self, adata, n_comps=50):
        """主成分分析"""
        sc.pp.scale(adata, max_value=10)
        sc.tl.pca(adata, n_comps=n_comps)
        return adata
    
    def perform_umap(self, adata, n_neighbors=30):
        """UMAP埋め込み"""
        sc.pp.neighbors(adata, n_neighbors=n_neighbors)
        sc.tl.umap(adata)
        return adata

UMAP や t-SNE は高次元構造を二次元に圧縮した可視化です。図上の距離、クラスタ間の空白、枝分かれは、近傍数、前処理、バッチ補正、乱数の影響を受けます。クラスタの生物学的意味は、マーカー遺伝子、メタデータ、独立データ、実験知識で検証してから解釈します。

クラスタリング: 🧪 概念例

def cluster_cells(adata, resolution=0.5):
    """
    Leidenクラスタリング(推奨)
    """
    sc.tl.leiden(adata, resolution=resolution)
    return adata

8.3 軌跡推定と擬時間解析

軌跡推定: 🧪 概念例

class TrajectoryInference:
    """細胞分化軌跡の推定"""
    
    def perform_diffusion_map(self, adata):
        """拡散マップによる軌跡推定"""
        sc.tl.diffmap(adata)
        return adata
    
    def pseudotime_ordering(self, adata, root_cell):
        """擬時間順序付け"""
        # DPT (Diffusion Pseudotime)
        adata.uns['iroot'] = root_cell
        sc.tl.dpt(adata)
        return adata

8.4 空間トランスクリプトミクス

空間データ解析: 🔁 疑似コード(Moran’s I の計算は Squidpy 等の空間自己相関関数で実装する)

class SpatialTranscriptomics:
    """空間発現解析"""
    
    def __init__(self, adata, spatial_coords):
        self.adata = adata
        self.spatial_coords = spatial_coords
        
    def identify_spatial_patterns(self, morans_i_cutoff):
        """空間的発現パターンの同定"""
        # Moran's I統計量による空間相関
        spatial_genes = []
        
        for gene in self.adata.var_names:
            morans_i = self.calculate_morans_i(
                self.adata[:, gene].X,
                self.spatial_coords
            )
            # 閾値は空間解像度、スポット数、組織構造、検定補正に応じて設定する。
            if morans_i > morans_i_cutoff:
                spatial_genes.append(gene)
                
        return spatial_genes

8.5 最新のsingle-cell / spatial手法と評価

統合・バッチ補正:

  • scVI/Harmony等でバッチ効果を抑えつつクラスタリングや可視化を行う。
  • 統合後もバッチ残存やラベル循環がないかを確認する。

Foundation Modelの活用:

  • scGPT等は注釈、バッチ補正、摂動予測などの補助に使われる。
  • ゼロショットの過信を避け、参照データや実験検証と併用する。

空間解析の実務的な流れ:

  • Squidpy等の専用ライブラリで空間近傍・共局在・空間クラスタリングを扱う。
  • 空間情報は解釈に影響が大きいため、画像品質や座標精度を前提条件として明記する。

評価の注意点:

  • データリーク(学習・評価の混在)を避ける。
  • バッチ効果・ラベル循環の影響を検証する。
  • 再現性のために前処理・パラメータ・バージョンを固定する。

🎯 認定試験ポイント

重要概念チェックリスト

single-cell RNA-seq基礎 ⭐⭐⭐

  • scRNA-seqとbulk RNA-seqの技術的違いと特徴を理解している
  • ドロップアウト(零過多データ)の原因と対処法を把握している
  • 品質管理指標(遺伝子数・ミトコンドリア比率等)を説明できる
  • 細胞周期・アポトーシスの影響と除去方法を理解している

次元削減・クラスタリング ⭐⭐⭐

  • PCA・t-SNE・UMAPの特徴とscRNA-seqでの使い分けを理解している
  • クラスタリング手法(k-means・Louvain・Leiden)の原理と適用
  • クラスター数の決定方法と解像度パラメータの調整
  • バッチ効果の検出と補正(統合)手法を把握している

細胞型同定・機能解析 ⭐⭐

  • マーカー遺伝子の同定手法と統計的有意性検定
  • 細胞型アノテーションの手順と参照データベースの活用
  • GO enrichment解析とパスウェイ解析の細胞型特異的適用
  • 細胞間相互作用の推定手法とネットワーク解析

軌跡推定・擬時間解析 ⭐⭐

  • 擬時間(pseudotime)の概念と生物学的意義を理解している
  • 軌跡推定手法(Monocle・Slingshot・PAGA)の原理と特徴
  • 分岐点の同定と細胞運命決定メカニズムの推定
  • RNA velocity解析の原理とスプライシング情報の活用

典型的な出題パターン

【技術的課題】 🧪 概念例

問題例: scRNA-seqデータで多くの遺伝子の発現値が0となる
「ドロップアウト」現象の主な原因を3つ挙げ、
それぞれの対処法を述べよ。

解答:
1) 技術的限界: mRNA捕捉効率の低さ → 深いシークエンシング
2) 生物学的原因: 細胞型特異的低発現 → 細胞型参照データ活用
3) サンプル品質: 細胞ダメージ・RNA分解 → 品質フィルタリング

【解析手順】 🧪 概念例

問題例: scRNA-seqデータから稀少細胞集団を同定したい場合、
適切な解析パラメータ設定を述べよ。

解答:
1) 細胞フィルタリング: 低品質細胞を除外しつつ稀少細胞を保持
2) 正規化: 稀少細胞の発現パターンを保持する手法選択
3) クラスタリング: 高解像度設定で細かいクラスターを検出(低解像度は粗いクラスター)
4) 統計的検定: 稀少性を考慮した有意性閾値の調整

【空間解析】 🧪 概念例

問題例: 空間トランスクリプトーム解析で得られる情報と
従来のscRNA-seqで得られる情報の違いを説明せよ。

解答:
空間トランスクリプトーム:
- 組織内空間座標情報を保持
- 組織アーキテクチャや細胞間相互作用の空間的パターンを解析
- 病理的変化の空間分布を直接観察

従来scRNA-seq:
- 全組織レベルでの細胞タイプの同定・構成比推定が可能
- 空間情報は失われる
- 細胞間相互作用は推定によらざるを得ない

関連する付録・章

最小入出力(期待成果物/期待ログ)

  • 入力: カウント行列(genes×cells)またはFASTQ(10x等)、サンプル/バッチ情報
  • 出力(期待成果物): QC後データ(フィルタ済み)、埋め込み(UMAP等)とクラスタ、マーカー遺伝子リスト(最小限)
  • 期待ログ(例): QC前後の細胞数/遺伝子数、フィルタ条件、正規化・次元削減の主要パラメータが残る

Source notes / 次の一歩


前へ: 機械学習・AI応用 目次 次へ: 集団ゲノミクス

演習

  1. 本章の手順をサンプルデータで再現し、各ステップのログと主要指標を記録して提出せよ。
  2. 代替ツール/パラメータで同等の分析を実施し、結果差分と選定理由を考察せよ。

具体課題例

  • 公開データを用いた再現(SRA/GEO/ArrayExpressから実在アクセッションを選定し)、前処理→主解析→結果要約まで実施。
  • 代替ツールの比較 (例: ツールA vs ツールB)。処理時間/メモリ/精度など評価指標を定義し、比較表を作成。
  • 成果物一式(レポート、使用コマンド/パラメータ、ツール/ライブラリのバージョン、入力/出力、実行ログ、MultiQC等のレポート、図表)を添付。

データセット選定ガイダンス(参考)

  • 小規模(総容量≲1GB、サンプル数≲数点)を優先し、短時間で再現可能なものを選ぶ。
  • レビュアブル(権利許諾・再配布条件)を確認。個人情報・機微情報は扱わない。
  • 例: (RNA-seq)GEOで「RNA-seq AND muscle」等のクエリで小規模を選定/(single-cell)10x GenomicsのPBMC 3k 公開データ/(集団ゲノミクス)1000 Genomesの一部サブセット。