2014年12月29日月曜日

はじめに

R Advent Calendar 2014の30日目の記事です。

Japan.R 2014の言語ディスカッションRがどれくらいのサイズの情報を処理することが可能かということが話題になっていたように記憶しています。「処理」というのがどういうことをさすのかが微妙ではありますが、私はCRLMMというパッケージを使い、主記憶16GiBのLinuxマシン上で、約100GBくらいのデータ処理を行ったことがあります。第41回 データマイニング+WEB @東京でも簡単に言及する機会を頂きましたが、それについてもう少し詳しく記させていただきたいと思います。

コピー数変異(Copy Number Variation; CNV)

CNVについてはWikipediaの解説にお任せしますが、近年とくにがんなどの疾患とCNVとの相関が数多く報告されています。こうした背景からCNVの情報整備は非常に重要であり、さまざまなデータベースが構築・公開されています。その中のひとつにCancer Cell Line Encyclopedia(CCLE)というのがありますが、ここでは943のがん関連細胞株における各遺伝子のCNVが収載されています。本サイトを利用するには(2012年当時)ライセンスが必要であり、今後新たなデータを追加することを想定するとCNVの算出方法の確立は必須となります。私は本課題の解決にBioconductorCRLMMパッケージを使ってみました。

CRLMMパッケージとffパッケージ

CRLMMパッケージを用いたCNVの算出は、Preprocessing & Genotyping Affymetrix Arrays for Copy Number AnalysisというVignetteに記されたスクリプトに従えば実施できます。先述のCCLEの生データ(Affymetrix snp6 array)がNCBI Gene Expression Omnibus (GEO) のGSE36139として公開されているので、これを利用しました。また、CRLMMパッケージは内部でCRANのffパッケージを使用しています。ffパッケージについては和田さんの解説が参考になると思いますが、本パッケージの問題点はオブジェクトに対するアクセス方法が異なるので、従来のパッケージはそのまま使えないことなのですが、CRLMMはffパッケージが管理するオブジェクトに対応してくれているので大規模なデータでもそのまま処理することができます。

CRLMMパッケージによるCNV算出過程とその後の処理

16GiBのLinuxマシン以外に48GiBのLinuxマシンでも処理してみたのですが、基本的にはシングルコアでしか処理していないので、処理結果は変わりませんでしたが、2.8GHz(だったかな?)とXeonで約半日処理に要しました。処理をmuninでトレースしていますと、図としてお見せできず恐縮ですが、半端ないスワップが発生していました。ですので本領域をSSDにすれば相当のパフォーマンス向上が図れたかもしれません。また、結果はプローブ単位のCNV値で得られるのですが、一つの遺伝子あたり平均して100のプローブがデザインされていましたので、単純計算しても

1000サンプル x 20000遺伝子 x 100プローブ = 20億

レコードとなり、これをデータベースにするのも少し骨が折れました。

おわりに

駄文をお読み頂きありがとうございました。何かのご参考になれば幸いです。