アメリエフの技術ブログ

Amelieff Staff Blog

Seuratのmerge関数とIntegrateData関数の違い

データ受託解析チームのkuboです。
データ解析受託担当ですが、トレーニングや、データ解析のお困りごとの相談にお答えするコンサルにも顔を出すことがあります。

scRNA-seq解析の定番であるSeuratを使ったデータ解析のトレーニングやコンサルでは、主にscRNA-seq解析においてよく使用されるRパッケージSeuratの使用方法をご紹介しています。
Seuratを使用した複数のデータセットを統合する手順について
IntegrateDataによる統合とmergeによる統合の違いは何か」
というご質問を何度かいただいたことがあるので、簡単に説明します。

IntegrateDataによる統合

参考:Introduction to scRNA-seq integration • Seurat
IntegrateData関数を使ってSeuratオブジェクトを統合する場合は、以下の流れでデータセットを統合します。

  • FindIntegrationAnchors関数でanchorを決める
  • anchorを用いてIntegrateData関数でデータセットを統合する

この方法で統合する際は、データ間のバッチエフェクト補正が行われ、統合したデータ内でそのまま、サンプル同士をクラスタリングしたり比較したりすることができます。
ちなみに、3つ以上のデータを統合する場合も同じフローで、すべてのデータ同士のペアについて同じ計算を行います。2サンプルの統合だと1組み合わせについて計算を行うだけですが、5サンプルだと10組み合わせ、10サンプルだと45組み合わせと、計算量が爆発的に増えていきます。そのため、Seuratは多サンプルの統合については、別の方法(Fast integration using reciprocal PCA (RPCA) • Seurat)を提示しています。

merge関数による統合

参考:https://satijalab.org/seurat/articles/merge_vignette.html
merge関数は、Seuratオブジェクトのraw countマトリクス同士を結合し、新しいSeuratオブジェクトを作成します。

pbmc.combined <- merge(pbmc4k, y = pbmc8k, add.cell.ids = c("4K", "8K"), project = "PBMC12K")

このコマンド例ではSeuratオブジェクトpbmc4kpbmc8kからraw countを取り出し、新しいSeuratオブジェクトpbmc.combinedを作成しています。pbmc.combinedの中では、統合前のそれぞれのデータは、add.cell.idsで指定した4K 8Kというidentifierで区別して扱うことができます。
raw countマトリクス同士を結合するので、当然もとのSeuratオブジェクトpbmc4kpbmc8kを事前に正規化やスケーリングをしていても、その結果は削除された状態で結合されます。
IntegrateData関数とは全く異なりますね。
merge.data = TRUEオプションを追加することで、事前に計算した正規化結果を一緒に結合することもできるそうです。

pbmc.normalized <- merge(pbmc4k, y = pbmc8k, add.cell.ids = c("4K", "8K"), project = "PBMC12K",
    merge.data = TRUE)

IntegrateDataが行っているバッチエフェクト補正等は一切行っていないので、このやりかたでSeuratオブジェクトを結合した後はバッチエフェクト補正等は別途行う必要があります。



アメリエフでは、バイオデータ解析やそのシステム・インフラ環境の開発に興味のあるエンジニア・リーダー候補を募集しています。

www.wantedly.com