WAICの式(9.21)とarviz.waicの出力結果との間に、もしかすると齟齬があるかもしれないので、懸念を共有いたします。
1. 数式の確認
標準的な WAIC(基準形、Gelman ら(BDA3)の定義)を
$$
\text{WAIC}_{\text{std}}
= -2\left(
\underbrace{
\sum_{i=1}^N
\log \frac{1}{L} \sum_{t=1}^L p(y_i \mid \theta_t)
}_{\text{lppd}} - \underbrace{
\sum_{i=1}^N \mathrm{Var}_t[\log p(y_i \mid \theta_t)]
}_{p_{\text{WAIC}}}
\right)
$$
とし、arviz.waicとの議論のベースにします。
また、式(9.21)の右辺第二項の符号を「 $-$ 」に置き換えた次式を式(9.21改)として用います。
$$
\text{WAIC}_{\text{book}} = -\cfrac{1}{2} \left(
\underbrace{\sum_{i=1}^N \log \Big( \frac{1}{L} \sum_{t=1}^L p(y^{(i)} \mid \boldsymbol{x}^{(i)} \boldsymbol{\theta}^{(t)}) \Big)}_{\text{lppd}} \textcolor{red}{-}
\underbrace{\sum_{i=1}^N V_{t=1}^L \big[\log p(y^{(i)} \mid \boldsymbol{x}^{(i)} \boldsymbol{\theta}^{(t)}) \big]}_{p_{\text{WAIC}}} \right)
$$
式(9.21改)を整理します。
$$
\text{WAIC}_{\text{book}}
= -\frac{1}{2}(\text{lppd} - p_{\text{WAIC}})
= \frac{1}{4}
\Big(-2(\text{lppd} - p_{\text{WAIC}})
\Big)
$$
式(9.21改)と基準形は次の関係になります。
$$
\text{WAIC}_{\text{book}}
= \cfrac{1}{4}\ \text{WAIC}_{\text{std}}
$$
2. arviz.waic の出力
arviz.waic は scale 引数 に従って、出力値が変わります。
直感的には az.waic(trace, scale='deviance') の出力結果が $\text{WAIC}_{\text{std}}$ に相当します。
引数、出力値、出力値とWAICの関係を表形式で整理します。
| ArviZ の scale 引数 |
出力名 |
出力値 |
$\text{WAIC}_{\text{std}}$ にするには |
$\text{WAIC}_{\text{book}}$ にするには |
| "log"(デフォルト) |
elpd_waic |
$\text{elpd} = \text{lppd} - p_{\text{WAIC}}$ |
出力値 $\times -2$
|
出力値 $\times -1/2$
|
| "negative_log" |
-elpd_waic |
$-(\text{lppd} - p_{\text{WAIC}})$ |
出力値 $\times 2$
|
出力値 $\times 1/2$
|
| "deviance" |
deviance_waic |
$-2(\text{lppd} - p_{\text{WAIC}})$ |
出力値 |
出力値 $\times 1/4$
|
なお、"log" の出力値 elpd_waic は Watanabe原論文 / Vehtari et al. の定義に沿うものであり、arviz は Vehtari らの流儀に従い、scale='log' をデフォルトとしているそうです。
3. 書籍の記述の懸念
コード 9.21「WAICの計算」が scale = "log"(デフォルト)の出力値「elpd」を表示しており、WAIC:式(9.21改)を計算していない点が問題になり得ます。
WAICを基準形で考える場合には、①コード 9.21 を waic = az.waic(trace, scale="deviance") に変更する案、②数式上のWAICでは無くarvizデフォルトの elpd_waic を表示していることの補足を追加する案、といった対応案があると思われます。
一方で、式(9.21)もしくは式(9.21改)を踏襲する場合には、①コードを変更するとともに数式と出力値の違いを説明する案、②WAICの数式とは異なる elpd_waic を表示していることの補足を追加する案、が対応案になるかもしれません。後続の LOO との関係も維持しつつ、対応が練られるものと想像いたします。
ちなみに、arviz v1.0 で waic は削除された模様です。
公式サイトでご確認下さい。
https://python.arviz.org/en/latest/user_guide/migration_guide.html#model-comparison
お断り
私は統計や数学の専門家ではないため、複数のWEBサイトと複数の生成AIから情報を得て、(つぎはぎですが)なんとか懸念を文章化しました。
誤り(もしくは誤解や粗雑さ)を含んでいるかもしれないことを申し添えます。
WAICの式(9.21)とarviz.waicの出力結果との間に、もしかすると齟齬があるかもしれないので、懸念を共有いたします。
1. 数式の確認
標準的な WAIC(基準形、Gelman ら(BDA3)の定義)を
とし、arviz.waicとの議論のベースにします。
また、式(9.21)の右辺第二項の符号を「$-$ 」に置き換えた次式を式(9.21改)として用います。
式(9.21改)を整理します。
式(9.21改)と基準形は次の関係になります。
2. arviz.waic の出力
arviz.waic は scale 引数 に従って、出力値が変わります。$\text{WAIC}_{\text{std}}$ に相当します。
直感的には
az.waic(trace, scale='deviance')の出力結果が引数、出力値、出力値とWAICの関係を表形式で整理します。
なお、"log" の出力値 elpd_waic は Watanabe原論文 / Vehtari et al. の定義に沿うものであり、arviz は Vehtari らの流儀に従い、scale='log' をデフォルトとしているそうです。
3. 書籍の記述の懸念
コード 9.21「WAICの計算」が scale = "log"(デフォルト)の出力値「elpd」を表示しており、WAIC:式(9.21改)を計算していない点が問題になり得ます。
WAICを基準形で考える場合には、①コード 9.21 を
waic = az.waic(trace, scale="deviance")に変更する案、②数式上のWAICでは無くarvizデフォルトの elpd_waic を表示していることの補足を追加する案、といった対応案があると思われます。一方で、式(9.21)もしくは式(9.21改)を踏襲する場合には、①コードを変更するとともに数式と出力値の違いを説明する案、②WAICの数式とは異なる elpd_waic を表示していることの補足を追加する案、が対応案になるかもしれません。後続の LOO との関係も維持しつつ、対応が練られるものと想像いたします。
ちなみに、arviz v1.0 で waic は削除された模様です。
公式サイトでご確認下さい。
https://python.arviz.org/en/latest/user_guide/migration_guide.html#model-comparison
お断り
私は統計や数学の専門家ではないため、複数のWEBサイトと複数の生成AIから情報を得て、(つぎはぎですが)なんとか懸念を文章化しました。
誤り(もしくは誤解や粗雑さ)を含んでいるかもしれないことを申し添えます。