R研究集会メモ(2012.12.1 at 統数研大会議室 9:50〜17:00) *中澤が聴きながらとったメモに過ぎないので,内容は無保証です。 *間違いを見つけられた方はminato-nakazawa[atmark]umin.netにご一報いただけると幸いです。 東日本大震災ビッグデータワークショップをGoogleが開催した。 2012/9/12〜10/28 完了した。奥村先生はこれにRで解析するということで参加した。 Googleのサイトに発表した(制限時間5分)動画が載っている。 twitterが提供した1週間で30 GBのツイートとか,ゼンリンの2 GBデータなど,ビッグデータが提供されて 1.79億ツイートはRでそのまま読めなかった。 まず改行をスペースで置換 時刻順に自作radixソートコードでソート そこから,grepやRubyで抽出しRで可視化 2011年3月11日〜18日 ユニークユーザ369万人(日本の人口の2.9%,ただしbotも含む)がつぶやいた 最頻値1,中央値8,平均48.6 べき分布のようだ 上位はほとんどロボット。 PersonFinder_Miとか。 3/4はリツイートされない log-logプロットでも47078RTがトップ。「知り合いの福島の方が……」 スクリーン名の出現回数(≧100)はlog-logだと直線に乗る。トップは@NHK? 分ごとのツイート数分布3/15深夜(静岡で地震があったとき)に10万を超え,3/11直後より多かった ツイートの長さは短くなる 語の検索 SPEEDIは100程度 コスモ石油のデマなどは30000ツイート(情報通信白書にも掲載されているのと同じパタンだがデータはこっちが多い) イソジンデマも3000とか チェーンメールは震災ではそれほど増えず,連休時の方が増えた(毎年そう) RやRubyのコードも含めて奥村先生のサイトに詳しく載っている http://oku.edu.mie-u.ac.jp/~okumura/prj311/ ZENRINデータ RgoogleMapsというパッケージがあってGoogleMap上にデータをプロットできる 携帯のGPSデータ:どれくらいの人が逃げたか(原発からの距離ごとの人数減少,250mメッシュ)がわかる nlmeパッケージを使ったピークフィット 放射線測定に役立つという話 何百万円もするGamma Spectrometerで測定しているが,分析ソフトの面積を求めるアルゴリズムがダメ Cs-134のピークが2つあって,その間にCs-137のピークが重なっているので,普通のアルゴリズム(バックグラウンドを引く)ではうまくいかない 縦軸はcountそのものが正しい。/secではダメ。ポアソン分布だから。 3つの分布と連続スペクトルの和としてパラメータをノンリニアに動かしてフィットするとうまく出る パラメータが線形ならglm()のポアソン回帰でOKだが,この場合はパラメータが非線形 nlmeパッケージのgnls()関数でフィットさせるが使い方が非常に難しい。 簡単なインターフェース求む 福島市のモニタリングポスト9月から11月まで増加傾向? 何か出ている? 気温と同期しているかどうか分析。気温の影響を説明変数として追加した重回帰がよくフィットした 気温の影響を除くと増えていないことがわかった。 残差の日周変動は不思議なパタン 「未公表データがあった」NHKニュース 画像pdfとして経産省にあったが,誰も気づかなかった。 このようにして見過ごされているデータが,そのうち省庁統廃合など(委託業者が変わるだけでも変わる)で消えてしまうことを恐れている →消えないようにデータを機械可読化しDB化:これはデータ解析コミュニティが協力できる? 2.牧山さん plotKMLとGoogleEarth→GoogleEarth上にいろいろなデータを重ねて表示させることが簡単にできる plotKML tutorialからいくつか引用している plotKMLは今年6月にCRANに登録された MacではSAGA GISが必要。しかしplotKMLを使うだけならフルインストールしなくても大丈夫。 plotKMLはSpace-Time Objectsのラッパー GIS分析自体はSAGAとかGLASS STには,2D, 3D, 2D+T, 3D+Tのクラスがある SpatialPointsは2Dで点 Rにはまだないクラスがある SAGA GISはラスタ処理を多くになっているので,rasterパッケージのKML()関数とplotKML関数のkml_View()関数を組み合わせるとよい。grid2poly()関数でラスタデータをポリゴンに変換可能 plotKMLは元々地質関係なので,地面の中の情報(地層の深さとか)を飛び出させて表示させることができる 時間軸も扱える スライダーを動かして経時的データを表示させたり消したりできる KMLは基準座標系情報はないはず。plotKMLはクラスデータに直接初期設定として基準座標系データを入れなくてはいけない SAGAをRから起動させて使うか,SAGAのライブラリを直接たたけるのか? GLASSだと起動させなくても使えるが。 Windows版ではSAGA-Command Exeを起動しているので,GUIは使わなくてもデータを取り出せるらしい 3.オミックス解析とR どれくらい研究でRが使われているか? 現在では,ゲノム解析ではRが使えないと話にならないところまで来ている miRNAによる翻訳の阻害が最近知られるようになってきた。 ゲノミクス トランスクリプトミクス プロテオミクス メタボロミクス インターラクトミクス オミックスはこれらの総合的な解析 (1) 計測データの解析:スペクトルデータ,イメージ処理,統計解析 (2) データマイニング:教師無し学習(主成分分析やクラスタ分析を含む),教師有り学習(p>>n問題が発生する),グラフ 課題 大容量データ(Big Data)への対応(Rオブジェクトへのアクセス速度の改善,MapReduceへの対応) 高次元データ特有の問題(p>>n問題):例えば乳がんの予防予測についてNEJM 2006; 355:560-9。 サンプル数(n)に対して説明変数(p)が極端に高次元だと起こるoverfitting? 解法はLASSOとかrandomForestとか ffパッケージ:Rオブジェクトアクセスの高速化(処理途中に中間ファイルを多数作成する。ディスクI/Oに多大な負荷がかかる。様々なBig Data処理パッケージ……crlmmパッケージなどで利用されている) 論文や学会発表などでの事例 Bioinformatics, 26(6): 777-783, 2010. hidden Ising modelを使っている BMC Genomics, 12: 64, 2011 Anal Chem, 78: 779-787, 2006:液クロを流す度に波形が微妙に変わるのを自動的に揃えるXCMSというパッケージの紹介 Bioinformaticsの論文: EBImageパッケージの紹介。イメージデータの数値化(バックグラウンドでImageMagikが動いている) ベン図の解析 VennDiagramパッケージ。4次元のベン図も簡単に書ける Nature 473: 174-180, 2011: ade4パッケージで主成分分析をしている。ヒトの腸内細菌の人種間比較。「メタゲノム」分析→3つのタイプに分かれる pvclustを使った論文もある Nature 490: 61-70, 2012. 乳がんの包括的分子ポートレート:NMFパッケージ Bioinformatics, 25(22): 2906-12, 2009. iClusterパッケージの紹介 JChemInfComputSci, 43: 1947-58, 2003. BMC Bioinformatics, 7:3, 2006. useR!では4件のRandomForestの発表がなされた LASSO(LARS)もPLoS Oneなどにも使った論文が今年出ている オミックス研究で他のソフトに比べてRの地位は? 先進的な部分がRで進むので順位はわからないがRがないと先端について行けない Bioinformaticsに掲載されているRのパッケージの紹介という論文は原著なのか? ToolとかTutorialとか特殊な扱いか? f-primeの鈴木さんによると,informaticsの分野ではRとタイトルに入った原著論文も多い 4.データ解析のためのGUIフロントエンド ef-primeの鈴木さん。企業向けデータ分析コンサルティング 今日はR AnalyticFlowの Javaで開発し,RとはJRIで接続。BSDライセンス 日本語と英語が選べるが各国語対応可 特徴は分析過程をフローチャートで記述できること 再利用が簡単 コンソールからの実行も可能 ***semと組み合わせられるかどうかが鍵だな 今日はやっと2.0が出るので,その紹介(リリースは12月上旬。今は1.0.7) 素晴らしく便利になった。 長大なスクリプトの場合やオブジェクトが大量にあるときも部分的に開くので高速。 中身を知らないヒトに処理して貰うのにも役立つ。 デバッガとしても有用。 64ビット対応!!!!! チュートリアルを追っていくだけでだいたいの使い方がわかる。 自動バックアップ/復元という機能もあるので,突然落ちても,次に起動した時に復元するかどうかを訊いてくる このソフトのコンポーネントを使ってsemのGUI操作ファイルができるはず→将来作ってくださるよう要望してしまった コメントを含む作業ファイルはXML 自由なエディタを使えるようにするのは将来検討 5.RStanの使い方 石倉さん:インドネシアでピート土壌から出てくる温室効果ガスの研究をしている北大大学院生 階層ベイズ推定をしている Open SourceなProject StanとRStanがある。Stanはスタンドアロン。RStanはRから利用するパッケージ 特徴:有向グラフィカルモデルを使ったコンパイラ,適応的ハミルトニアンモンテカルロ法 要は, 従来のGibbs SamplerであるBUGSやJAGSよりも幅広くサンプリングしてくれて収束が早く事後分布同士に高い相関があってもうまくやってくれる 資料は下記URL https://bitbucket.org/i_kiwamu/r_res_meeting_2012 注意点: RのバージョンはR-2.15.1以上 WindowsユーザはRのインストール先フォルダ名にはスペースが含まれていないこと。そうでないと再インストールが必要。 inline Rcpp RcppEigen に依存 C++を使うのでgccも必要。Rtoolsをインストールすればgccが入っているので,それを使ってくれる MacではXcodeを入れること -O3でコンパイルすると速くなる BUGS言語と似ている。文末にセミコロンが必要であり,普通のプログラム同様に上から変数を定義するという2点が異なる 型定義が必要。コンパイラのプリプロセッサだから当然か。 ユーザー定義の確率分布を定義できる rstanはJAGSより若干遅いが収束は良い。 6.MPIクラスタとRstudioを併用した中規模データの分析レポート作成の実際 岡田さん 並列化の話。疫学研究をそれでやってみたという経験の紹介 統数研のスーパーコンピュータも使いました 参照: http://rpubs.com/mokjpn/mpirstudio/ スライドはslidifyで作成(R Markdownのマークダウン言語でコードとスライドが同時に書ける) RstudioとknitRでさくさく解析レポートが作れるが,データベースが大きく重いと大変。 中間テーブル作成は作業ミスのもと。Rstudioから直接並列化できるようにして待ち時間を無くすのが目標 データは2500名の患者を半年ごとに3年半追跡したデータ 血液検査の結果と年齢と性別から指標値を計算して経年変化を示すテーブルを1人ずつ作る→並列化で速くなるはず 既にparallelが標準パッケージになったので,snowとmulticoreの機能を併せもつ関数群が使えるけれども,マシンをまたいだ並列化を手軽にやるわけにはいかない。そこでsnowとRmpiを組み合わせて使う。 必要なのはMPIのインストールとファイルの共有 Mac/LinuxではOpen MPIが使える。Snow Leopardまでは同梱されていたがLionでは外れたので自分でインストールする その後Rmpiパッケージとsnowパッケージをインストール 12コアマシンでは,37秒の処理が5秒に! library(knitr) library(markdown) knit(*.Rmd) markdown(*.Rd) とか。 128ノードのスパコンでは12コアで5秒だった操作が0.2秒に 7.Rによるマルチエージェントシミュレーション 谷村さん LaTeXのビーマーによるプレゼン(pdfができる) MASは自然科学でも社会科学でも利用されている Rでどうやる? 自作/NetLogoをRから使う(Rnetlogoパッケージ)/simecolパッケージを使う(生態学ではIBMというのが普通) NetLogoは1999年からU.S.ノースウェスタン大のUri Wliensky教授らが開発(Java) Open Source, Multiplatform, 多言語 Logo言語をベースとしたNetLogo言語で記述(StarLogo言語の後継) RからNetLogoをつかうこともできるし,逆にNetLogoからRを予備出すことができる。 NetLogoのコーディング:2つボタンを作る。即ち,setup処理の定義,go(メイン動作)を定義 各処理は関数として書く NetLogo to 処理名 処理 end sliderによる初期値設定GUIが簡単に増やせるのが利点か あとはエージェントのグラフィカルな表示か。→ディレイは入れられる Rnetlogoを使うと,RからNetLogoを呼び出して使える(パスは指定する必要がある)。 乱数は?→不明(おそらくwebなどには情報が載っている) スライダーで設定したパラメータは保存できるのか? 正規分布でエージェントに割り付け:他の分布にはできない? 分散は設定できる? カップルの行為は悪い方に合わせる。HIV検査実施の効果をみるシミュレーション 裏では動かない? 8.臨床疫学におけるRの普及活動 奥村泰之さん 教育 論文を書く時にRを使ったとちゃんと書く WebはPassepiedというのをずっとやっている 既存の論文で使われている分析をどうやってRでできるかを紹介している パッケージも開発している。rpsychiというパッケージを3年ほど開発 論文レビューやメタアナリシスに役立つパッケージ 平均とsdとサンプルサイズはわかるがp値しか出ていないような論文から簡単に再解析して信頼区間を出せる 研究会もやっている。コンセプトは(合コン?)表向きは研究報告の質の向上( equator networkの現実版) コアメンバーの選択・fprやmedstatで告知した メールでも声を掛けた 論文を執筆する心理・医学系研究者(大学院生以上) 25名(事前登録制) 医科歯科大 土曜日 16:00-18:50 1手法3名の構成 **分析の入門 **分析の報告事例→一流誌に載った論文を2本じっくり紹介 **分析の書き方 9.自分 アニメーションパッケージを使ったらいいのではというコメントを頂いた 10.Rによる人口動態健康指標分析システムの構築 藤野さん 元々はRでないソフトで開発し,Rに移植中 福岡研保健環境研究所と福岡女子大の共同研究 保健環境研究所のデータは多数蓄積されているが十分に活用されていないという問題 福岡県の市区町村別 出生,死因別死亡,婚姻などのデータ。1978年から。全部で約150万レコードある システム概要:データ検索,抽出,集計,コロプレス図表示など 最初はRubyを使ったcgi。JavaScriptによる通信で必要最小限のデータをやりとり。GUIにExtJSを利用しているので修正が面倒。 PostgreSQL+PostGIS。一部Rを利用していたが,原則はweb上アプリ 「福岡県健康情報システム」として公開されている 地図表示はSVG。インターラクティブ Rで全面的に書き換え。RApacheが十分使えそう。地図関係はmaptoolsで インターフェースは携帯端末対応に Jquery mobile Rコードをhtmlに埋め込むbrewパッケージも利用 疾病地図の作成 市区町村の合併の扱いが困難。合併情報テーブルを自作して対応 DBでqueryにより絞ったデータをRのデータフレームとして取り込み,他のデータと組み合わせてコロプレス図を描く SMRはRで経験ベイズ推定。これは非常に簡単。 地図はmaptoolsで,出力先はpngデバイス iPadでもできる Android端末でもできる 現在はプロトタイプ インタラクティブな塗り分け地図が目標 gridでポリゴンごとにidをつけたgrobを作成 gridSVGでSVGに変換 javascriptを追加 11.討論 来年度も今年と同じ形で中谷さんが世話役で継続予定。 今年度も無事終了して良かった。