第9章: 集団ゲノミクス

9. 集団ゲノミクス

系統解析パイプライン(配列アライメント→モデル選択→系統推定→ブートストラップ評価→可視化)
図 9-1: 系統解析の基本フロー。配列整列と進化モデルの選択が精度に大きく影響する。結果の信頼性はブートストラップ等で検証する。
GWASワークフロー QC/フィルタ 連鎖不平衡/PLINK 共変量調整/回帰 P値補正 解釈/可視化
図 9-2: GWASワークフロー。QC→連鎖不平衡調整→共変量調整回帰→P値補正→解釈・可視化の流れ。

学習目標

  • 本章の主要概念を説明できる(用語/前提条件含む)
  • 現実データ/ユースケースでの適用手順を述べられる
  • ベストプラクティスや落とし穴を理由とともに指摘できる

9.1 ゲノムワイド関連解析(GWAS)

GWAS実装:

import numpy as np
import pandas as pd
import statsmodels.api as sm
from scipy import stats

class GWASAnalyzer:
    """GWAS解析パイプライン"""
    
    def __init__(self, genotype_matrix, phenotype, covariates=None):
        self.genotypes = genotype_matrix
        self.phenotype = phenotype
        self.covariates = covariates
        
    def run_gwas(self):
        """
        線形回帰によるGWAS
        """
        results = []
        
        for snp_idx in range(self.genotypes.shape[1]):
            snp_data = self.genotypes[:, snp_idx]
            
            # 線形モデルの構築
            X = snp_data
            if self.covariates is not None:
                X = np.column_stack([X, self.covariates])
            X = sm.add_constant(X)
            
            # 回帰分析
            model = sm.OLS(self.phenotype, X)
            result = model.fit()
            
            # P値とベータ値の抽出
            p_value = result.pvalues[1]  # SNPの効果
            beta = result.params[1]
            
            results.append({
                'snp_idx': snp_idx,
                'p_value': p_value,
                'beta': beta
            })
            
        return pd.DataFrame(results)
    
    def manhattan_plot(self, results):
        """マンハッタンプロットの作成"""
        import matplotlib.pyplot as plt
        
        # -log10(p-value)の計算
        results['neglog10p'] = -np.log10(results['p_value'])
        
        plt.figure(figsize=(12, 6))
        plt.scatter(results.index, results['neglog10p'], alpha=0.5)
        plt.axhline(y=-np.log10(5e-8), color='r', linestyle='--')
        plt.xlabel('SNP Position')
        plt.ylabel('-log10(P-value)')
        plt.title('Manhattan Plot')
        plt.show()

9.2 集団構造解析

PCAによる集団構造:

class PopulationStructure:
    """集団構造解析"""
    
    def __init__(self, genotype_matrix):
        self.genotypes = genotype_matrix
        
    def perform_pca(self, n_components=10):
        """
        遺伝的主成分分析
        """
        from sklearn.decomposition import PCA
        
        # アレル頻度の標準化
        standardized = self.standardize_genotypes()
        
        # PCA実行
        pca = PCA(n_components=n_components)
        pc_coords = pca.fit_transform(standardized)
        
        return pc_coords, pca.explained_variance_ratio_
    
    def standardize_genotypes(self):
        """Patterson et al. 2006の標準化"""
        p = np.mean(self.genotypes, axis=0) / 2
        
        std_geno = (self.genotypes - 2*p) / np.sqrt(2*p*(1-p))
        return std_geno

9.3 選択圧の検出

自然選択の検出手法:

class SelectionDetection:
    """自然選択シグナルの検出"""
    
    def calculate_fst(self, pop1_geno, pop2_geno):
        """
        集団間の遺伝的分化(FST)
        """
        # アレル頻度の計算
        p1 = np.mean(pop1_geno, axis=0) / 2
        p2 = np.mean(pop2_geno, axis=0) / 2
        
        # 全体のアレル頻度
        p_total = (p1 + p2) / 2
        
        # FSTの計算(Weir & Cockerham)
        num = (p1 - p2)**2
        denom = p_total * (1 - p_total)
        
        fst = num / (denom + 1e-10)
        return fst
    
    def integrated_haplotype_score(self, haplotypes, position):
        """
        iHS (integrated Haplotype Score)の計算
        """
        # Extended Haplotype Homozygosityの計算
        # 実装省略(計算集約的)
        pass

前へ: シングルセル・空間解析 目次 次へ: データベース技術

演習

  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の一部サブセット。