StatModeling Memorandum

StatModeling Memorandum

StanとRとPythonでベイズ統計モデリングします. たまに書評.

『用量反応試験における患者の割り付けの深層強化学習による最適化』というタイトルで統計関連学会連合大会で発表しました

ありがたいことに統計関連学会連合大会の招待講演の依頼がありましたので喜んで引き受けました。たくさんの質問ありがとうございました。

発表資料を共有します。一言で言うと、臨床試験において各患者を各用量にどう割り付けるのが良いかを強化学習を用いて求める方法です。性能が良く第2相試験の効率を大きく改善すると思っています。実際の臨床試験でぜひ使ってほしいですし、そのための協力は惜しみません。

元論文はこちらです(open access)。 資料の方は分かりやすさ重視のため、評価シナリオにexponentialモデルが入っていないです。論文の方は欠点を明確にするために入っています。

ソースコードは以下です。2022/9/6にPythongymライブラリに互換性のない変更が入りましたので、Rayライブラリまで対応したら直します。その後、Rパッケージにできたらいいなと考えています。 github.com

階層ベイズモデルとWAIC (その2) 積分消去する変数が2個ある場合

この記事では積分消去する変数が2個ある場合において、階層モデルのWAICを算出します。シンプソンの公式を使う場合とモンテカルロ積分を使う場合の二通り行います。

その前に、積分消去する変数が1個の場合を復習します。以前の記事のモデル2の(2)の予測を考えます。ここではこのモデルをmodel1と呼びます。

シンプソンの公式を使うバージョンのstanコードは以下です。

29~40行目でシンプソンの公式の係数だけ作っておきます。そうすると13~16行目で簡潔に書けます。 WAICの算出には、事前分布に由来する尤度は入れないと理解しているので、2~5行目の関数fで事前分布の項は入れていないです。

モンテカルロ積分を使うバージョンのstanコードは以下です。

45~49行目がモンテカルロ積分をしている部分です。あってると思っていますが、100%の自信はありません。

* * *

次に標準偏差にもグループ差を考慮したモデルを考えます。このモデルをmodel2と呼びます。この場合、積分消去する変数が2個になります。

シンプソンの公式を使うバージョンのstanコードは以下です。

標準偏差にグループ差が入ったため、2~5行目の対数尤度の関数fが変更されています。

2次元のシンプソンの公式はstackexchangeのこのページを参考にしました。

45行目で2次元のシンプソンの公式の係数を作っています。1次元のシンプソンの公式の係数ベクトルのテンソル積で作るのがラクです。15~20行目で簡潔に書けます。76行目、標準偏差は正の値しか取らないので下限として1e-8を使っています。

モンテカルロ積分を使うバージョンのstanコードは以下です。

51行目で半正規分布からs_rndを生成しています。正規分布から生成した乱数の絶対値を取れば半正規分布から生成した乱数になるので、fabs関数を使っています。

実行するRコードは以下です。model1が真の場合(Data 1)とmodel2が真の場合(Data 2)の両方でWAICを計算しました。

2次元の場合において、シンプソンの公式の分割数Mはおおよそ300あれば十分でした(300 x 300の分割)。モンテカルロ積分のシミュレーション数Mはおおよそ100000あれば十分でした。このあたりは問題によりけりと思います。

個人的には、積分消去する変数が3個以下ならばシンプソンの公式の方をおすすめしたいです。コードをそのまま使う場合や参考にした場合にはできれば引用をお願いしますね。

本記事は伊東さんとの議論がきっかけです。ありがとうございました。

『Rで学ぶ統計的データ解析』林賢一(著)の書評

統計家やデータサイエンティストを志す大学生・大学院生に読んでほしい、正統派の本です。 目次はこちら。コードを含むサポートページはこちら。類書としては『Rによる統計的学習入門』があります。

この本の特徴は、親しみやすい説明とRを実行する部分と、背景の数理を説明するガチの数理編の2パートから構成される点です。ふつうだと著者の能力の限界により前半パートだけ集めた本、あるいは後半パートだけ集めた本になりがちですが、そうはなっていません。数理を専門とする著者が、学生を指導する経験を通して書かれた教育的な本になっています。

Rを実行する部分は丁寧で、私も知らなかった関数や引数があり勉強になりました。特に好きだった章は以下です。

  • 2章 データの可視化と要約
  • 10章 ブートストラップ法
  • 11章 Rを用いたシミュレーション:数理統計学を「実感」する
  • それぞれの章末にある練習問題

早速2章に可視化を据えるところがいいですね。わたしも(機械学習を含む)データ解析においてはまずは可視化が重要と思っており、ここはRの独断場と思っています。ggplot2 の説明こそないですが、プログラミングに不慣れな大学生でも無理なく実行できるように基本的な関数で可視化の要所を抑えています。10章のブートストラップ法は数理の説明とRコードが対応していて分かりやすかったです。応用編にランダムフォレストの説明もあって良かったです。11章のシミュレーションでは、統計初心者が間違えがちな不偏性、サンプルサイズの計算などが簡潔なコードとともに説明されています。章末の練習問題は、考え方の復習とRによるデータ解析の練習場として非常に良いです。そのまま会社の新人に宿題として出したいです。

各章の数理編は格調高いです。かなり難しい部分もありました。査読した院生すごいです。『Rによる統計的学習入門』の数理的な説明にモヤっとしてた人にフィットします。統計学で行列がどのように使われるのか、どう役に立つのかをきちんと見せてくれます。ただし数式の変形は丁寧な部分と行間を読む必要がある部分があります。個人的には、数理編の説明をもとに実装した(パッケージを使わない)Rコードもあると勉強になっていいなぁと思いました。本の分量が倍ぐらいになってしまうかもですが。

enjoy!

Rによる 統計的学習入門

Rによる 統計的学習入門