読了:Treats, Sanchez, Vandebroek (2020) idefixパッケージであなたもベイジアン最適計画による離散選択実験ができる(なんなら個人レベル適応型の実験もできる)

Traets, F., Sanchez, D.G., Vandebroek, M. (2020) Generating Optimal Designs for Discrete Choice Experiments in R: The idefix Package. Journal of Statistical Software, 96(3).

 離散選択実験の実験計画を生成するRパッケージ idefix の解説。
 たしか昨年だったか、実践投入前の儀式として読んだのだが(なぜか出張先のホテルで)、バタバタしていてメモを取らなかった。中身をすっかり忘れてしまっているので、前半部分を読み直した。

1. イントロダクション

 離散選択実験(DCE)では表明された選好データを求め、なんらかの選択モデルを仮定して分析する。選択モデルはたいてい意思決定者が効用を最大化すると想定する。こういうモデルをランダム効用最大化モデル(RUMモデル)という。代表例は多項ロジットモデル(MNL), 混合ロジットモデル(MIXL)である。効用は選好の重みと属性の水準の関数であると仮定される(たいてい線形)。

 かつて選択実験の計画は一般線形モデルの計画に基づいてなされた。しかし選択モデルはたいてい非線形なので、次第にいろんな特性が考慮されるようになった。
 いまどきは直交計画じゃなくて最適計画が主流である。最適計画ではフィッシャー情報量の期待値を最大化する。未知パラメータに依存しちゃうので、パラメータの真値についての不確実性を事前分布として表現するベイジアン効率計画が使われるようになった。もっとも事前分布の誤指定に敏感だという批判もある。Walker, Wang, Thorhauge, Ben-Akiba (2018 Theory & Decision)をみよ。
 さらに系列デザインとか個人レベル適応型系列ベイジアンデザイン(IASB)というのも登場した。実査の途中で事前のguessを更新していくわけである。系列効率デザインでは対象者のあいだで計画を変えていき、IASBではある対象者の実査中にその対象者の計画をつくる。Blimer & Rose (2010 in Hess&Daly), You, Goos, & Vandebroek (2011 IJRM), Crabbe, Akinc, Vandebroek(2014 Transp.Res.)をみよ。

 さて、RにはそもそもDCEのための最適計画をつくるパッケージがなかった。AlgDesやOptimalDesignはあるけど非線形モデルを考慮してない。support.CEsはDCEのための直交主効果行列をつくれるけど最適計画はつくれない。choiceDes(AlgDesに依存)は線形モデルのD-最適計画を作れるけど未知パラメータへの依存性を説明してないしalternative specific制約を掛けられない。もっとも、線形モデルの最適計画は、パラメータの真値がゼロだと仮定するならMNLでも最適だけど。
 というわけで、idefixパッケージを作ったので使うがよい。親切なことに、bayesm, ChoiceModelR, RSGHB, mlogit, RChoiceといった既存の推定用パッケージ向けのデータ変換機能も用意しておる。

2. 適切な事前分布を指定するためのガイドライン

 リサーチャーはパラメータの値について事前にある程度の信念を持っていることが多いが、それでも、なんらか情報を集めて事前の信念を評価することを勧める。
 事前に情報を集める方法を挙げよう。

  • 文献を調べる。交通の研究ならvalue of timeについての実験が山ほどあるし、環境経済学なら資源保護のための支払意思額を調べた実験が山ほどある。
  • パイロット研究をやる。
  • 専門家に訊いたり、フォーカスグループをやる。

 得られた事前情報をどうやって定量化するか。
 D-最適計画なら点推定、ベイジアンD-最適計画なら事前分布を指定すればよい。後者をお勧めする。
 事前分布はそこからドローしやすい分布にしておくことをお勧めする。正規分布とか切断正規分布とか一様分布とか対数正規分布とか。たとえば、価格の真の係数が-2と0の間のどこかにある、その間のどこにあるのも等しくもっともらしい、というのであれば \(\beta \sim U(-2, 0)\)とする。まったくノーアイデアならば平均ゼロでSDが大きい正規分布にすればいいだろう。
 まずは真の値の上界と下界について考えるといいよ。上界と下界しかわかんないんだったら一様分布、どっちかしかわかんないんだったら切断正規分布、もうちょっと推測できるんならbest guessを平均にした正規分布がいいんじゃないかな。

 事前分布が合理的かどうかを調べるには、単に出来上がった計画を評価すればよい。たとえば、「移動時間が4時間、価格が10$」という選択肢と「移動時間が2時間、価格が2$」という選択肢が同じ確率で出てくるようだったら、それはあきらかにおかしい。
 [分析の例。面白そうなんだけど、いまちょっと時間がないので省略]

3. MNLモデルのためのD(B)-最適計画

 もっとも広く使われている選択モデルは多項ロジットモデルである。意思決定者を\(n\)、選択肢集合を\(s\)、選択肢を\(k\)、属性の水準を表すベクトル(長さ\(p\))を\(x_{ksn}\)として、効用は $$ U_{ksn} = x^\top_{ksn} \beta + \epsilon_{ksn}$$ \(\epsilon_{ksn}\)は独立にGumbel分布に従うとする。選択確率は$$ p_{ksn}(\beta) = \frac{\exp(x^\top_{ksn} \beta)}{\sum_i \exp(x^\top_{isn} \beta)} $$ \(\beta\)は最尤法で推定する。

 さて、所与の標本サイズの下でパラメータ推定値の信頼楕円が小さい計画のことを効率的な計画という。ある計画が持っている情報は、フィッシャー情報行列の期待値を求めることで得られる。尤度を\(L\)として $$ I_{FIM} = -E \left( \frac{\partial^2 L}{\partial \beta \partial \beta^\top}\right)$$ MNLの場合は、対象者数を\(n\), 選択肢集合\(s\)の計画行列を\(X_s\)[行\(i\)が\(x_{ikn}\)ね], \(p_s = [ p_{1sn}, \ldots, p_{Ksn}]^\top\), \(p_s\)を持つ対角行列を\(P_s\)として、$$ I_{FIM}(\beta | X) = N\sum_s X^\top_s (P_s – p_s p^\top_s) X_s$$ 情報行列に基づく効率性指標はいろいろあるが、標準的なのはD-効率性である。D-最適計画では情報行列の行列式を最大化する(つまりパラメータ推定値の一般化分散を最小化する) [共分散行列の行列式のことを一般化分散というらしい]。$$ \Omega = I_{FIM}(\beta | X)^{-1}$$ $$ \mathrm{D-error} = det (\Omega)^{1/p} $$ とする。

 D-誤差はモデルとパラメータの値に依存する。そこで、事前分布\(\pi(\beta)\)を定義し、それを通じたD-誤差の期待値を考える。これをDB-誤差という。[あ、Bってベイジアンの略なのね。いま気が付いた…] $$ \mathrm{DB-error} = \int det(\Omega)^{1/p} \pi(\beta) d\beta$$
 DB-誤差のような基準を最小化する計画をどうやってみつけるか。いろんなアルゴリズムがあるんだけど、我々は修正Fedorov交換アルゴリズム(ModFed関数)と座標交換アルゴリズム(CEA関数)を実装した。前者は、初期の計画行列のプロファイルを交換しD(B)-誤差を最小化する。後者は、個々の属性水準を変えていく。

[ここから idefixパッケージでMNLモデルの最適デザインを作る方法。メモ省略]

4. 個人レベル適応型系列的ベイジアン計画
[すごく関心あるんだけど、ちょっといま読んでる時間がないな… スキップ]

5. idefixを使った実際の調査
[idefixパッケージにはshinyでIASBによる実査をやる機能がついているのである。すごい。スキップ]

6. Data management
[idefixのデータ管理機能の紹介。スキップ]

7. 今後の展開
[略]
———
 勉強になりますです…

 話はちがうんだけど、恥ずかしながら、以前から疑問に思っていることをメモしておく。
 最適計画アプローチかどうかは別にして、コンジョイント分析では対象者ごとに実験計画をつくることが多い。たとえばSawtooth SoftwareのCBCは、いくつかのアルゴリズムをつかって実験計画を対象者ごとに生成する(属性間の直交性や水準間の釣り合いを極力維持するような生成アルゴリズムだというだけであって、最適計画アプローチとはいえないと思う)。仮に紙とえんぴつで実査する場合でも、調査ブックレットのいくつかのバージョンをつくることが推奨されている。
 最適計画アプローチに従い、効率性の高い実験計画を選んで使うとして、個々の計画の効率性と、計画が対象者間で異なることのどちらを優先すべきだろうか? 計画の効率性をD(B)-誤差といった形で定量化したところで、それはあくまで、効用の撹乱項がIIDで選択がMNLモデルに合っているときの効率性である。実際にはある実験計画において運悪く生じる系統的な誤差もあるだろう(想定していない高次交互作用とか)。その辺を考慮すると、多少効率性が悪い計画が混じったとしても、計画を対象者間で変動させていくことのほうが大事だ、という面があるのではないかと思うのである。
 仮に計画の効率性を優先するなら、Fedorov交換アルゴリズムかなんかでD(B)-誤差が最小である必殺の実験計画をひとつ作り、選択肢集合の提示順と選択肢の提示位置をランダマイズしつつ全員についてその実験計画を使うのがよいことになろう。計画の多様性を優先するなら、可能な限りたくさんの実験計画を探索し、D(B)-誤差がそこそこ低い実験計画を対象者の数だけ引っ張ってきて、対象者ごとに実験計画を使い捨てるのが良いことになろう。
 おそらく真に最適な方略は、上記の両極の中間のどこかにあるのではないかと思う。直観に過ぎないが、そのバランスは、累積レベル効用を推定する場合と、個人レベル効用を階層ベイズ推定する場合とでも異なるのではないか、という気がする。後者のほうが個々の計画の効率性が大事になるような気が… いや、待て、逆かな?
 この辺、なにか実務家向けのアドバイスはないものかしらん。毎度毎度シミュレーションして確かめるしかないのかなあ。