Latest update on 2021年7月4日 (日) at 18:43:39.
6:45起床。洗濯物を部屋干ししてから朝食をとって名谷キャンパスへ。土曜の発表準備ができていないので,ひたすらコードを書き直しては発表スライドを作る。材料はあるのだが,最適パラメータを見つけるところでの矛盾が解消できない。そこは諦めるか? もちろん無理があるのはわかっていて,条件を緩めればいいのだが。そこまで含めて発表ということにしようか。
18:00頃からグローバル教育委員会の仕事で,今年海外に短期留学した学部生と院生の発表会が2時間あった。9グループそれぞれが10分余りの持ち時間では,やってきた内容を十分に喋るには全然足りないわけだが,あまり長くするわけにもいかないので,これがギリギリの形だろうか。意外に聴衆が集まって良かった。
そのまま三宮へ。すき家で晩飯を食べてからバスターミナルに行ったら,夜行バスに乗るのにちょうど良い時刻だった。このバスは各座席に電源があり,今使っているPCはHDDではなくSSDなので,安心してスライド作り作業を進めることができ,京都の手前くらいでスライドが完成した。コードは後でアップロードしないと。
7:00前に立川着。スマホの地図アプリで検索したらジョナサンが開いていることがわかったので,一日分の緑黄色野菜がとれるドリアモーニング,というメニューを頼んだ。夜のうちにメールがたくさん来ていたので返事をしてから統数研に向かおう。
2019年度R研究集会は,9:55スタートなので,9:00頃まではドリンクバーのコーヒーを飲みながら作業しよう。電源も使えるし。
9:55,予定通りにR研究集会が始まった。1人当たり持ち時間は30分(発表20分,質疑10分)とのこと。保存はされないがネット中継あり。統数研もeduroamが使えるのは便利。以下メモ(記録ミスがあるかもしれないがご容赦されたい)。
江村さん。joint.Coxは江村さんが開発したパッケージ。開発したwebアプリの例から説明。予後予測実行までの流れとしては,患者データを準備(偏らないデータが必要),データを予測モデルに当てはめる,完成したモデルをウェブ・アプリとして公開という3つのステップはRを使える統計家が行い,第4ステップとして,医師がアプリを用いて患者に対して予測結果を提供する。医師は患者情報の入力をマウスやスマホからできるようにしたい。乳がん,リンパ腫,肺がん,卵巣がんなどでは,クラシカルな生存時間解析によって予後予測をしているのが普通。死亡時刻の確率変数D,予後因子Zとして,t年後生存確率はCoxモデルでS(t|Z)=Pr(D>t|Z)=S(t|0)^exp(tZ)のように示される。クラシカルな5年生存率予測には,術後増悪を予測モデルに入れられない,多施設データの統合解析に適さない,という問題がある。本研究で考えたい予測のスキームは動的予測(van Houwelingen and Putter 2011)。t日目までの予測スキームにより定義は異なるが増悪を起こした患者と起こさない患者の生存確率を別々に予測する。乳がん患者のデータ(Haibe-Kains et al., 2006)では,転移,死亡,打ち切りが記録されている。複数施設。統合したい。イベント観測パタンが4パタン(増悪と死亡の有無の組み合わせで:無=打ち切り)。予後因子としては,遠隔転移が見られた日,エストロゲン受容体,腫瘍径,リンパ節ありなし,年齢,70遺伝子検査マンマプリント,GGI。Rパッケージjoint.Coxでデータ解析。パッケージをロードして,read.csv()で原論文で公開されているデータ(をcsvに変換したもの?)を読み込み,適切な型変換をして関数を適用し,パラメータを計算し,Shinyのテンプレートを設定。画面から操作できる(リアクティブな)患者情報入力を定義し,アウトプットを適切に設定するという手順で,最初の例のようなアプリができる。死亡率(累積?)と信頼区間が推定できる。信頼区間が十分に小さくないとダメなので,Kaplan-Meierの推定と予測誤差を比べて,7000日目まではjoint.Coxの方が誤差が小さいことは確認した。Shinyアプリは審査もなく公開サーバなので誰でもアップロードできる。スキームは医療情報の論文誌に投稿中。データ収集,モデルの当てはめ,信頼区間,予測誤差の評価には,ある程度のRとjoint.Coxの知識が必要。
(Q1)欠損値対応? Shinyは多言語対応はどうか?(A1)投入前に欠損値は除去する。多言語化はまだわからない。今のところは考えていない。(Q2)医師から新しい変数を入れたいとか,再カテゴリ化したいといった要望があった場合,変更は簡単か?(A2)Shinyのテンプレートを書き直すだけでマイナーチェンジ(再カテゴリ化など)は可能。しかしモデルパラメータがこれまでのデータで得られているので検証が必要。(Q3)公開はサーバとして使える状態だけか? ソースもか?(A3)ソースも公開している(つもり)。どうしたらダウンロードできるのかは不明。
谷村さん。教育面での話。倫理配慮,守秘管理,作業スペース等々。人を対象とする医学研究では倫理審査が厳しく,承認を受けないと研究開始できないし,研究計画に書かれていないことをすると重大な倫理違反ということで監督省庁に学長が報告ししかるべき対応をとる必要がある。倫理のルールはコロコロ変わる。個人情報保護法は3年ごとに変わっている。倫理指針も変わっている。臨床研究法という法律が成立している。倫理的配慮は,無危害原則,自立尊重原則,正義原則など。今日の話は自立尊重原則の中の守秘義務(個人のプライバシー保護)がRでどうやって守られるかという点。個人情報における安全保護の原則として,紛失,不当アクセス,破壊,使用,修正,公開における安全管理の方法を明記しなくてはいけない。物理的,技術的,組織的,人的安全管理措置が必要。データの取り扱いについての文章の例示(長崎県看護協会が公開しているもの)。実際の対処としては,匿名化(そもそも個人を特定できる情報は得ないのが楽だが,縦断研究の場合は特定が必要なので,対応表を管理する責任者を分析担当と完全に分ける),分析はネットに接続されていないPCで行う(必要か??)。制限されたPCへのアクセス(特定の研究者のみ,パスワード)。紙媒体や取り出し可能な媒体は施錠できる場所(金庫と書くことが多い)に保管。USBメモリの情報漏洩対策としては,暗号化機能付きUSB以外は使用禁止とか,ファイルシステム暗号化するとか,データファイルにもパスワードを付けるとか。Rで推奨されているcsvはパスワードをかけられないので問題あり。初心者ユーザは作業環境を保管してしまうことがあるので,RやRStudioを起動しただけでデータが再現されてしまうなど。作業スペースの管理としては,(1)学生はついworkspaceのイメージを保存してしまうので,できない仕組みを作る→「保存しない」を選びましょう,RStudioでは箒アイコンをクリックしましょう,Rではrm(list=ls())を実行しましょう,など。(2)RStudioのgeneral optionにNeverという設定があるので,その設定をしておく。(3)Rコンソールではformals(quit)$save <- formals(q)$save <- "no"としておく。それを予め設定しておく。パスワード付きxlsxファイルを使う。xlsxパッケージのread.xlsx()はパスワードに対応する。しかしスクリプト中にパスワードを直書きすると履歴に平文でパスワードが残ってしまう。そこでパスワードはreadline()を使って毎回手入力させるようにする。しかし入力するパスワードが画面上で見えてしまう。そこで,getPassというパッケージを使う。getPass()は入力がマスクされる文字列読み込み。パスワード付きzipファイルとしてcsvなどを固める場合。Hmiscパッケージの中にgetZip()という関数があり,csvを取り出せる。毎回パスワードを入力することを回避したい場合は,キーリングの仕組みを使う方法もある。keyringパッケージは,WindowsやMacOSなどのOSのキーリングまたは環境変数にアクセスする。しかしOSにパスフレーズを保存してしまうと,そのPC以外でデータ分析するときには逆に面倒になりそう。Rオブジェクトの暗号化保存は,rcryptパッケージを使うとGPGを使って暗号化できる。他にもたくさんそういうパッケージはある。*.rdsをセーブし,rcryptパッケージのencrypt()関数でパスフレーズを与えると,暗号化したファイル*.rds.gpgができる。復元はdecrypt()を使う。元ファイルは手動削除が必要。*.rdsに限らず*.csvなども暗号化できる。リストの中の特定の要素だけ暗号化することもsaferパッケージを使えば可能。encryptrパッケージも同様。公開鍵+秘密鍵方式にも対応。学生に対しても最低限のパスワード・パスフレーズを管理運用できる教育が必要。
(Q1)ファイヤーウォールで守られた中ではダメ?(A1)ファイヤーウォール内に悪意ある人がいるとダメなので,ネット非接続のPCが必要。(Q2)医学ではEZRが使われていることが多いが,手はあるのか?(A2)getPassは使えるはず。
樋口さん。免疫システムを担うのは多様な免疫細胞。教師あり機械学習により,免疫細胞の違いを探った。学習モデルから特徴抽出(遺伝子リスト)し整理。ある化合物(BLT)を投与したときの免疫応答を調べて欲しいという相談を受け,測定結果とImmunological Genome Project(http://www.immgen.org)データを比較。階層クラスタリングしたが明確な結論は得られず。今回追試として,681の遺伝子発現データを用いて階層クラスタリングしたが,確かに明確な結論は見いだしにくそうだった。→そこでこのデータに対して,教師あり学習モデルを構築し,薬物投与応答を予測した。予測結果はDCを示し相談者の興味を引いた。RMA法による計測データの正規化,10以上のサンプルをもつ19クラスを選抜,737サンプル×35557プローブになった。これを4種類(LASSO, MARS, GBDT, Random Forest)の教師あり機械学習で判別分析。10 fold cross validationでaccuacy確認。学習モデルから特徴抽出し遺伝子リストを取得し,PCAスコアプロットとベン図。CD4,CD8はT細胞ではないの? LASSOはglmnetパッケージ,MARSはearthパッケージ,GBDTはxgboostパッケージ,RFはrandomForestパッケージとvarSelRFパッケージを使用。mean accuracyが,LASSOは0.991。MARSは0.901,GBDTは0.977,RFは0.979だった。どれも悪くはない。すべての手法で特徴量として選ばれた遺伝子は1つのみ。エンリッチメント解析による選抜遺伝子リストの合理性検証のため,TargetMineを使用。Fisherの直接確率検定で,検定の多重性はBHで調整(たしかBHはfdrと同じものだったはず)。有効なパスウェイがたくさん示唆された。RFだけが選抜した遺伝子リストのエンリッチメント解析をしたら,PD-1 signalingが検出された(PD-1は本庶先生の研究で有名)。Ramon DIaz UriarteがBMC Bioinformaticsに書いた論文で,RFの解の不安定さはスーパーコンピュータを使った結果でも検証されている。羅生門効果とも言われる。そもそも教師データにバイアスが含まれる可能性がある。教師なし学習は誤ラベルの影響を受けないので,両方やって比べる必要があるかも。
(Q1)LASSOだけでもパラメータを変えるといろいろな結果が出るので,その結果で良いと言える根拠が欲しい。この手法はこうだからこういう遺伝子を選択しやすいのだといった理由付けが欲しい(A1)今のところない。今後やってみる。
鈴木了太さん。Rユーザ歴18年。ef-primeでコンサルティング,分析ツール開発・公開している。R AnalyticFlowというフロントエンドを作っている。今日は違う話。事例紹介とR Tips。R AnalyticFlowは以下のユースケースに最適(データ分析を受託し,分析結果を納品/作成した分析フローをRスクリプトとして納品/データはファイルやデータベースにあり,分析はローカル)。しかし,データも分析もクラウドとか,そもそもPython指定でRが使えないとか,Rの機能はインタラクティブに使いたいがRには触りたくないといったニーズには当てはまらない。(事例1)Rで分析GUI→統計専門でないメンバーが定型的な統計解析できるように→Shinyウェブアプリで多数のデータセットを柔軟に扱えるよう工夫。irisのような共通IDをもつ複数テーブルの相互関係をみる。インタラクティブなマーク分け散布図の例示(これだけならjamoviでも良さそうだが)。Shinyの書き方。あるテーブルの変数で条件を指定し,条件を満たすデータについて分析できるようにしたい。conditionというコントロールを付けて選んでapplyボタンをクリックするという形で実装。GetDataという関数でeventReactive()により複数のデータをまとめて返す。リストで実装するより環境を使う方がオブジェクトのサーチパスを制御できて便利。Excelの一部データをRで読むにはR側で頑張るよりExcel VBAを書いた方が楽だったとのこと。(事例2)既存の分析プログラムを別のツール・環境へ移植したい。商用からオープンソースへ,ローカルからクラウドへなど。SASからRへの移植。統計モデルの推定と予測,非線形最適化。マクロとRcppを駆使し,ほぼ同等な出力を実現,ただし最適化部分の実行速度に難あり。元のSASプログラムがマクロを多用して書かれていると難しい。defmacro関数を使うと関数定義とは違い変数がローカルでなくなる(<<-の方が楽では?)。行ごとの処理はRcppに置き換えると速い。SPSS ModelerからPythonへの移植では,データベース上のテーブルをあたかもデータフレームであるかのように扱えるモジュールを開発したsummary()とかgetQuery()とか。もしRならdbplyrパッケージを使うと,dplyrコードが自動的にSQLに変換して実行できる。ローカルではdata.frameをdplyrで処理するように開発しておいて,データベースに接続してdbplyrに置き換えればOK。わりと何でもできるのはRの大きな利点。クラウドではPythonが優勢。とくにGoogle AI Platformのscikit-learnとか。一方ではMicrosoft AzureMLはRと親和性が高い。複数のツールが使える方が望ましい。
(Q)移植のところで既存の関数がある場合はそのまま使うか? 実装されているアルゴリズムが違っていて結果が変わるときはどうするか?(A)対応できない場合は説明して理解が得られるように務める。
山川さん@岡山大学。(Web)GISとRにより環境汚染物質の分布を評価する手法について。小さいツールの組み合わせが好きなので。R+rgdal,gstatパッケージ。クリギング法,セミバリオグラムを作る。jSTAT MAPのWebGISがフリー。QGISは使っているが,ArcGISは高い。GDALは地理空間情報データ抽象化ライブラリ(FOSS4G,OSGeo supported;www.gdal.org)。山川さんはOSGeoの日本の財団の理事。WebGISはブラウザベースで稼働する。各種の地理データや統計データが最初から登録されている。地図表現における彩色はバリアフリーなものを使っている(ユニバーサルデザインのカラーという意味?)。データ形式はCSVとShapefile。投影法は直角座標系。WebGIS用の投影法は地域メッシュコード。岡山市全域の年平均オキシダント濃度とPM2.5濃度(国立環境研から公開されている観測値)を使用。予測グリッドの位置情報には総務省統計局から提供されている市区町村別メッシュコード(3次:1.0 km間隔)を採用(この段階はQGISを使った)。地域メッシュコードを直角座標系に変換。地域メッシュコードは県番号以下階層的な番号なので,それを緯度・経度(EPSG:4326)を経由してJGD2000 CS V (EPSG:2447)に変換(表計算ソフトで)。観測データ(オキシダントとPM2.5)をGeoJSON形式に変換。観測点は離散。それを使って1 kmメッシュ全部を予測するのは若干無理がある(北の方は観測データがない)。Rの中では2447という番号が大変重要。実行環境はすべてSource Codesから野良ビルドした。Emacs/ESSで編集しているが,それもソースからビルドしている。完全にネットから切り離されていてもビルドできるので個人情報保護向き? ライブラリ依存が結構ある。R本体もrgdalもgstatもソースからビルドするには依存パッケージが多くて大変。クリギングのコード。library(rgdal); library(gstat)から,readOGR()とかCRS()とかread.asciigrid()を使う。read.asciigrid()は昔から使われている。variogram()とかvgm()とかfit.variogram()で分析。gstat()とpredict()で得た結果をwrite.table()でファイルに書き出す。書き出したcsvファイルをjSTAT MAPにインポート。年平均オキシダント濃度の分布とPM2.5の分布が大きく異なる。オキシダントは岡山県中心部は低い。瀬戸内から来る。PM2.5は海沿いが高く山の方が低い。低いところに滞留? 空間演算もjSTAT MAPでできる。人口密集地(DID地区?)とPM2.5>15μg/m^3の地域を重ねると,一番人口が集まっているところはそこまで高くない。行政うまくいってる?
(Q1)バリアフリー彩色はjSTATにオプションある?(A1)ColorBrewerで候補を出してRGBで手作業で指定,(Q2)点推定だけでなく信頼区間は?(A2)今後。(Q3)SEの地図も別に付けたら良いのでは?(A3)今後。(Q4)月別パタンでは(A4)春先はPM2.5が西の方が高いなどパタンは違う。
船山さん。研究実績の把握で,研究者の評価,研究支援,大学の宣伝,共同研究の促進などができる。業績を上げている研究分野はどうやって把握できるか? 論文として発表された分野,被引用論文の研究分野を把握すればいいと考えた(そもそもマイナーな分野には価値がないのか? そんなことはないと思うが)。研究分野情報の取得方法としては,ジャーナル名から,著者の所属から,学内教員情報から,といった様々なものを組み合わせることが可能。しかしタイトルからわかる分野が,それらの情報だけでは把握できない。そこでタイトルとアブストラクトから(被引用論文も合わせて)テキストをトピックモデルで分析することで,各論文の研究分野を推定した。Web of Scienceの2007-2016年のデータを使用。1つの大規模総合大学の中で,どの分野が業績を上げているかを明らかにする目的。4261論文,被引用論文は36604編。単語数は133430単語。被引用数は1500を超える論文が1編だけあった。過去形や複数形などの単語を原形に統一するため形態素解析をした。記号とストップワードも削除できる。特定の品詞のみを解析することができる。単語の種類が減るとトピックモデルの実行速度が速くなる。形態素解析のソフトは日本語ではMeCabだが,英語やフランス語ではTree Taggerを使う。それをRから使うkoRpusパッケージ。トピックモデルはlda,topicmodels,ldatuningなどのパッケージを使う。2~70トピックでは指標値が低く収束した。トピック59の場合の例。どの論文もどこかのトピックの確率が高いので,そのトピックをその論文のトピックとした。トピック3など関連研究の紹介論文が集まった場合もあった。可視化はkohonenパッケージで自己組織化マップを表示。入力データを標準化してからマップにするとトピックごとにまとまって可視化された。トピックごとにマッピングされた論文の重心を計算し,バブルチャートとして表示。泡の大きさが論文数。3年ずつ区切ると,どの分野が活発になってきたかがわかる。そこに被引用論文数を追加する(泡の色を変える。被引用文献が多いほどheatcolorで濃い色に)と学問に貢献している分野がわかる。期間別の折れ線グラフ(中期からの変化率として前期,後期を示す)を泡の中に重ね描きすると推移もわかる。
(Q1)トピック数を制限して抽出しているのが因子分析に似ている。因子分析では因子名の妥当性が問題になるが,トピック名は研究分野名としてどうなのか?(A1)ちゃんとした検証はしていない。既存研究分野名に当てはまらないトピックなら新たな分野名として提案し,誰もがそれに納得することを目指す。(Q2)トピックドリフトに気をつけなくてはいけないという話を聞いたことがあるが?(A2)わからない。(Q3)数だけでみるのはどうなのか?(A3)時系列でみることで活発になっているとか停滞しているとかわかるはず。
藤野さん。IRを最近は業務としてやっている。大学における意思決定として,「この入試で入ってきた学生って成績が悪いんじゃないの?」「私が担当した学生は優秀でしたよ」など人により評価が異なることが多い。2014年中教審「大学のガバナンス改革の推進について」でIRの充実が記載された。大学評価。教育の質保証,評価の可視化など。IRとは大学内のデータを収集・分析して教育・研究・業務改善などに活用する活動。IRオフィスの設置状況。意外に多くの大学にある。福岡女子大ではIRニュースというものを出している。冊子体として配布している。課題はデータの整備と人的資源の不足。学生数のデータでも,認証評価担当者,中期計画担当者,学生名簿担当者,教務システム担当者,学内SEなど多くの人が必要とするしそれぞれ微妙に違っていることが多々ある。各種システムも各部署で必要に迫られて順次導入されるので連携がとれず,信頼性や効率が低下する。そこでIRとして,集計データ・データカタログの作成とダッシュボードの作成をRでやっている。データ共有基盤として,各部署のデータ担当者がkintoneでデータ本体の登録+データカタログへのメタ情報の登録を同時に行う。そのサーバのAPIを使って,学内ユーザがR/Rmdスクリプトでデータを取得・加工しHTMLを出力できるような仕組みを作った。kintoneはcybozuのサービス。RではkntnrというパッケージでAPIが使える。データ閲覧用のRmdテンプレを書いた。データはdata.table()。データカタログから階層的に選んだり検索(フィルタリング)したりして必要なデータに辿り着ける(感想:便利だと思うが個人情報も多いと思うので,アクセス権限の管理とかどうしているんだろう?)。グラフはplotlyで描いたものがブラウザで見える。動的HTML出力のためにShinyServerが必要。オープンソース版では遅くなりすぎ。契約すると同時ユーザ20人まで9995$/yearと高すぎる。ShinyProxyを使ってみた。Java。Dockerベース。Docker startup optionの設定を忘れると動かないので注意。Ubuntuでrockerjp/tidyverseを設定してDockerイメージをbuild。ShinyProxyの設定でもコンテナイメージを起動するときのオプションを個々に書くことに注意。マークダウンの書き方は情報が少ないがポート番号の指定もマークダウンに書かないと動かないので注意。
(Q1)kintoneは1500円/月だがそれだけで良い?(A1)アカウントは各部署のデータ担当の人だけがもっている。福岡女子大の場合15人とかだけ。(Q2)部署によって対象とするデータが微妙に違う場合どうするのか(A2)完全には吸収できないが,元のデータを粒度が細かいものにしておき,必要に応じてaggregateした集計結果が出るようにしている。(Q3)個人情報管理の権限付与は?(A3)個人情報は入っていない。集計データの融通のためのシステム。
鈴木譲さん。昨年は数学ばかりだったが,今年は数学ではない。機械学習の数理100問を作って公開したら1000件いいねを貰ったのでその紹介。BNSLパッケージの開発者。コマンドラインユーザ。2015年のuseRに参加した。bayesnet.org/100.pdfは数学の問題50問,R言語の問題50問。必要知識として理系学部1年の線形代数を仮定。30分以内でだいたい解けるはず。問題同士つながっている。数学的な導出はヒント盛りだくさん。R言語で実現して動作確認できると,数学で正確な判断をしたことが正当化される。阪大数理科学の3年生はこの100問を解かないと単位が取れないことになっている(全部出す人は7割~8割)。Newton-Raphthon法をRで実装,2次元に拡張してもいける,とつながれば,最尤法まで導出できる。講義の演習問題として課すことで,R言語の学習と統計学の学習の相乗効果が出ることを狙っている。その基礎としてJames G et al. "Introduction to Statistical Learning with R"(朝倉から訳本が出ている)。パッケージにデータを放り込むだけとか使い方を覚えるだけという統計教育は,学生に頭を使わない人生を奨励したり,学生を明日の化石にしたりするのでダメ。目標は学生の頭の中に数理的なロジックを構築すること(感想:しかし医学部とかの学生には難しいよなあ)。データ関連人材育成関西地区コンソーシアムでビデオを作ってvimeoで公開(? パスワード付きという話だったが,見えるがなあ)している。「機械学習の数理」など9本。声は読み上げソフト? 書籍としては共立出版から3月中旬発行予定。数式の導出も含め,パッケージよりスクラッチ,という姿勢で書いた。図は苦心したがtikzDeviceパッケージを使って,tikzのコードを手で直した。スパース推定と機械学習への応用100問というのを近日公開予定。書籍の将来展望として機械学習の数理100問シリーズ(共立出版)を8冊出す予定(コードがRのものとPythonのものがあるので4種類)。
(Q1)新しい本とpdfの関係は?(A1)7割は今日だけアップロードしてあるものと同じ。プラス3割が新規。(Q2)理論的に正しいことをコードでやっていても数値計算的に変なことが起こるのはどうするか。(A2)動かすためにそれが必要ということを意識させて書いている。(Q3)Knuthの本のように誤植を見つけたら報償みたいなものは?(A3)誤植はないと思うが考えてない。
forecastよりfableを使うべきというコメント。ありがとうございます。
少しだけまじめに考察しておくと,今回の発表にもし意義があるとすれば,(1)質がわかっている時系列データは意外に入手しにくいので,それを自分で取って公開した,(2)arimaモデルやWavelet解析のようなよく知られた時系列解析の自動モードでは見つからなかった,土曜日に減るというweeklyパタンをprophetパッケージが見つけてくれた(後で探してみたらマニュアル邦訳を作って公開してくださっている方がいらした)。prophetは年,週,日単位の季節性について非線形のトレンドを相加的に当てはめるモデルに基づいて時系列予測をする目的で開発されたパッケージなので,微妙で非連続なパタンを見つけるのに向いていたと思われる,(3)今回の発表では具体的に引用していないが,モデルの発想としてはかつて一世を風靡した体重のセットポイント説(文献としては,Harris RB, Role of set-point theory in regulation of body weight. FASEB J, 4(15): 3310-8, 1990.とか,Leibel RL et al. Changes in Energy Expenditure Resulting from Altered Body Weight. NEJM, 332: 621-8, 1995.とか,Keesey RE, Hirvonen MD, Body Weight Set-Points: Determination and Adjustment. J Nutr, 127(9): 1875S-83S, 1997.とか,比較的新しいところではMuller MJ et al., Is there evidence for a set point that regulates human body weight? F1000 Med Rep, 2: 59, 2010.とか……あまり真面目に検索していないので,ちゃんとレビューすればもっと新しいものがあると思う)と関連している,といったところであろうか。発表者としては,公開したデータを独自に分析してくださる方がいると嬉しい。
地道さん。Hadley Wickham師がデータラングリング(wrangling)と呼んでいる。Reproducibility by makeを元々やっていた。Orbisデータベース。名だたる企業の財務指標が含まれている。1割(2400万社)のデータを10年分とってきて分析。2種類のデータをとって分析。iMac Pro,Precision T7910,東大FENNELを使用。2億6000万行のデータ。まず元データをシェルスクリプトで番号を振り直しながらコピー。BOMの存在,行末コードの相違,レイアウトの不統一,金額フォーマットがカンマ区切り,欠損値コード不統一,データ行頭のタブなどが問題なので,それもsedやgrepなどを使ってシェルスクリプトで処理する。すべてのファイルに対してshをシリアル実行すると膨大な時間が掛かるので並列化。6分が1分に減る。だが,普通に並列化すると結果に差が出てしまう(処理順序がぐちゃぐちゃになるので)。pararellに-kオプションを付けてやると順序が狂わない。6時間が1時間半になる。FENNELでSparkRを使うともっと速くなるが30分かかる。PostgreSQLとGPUを使うPG-Stromというソフト(海外さんが開発)を使うともっと速くなる。RPostgreSQLパッケージでRからPostgreSQLが使える。1分半。GPUを使わないと600秒かかる。結果として税金払っていないのに儲けている企業がたくさんあることがわかった。10年間の変化をみたら(convertでアニメーション化)傾向はほぼ変わらなかった。この研究はJHPCNでやっている。
(Q1)全部ローカルでの処理?(A1)今回はPrecisionが48コアなのでその方が速い。普通のノートPCでもパラレル化すれば速い。(Q2)かつてRでGPUを使うパッケージ開発の途中経過を発表した土居君からの質問。GPUはメモリ空間が狭いので扱いが難しいのでは? 最終的には公開できるレベルのものは作れないという結論に達した。海外でも開発が途中で止まっているものが多い。(A2)いろいろ教えてください。
合崎さん。BWSとは項目や属性・水準に対する相対評価を測定するための社会調査法。表明選好法に分類。3つ以上の選択肢を提示してBestな選択肢(表現としては「最も好き」とかでも良い)とWorstな選択肢を回答。回答結果を集計・計量分析することで相対評価を計算。「統計数理」の最新号にもBWSの研究が載っている。評価対象の提示の仕方によって3種類に分類(何だか特定されていないが,産地が3つ提示されていて,ベストな産地とワーストな産地を選んでください(object case)/林檎を評価する場合,産地,栽培法,価格がある中で,ベストな特徴とワーストな特徴を選んでください(profile case)/複数の特徴がある林檎3つが出て,ベストな林檎とワーストな林檎を選んでください(multi-profile case))。離散選択モデル(ロジットやプロビットで分析)。今回のパッケージアップデートでmulti-profile caseに対応した。医療系ではprofile caseがよく使われている。質問紙調査であり,選択肢集合の設計,調査実施,分析準備,分析実行すべてをやらねばならないので,学部生にはハードルが高い。object case用はsupport.BWS,profile case用はsupport.BWS2,multi-profile case用はsupport.BWS3というパッケージを作った。既存のCRANのパッケージと併用することでBWSに必要な作業がR上で実行できる。選択肢集合の作成(釣り合い型不完備計画など;corssdesパッケージのfind.BIB()関数が便利。実際にBIBDかどうかはisGYD()でチェック),調査票の作成(bws.questionnaire()に結果を渡すと勝手に調査票形式になる),分析用データセットの作成,分析と評価(カウントとモデリング)についてサポートする関数ができている。調査実施はウェブやポータブルデバイスを使う場合が多いが,そこはサポートしていない。選択肢集合作成の前段階の,適用目的の決定や項目・属性・水準の設定はソフトでサポートされるようなものではない。MaxDiffモデルやMarginalモデルなどmodel=""で指定可能。分析はclogit()を使う。ベストの回数,ワーストの回数の差としてのカウントはbws.count()で。bwsのオブジェクトをplot()に渡すと平均と標準偏差の関係がプロットされる。Maxdiffモデルを仮定し,乱数で人工的な回答結果を生成する関数もある。分野ごとに適切な例題を作成する関数がある。授業などでも使える。bws.response()関数。DCEのCRANパッケージの紹介。mlogit,gmnl,apollo。apolloが今年3月からCRANに載った。Stephane Hessが元々他の言語で作っていたソフトをRに移植した。apolloはDCEの専門家が開発した。さまざまな離散選択モデルに対応。さまざまな効用関数に適用できる。普通のモデル式の書き方と違うので注意。汎用性が高いのでclogitより煩雑にみえる。apolloの効用関数はリスト。http://lab.agr.hokudai.ac.jp/nmvr/参照。
(Q1)3つのパッケージを統合する予定は?(A1)管理する上では統合した方が楽だが使う人には別の方が良いと思われるので統合する予定はない。(Q2)日本語は使えるか(A2)通常のRのコードなので物の名前には使える
伊地知さん。主に民間企業向けに機械学習ソリュージョンを提供している。業務で使える機械学習モデルを作るには,本質は泥臭いPDCAサイクルだが,本来はどのような変数をモデルに組み込むかといったところに注力したい。ドメインエキスパートがデータを用意し,機械学習自動化によりモデル生成ができれば,解釈や適用に人が力を割ける。DataRobotは予測分析の自動化を実現。Kaggleマスターのノウハウで自社データから機械学習モデルを自動構築。モデル出力の解釈・説明をつけてグレーボックス化している。米国の糖尿病患者の再入院予測の例。オートパイロットモードではアウトカムメジャーを決めて「開始」ボタンを押すだけ。モデルのパフォーマンスはROCで表示される。
(Q1)再入院ならどうすれば防げるかが疫学では大事。しかし過去の入院回数がもっとも強い予測因子だとしても予防には繋がらない。因果の向きはわからないのか?(A1)その通り。わからない。(※しかし,因果の向きが逆としても,公衆衛生的に医療資源の配分計画には役に立つ気がする)(Q2)独占技術?(A2)米国にも何社か似たようなことをしている会社はある。(Q3)欠損値補完のアルゴリズムは?(A3)複数の手法をすべて試して検定結果がもっとも良いものを残している。(Q4)機械学習自体がちゃんと動いているかどうか確かめるバリデーションは?(A4)教師ありの学習に特化したプラットフォームなので,教師データが正しいという前提。(Q5)自分が作ったパッケージを取り入れて貰うには?(A5)順次テストして取り入れているので,テストして良かったら取り入れるかも。
立川駅近くの店で懇親会となりPerlの素晴らしさについてなど四方山話。岡田さんのガジェットがまた増えていた気がする。ミスドでカフェオレを飲みながら酔いを覚まし,22:15の夜行バスに乗って神戸へ向かう。
リトグリがYouTubeのTHE FIRST TAKEで「愛しさにリボンをかけて」を一発撮りパフォーマンスしたので早くみたいのだが,夜行バスの中で見るわけにはいかないのが辛い。
▼前【269】(講義準備が終わってから会議,終わって忘年会,翌日は丸一日講義(2019年12月18-19日) ) ▲次【271】(講義準備(2019年12月22日) ) ●Top