#統計 私は、WAICユーザーの大部分がWAICを誤用している疑いがある血思っています。

ベイズ統計ユーザーの多くは階層化されたモデルを使っていると思います。その場合には内部パラメータで積分してWAICを求める必要があります。手動でそうする必要があるし、計算量も大きく増える。
#統計 日本はWAICの発祥地なので(笑)、日本語圏ではWAIC(やLOOCV)の誤用に関する情報を手に入れ易い。

いれいさんもWAICを簡単に誤用できることと、誤用せずに済ませることが大変なことに気付いている。
#統計 HiroさんもWAICの誤用に気付いている。

Stanのような確率プログラミング言語で記述される「モデル」の情報(よくグラフィカルモデルで表現される)だけでは、予測分布が一意に決まらず、汎化誤差もWAICも確定しない。

通常の場合には「周辺化」版予測分布を使わないとアウト。
#統計 昔の松浦さんのブログ記事

statmodeling.hatenablog.com/entry/waic-wit…

では、Stanに数値積分が実装される前だったので、自前でシンプソン則で自前で数値積分していますが、今ならもっと簡単にできるかもしれません。

私は #Julia言語 で数値積分のパッケージを使って計算したことならある。
#統計 階層モデル

y_i ~ p₁(•|z_i) (i=1,…,n)
z_i ~ p₂(•|w) (i=1,…,n)
w ~ p₃(•)



p(y_i|w)=∫p₁(y_i|z_i)p₂(z_i|w)dz_i

のときの

y_i ~ p(•|w) (i=1,…,n)
w ~ p₃(•)

に等価。後者ならWAICの誤用はない。後者に直してWAICを計算する必要がある。数値積分が必要になる。
#統計 逆温度β=1/log nの場合と逆温度β=1の場合の事後分布は別なので、「単純に同時に計算させる」以外の方法でWBICとWAICを同時に精度良く計算する方法はないと思います。

2つの逆温度のモデルの直積をStanに計算させれば一応まとめて計算はできるが、「単純に同時に計算させる」のと同じ。
訂正

❌疑いがある血思っています。

⭕️疑いがあると思っています。

ti → 血
to → と

の違い。 uioはキーボードで隣にある。
#統計 別スレにも書きましたが、複雑な階層モデル(グラフィカルモデル)の場合には内部パラメータについて数値積分するのがしんどすぎるので、予測分布のサンプルを使った統計的検定(P値)の利用も検討した方が良いかもしれません。

私はど素人なので「素人の戯言」になっていたらごめんなさい。
#統計 普及しているMCMC法だと確率分布のi.i.d.サンプルを得ることは容易なのですが、確率分布の密度函数を得るためには数値積分が必須になる場合が出て来てます。

WAICやWBICは階層モデルの場合に数値積分必須になる。

一方、P値ならばサンプルのみから容易に近似計算可能。
#統計 ああ、なるほど、私が #Julia言語 のTuring.jl でMCMCを実行した後に、それとは無関係の数値積分のパッケージで数値積分したり、Threads. @ threads でお手軽並列化しているのと、結果的に手順が似ていると思いました。

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with 黒木玄 Gen Kuroki

黒木玄 Gen Kuroki Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @genkuroki

12 Nov
#数楽 個人的な体験談

解析力学→正準量子化
量子力学→古典極限

について、ツイッター上で物理学的な議論になっているように見えますが、私は物理と無関係に数学として面白ければよい(面白くなければいけない)という立場なので、物理学的な議論とは別の話をしたいと思います。続く
#数楽 私はずっと(佐藤幹夫の意味での)τ函数の量子化をどのようにすればよいかについて考えていました。

ソリトン系は無限自由度系なので大変過ぎるので、その相似簡約として出て来るパンルヴェ系(所謂パンルヴェ方程式達の大幅な一般化)の"τ"の量子版の構成について考えることにしました。続く
#数楽 パンルヴェ系はLax形式ではモノドロミー保存系とみなせ、モノドロミー保存系は2次元量子共形場理論の共形ブロックの理論の古典極限とみなせ、私は共形ブロックの数学的理論の専門家だったので、自分にとって情報量の大きそうな部分を攻めるとよいと思いました。続く
Read 31 tweets
12 Nov
#Julia言語

C++は避けるべき。

できあいの統計関連のライブラリやパッケージを主に使うなら、Rが多分良くて、Pythonも良いと思います。

サンプルコードでアルゴリズムも示したいならば、ほぼJulia一択だと思います。

実際、須山敦志さんはJuliaを早くから使い始めて大成功しているように見える。
#Julia言語

machine-learning.hatenablog.com/search?q=Julia
で須山さんによるJuliaを利用した確率統計の学び方を知ることができる。Juliaは高速かつ強力かつ気楽に使えるので、試しに自力実装するのに非常に向いている。

amazon.co.jp/dp/4065259800
Juliaで作って学ぶベイズ統計学 (KS情報科学専門書)
2021/11/26
須山敦志
#統計 #Julia言語

コインを20回投げたときの表が出る回数の分布は正規分布で近似される。

Juliaのコードがシンプルであること、確率分布を意味するオブジェクトを作って、確率函数、乱数、プロットで使えること、などに注目!

nbviewer.org/github/genkuro…
Read 26 tweets
12 Nov
子供のときに「くもわ図」や「きはじ図」「みはじ図」「はじき図」「木の下のハゲじじい図」(笑)で問題を解くことを教える先生に当たった人は、大人になった自分自身がそれで不自由を感じていなくても、「運が悪かった。そのような教え方は子供を害する」と思っておく必要があります。
❌「くもわ図」や「きはじ図」には算数が苦手な子を救う効果があるので、算数が苦手な子には「くもわ図」や「きはじ図」を教え込もう

と考えるのは非常にまずいです。

子供を害する(子供の頭を悪くする)教え方を、特に算数が苦手な子にはする習慣になると、その子が救われることがなくなる。😭
算数が苦手な真の原因は「公式を暗記できないこと」ではなく、「算数だと常識に沿って考えることができなくなる」や「計算が苦手」な場合が多いと思います。

計算が苦手でも常識に沿って考えることができてかつ公式の使用を強制されなければ問題を解ける場合が増えます。続く
Read 8 tweets
11 Nov
#統計 slideshare.net/simizu706/waic を見ているのかな?

もしもそうなら松浦健太郎さんの

statmodeling.hatenablog.com/entry/waic-wit…
階層ベイズモデルとWAIC

が参考になると思います。StanやRの世界が当時より進歩しているので、もっと良い方法があるかもしれませんが、WAICの実装での考え方を学ぶことができます。
#統計 階層モデル(階層ベイズ)関連
#統計 階層モデル(階層ベイズモデル)達のモデル選択は結構大変だよという話関連。Stanなどの確率プログラミング言語で記述される「モデル」の情報だけから、予測分布の定義は確定しないので、情報量規準による予測精度の推測によるモデル選択は注意を要する。
Read 16 tweets
11 Nov
#超算数 かけ算順序問題について教育関係者の多くは「順序が逆なだけでバツにするのは好ましくない」と言います。

しかし、本音では「4人に3本ずつ鉛筆を配る場面で4×3と式を書く子はかけ算の意味を理解していない」と思っており、児童にかけ算の順序を教え込まなければいけないと思っていたりする。
#超算数 質問の内容は可能な限り具体的なものにする必要があります。

例えば、添付画像1のように聞いてみるとよいかもしれません。

「②の式を2×5にする子も問題なくかけ算を理解しているとどの先生も思っている」言ってもらえたらやっと信用できます。

続く Image
#超算数

教科書出版社側は②で5×2としなければいけないことを教え込むためにこの問題を載せています。添付画像1の教科書のマニュアル本の記述を見て下さい。

そしてそういう問題を出す直前のページで交換法則が一般的に成立している理由を教える構成になっています(添付画像2)。 ImageImage
Read 13 tweets
10 Nov
#Julia言語 デフォルトのコンストラクタ:

struct Kuma{T}
p::Tuple{T, T}
end

とするだけで、デフォルトのコンストラクタ達

* Kuma(p::Tuple{T, T}) where T
* Kuma{T}(p) where T

が定義され、後者は引数の型変換も行なってくれる。

多くの場合にこれで十分。

github.com/genkuroki/publ… Image
#Julia言語 struct ~ end の内側に自前のコンストラクタの定義を書くと(内部コンストラクタを定義すると)、それらのデフォルトのコンストラクタは定義されなくなります。

複雑な内部コンストラクタが沢山書いてあるコードは読み難いの出注意。 Image
#Julia言語 デフォルトのコンストラクタを破棄したい理由がある場合や、`new`を使わないとできないことをやる場合以外に、内部コンストラクタは無理に使わない方が良いと思う。

使う場合にも内部コンストラクタの個数はできるだけ少なくするべき。

公式ドキュメント
docs.julialang.org/en/v1/manual/c… Image
Read 4 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Thank you for your support!

Follow Us on Twitter!

:(