Skip to content

初版第1刷:411~413ページ WAICの計算に関する誤植かも情報です #44

Description

@napier3ds

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から情報を得て、(つぎはぎですが)なんとか懸念を文章化しました。
誤り(もしくは誤解や粗雑さ)を含んでいるかもしれないことを申し添えます。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions