Path: blob/master/site/ja/probability/examples/HLM_TFP_R_Stan.ipynb
25118 views
Copyright 2018 The TensorFlow Probability Authors.
Licensed under the Apache License, Version 2.0 (the "License");
{TF Probability、R、Stan} における線形混合効果回帰
1 はじめに
このコラボでは、線形混合効果回帰モデルを人気のあるトイデータセットに適合させます。R の lme4
、Stan の混合効果パッケージ、および TensorFlow Probability (TFP) プリミティブを使用して、これを 3 回適合させます。そして、これらからほぼ同じ適合パラメータと事後分布を得られることを示します。
主な結論として、TFP には HLM のようなモデルを適合させるために必要な一般的な要素があり、lme4
や rstanarm
などの他のソフトウェアパッケージと一致する結果を生成します。このコラボは、比較したパッケージの計算効率を正確に反映したものではありません。
2 階層線形モデル
R、Stan、TFP を比較するために、階層線形モデル (HLM) をラドンデータセットに適合させます。このデータセットはゲルマンら (559 ページ、第 2 版、250 ページ、第 3 版) によるベイジアンデータ分析で有名になったものです。
次の生成モデルを前提としています。
R の lme4
「チルダ表記」では、このモデルは次と同等です。
log_radon ~ 1 + floor + (0 + log_uranium_ppm | county)
の事後分布 (証拠を条件とする) を使用して、 の MLE を見つけます。
3 データマンジング
このセクションでは、radon
データセットを取得し、想定されるモデルに準拠するように最小限の前処理を行います。
3.1 データを調査する
このセクションでは、提案されたモデルが合理的である理由を理解するために、radon
データセットを調べます。
結論:
85 の郡のロングテールがあります (GLMM でよく発生します)。
には制約がありません (したがって、線形回帰は理にかなっているかもしれません)。
測定はほとんど 階で行われます。 より上の階では測定は行われませんでした (したがって、固定効果には 2 つの重みしかありません)。
4 R を使用して HLM を適合させる
このセクションでは、R の lme4
パッケージを使用して、上記の確率モデルを適合させます。
注意: このセクションを実行するには、R colab ランタイムに切り替える必要があります。
5 Stan を使用して HLM を適合させる
このセクションでは、rstanarm を使用して、上記の lme4
モデルと同じ式/構文を使用して Stan モデルを適合させます。
lme4
や以下の TF モデルとは異なり、rstanarm
は完全なベイズモデルです。つまり、すべてのパラメータは正規分布から引き出され、パラメータ自体は分布から引き出されていると推定されます。
注意: このセクションを実行するには、R
colab ランタイムに切り替える必要があります。
注意: ランタイムは単一の CPU コアからのものです。(このコラボは、Stan または TFP ランタイムを忠実に表現することを目的としたものではありません。)
注意: Python TF カーネルランタイムに切り替えます。
後で視覚化するために、lme4 からグループ変量効果の点推定と条件付き標準偏差を取得します。
lme4 の推定平均と標準偏差を使用して、郡の重みのサンプルを抽出します。
また、Stan の適合から郡の重みの事後サンプルを取得します。
この Stan の例は、確率モデルを直接指定することにより、TFP に似たスタイルで LMER を実装する方法を示しています。
6 TF Probability を使用して HLM を適合させる
このセクションでは、低レベルの TensorFlow Probability プリミティブ (Distributions
) を使用して、階層線形モデルを指定し、不明なパラメータを適合させます。
6.1 モデルの指定
このセクションでは、TFP プリミティブを使用してラドン線形混合効果モデルを指定します。これを行うには、2 つの TFP 分布を生成する 2 つの関数を指定します。
make_weights_prior
: ランダムな重みの多変量正規分布 (線形予測子を計算するために を掛けます)。make_log_radon_likelihood
: 観測された各 従属変数にわたるNormal
分布のバッチ。
これらの各分布のパラメータを適合するため、TF 変数 (tf.get_variable
) を使用する必要があります。ただし、制約なしの最適化を使用したいので、必要なセマンティクスを実現するために実数値を制約する方法を見つける必要があります (例: 標準偏差を表す正の値)。
次の関数は、事前 の を作成します。ここで、 は変量効果の重みを示し、 は標準偏差を示します。
tf.make_template
を使用して、この関数の最初の呼び出しで使用する TF 変数がインスタンス化され、その後のすべての呼び出しで reuse 変数の最新の値がインスタンス化されるようにします。
次の関数は、尤度 を作成します。ここで、 は応答と証拠を示し、 は固定効果と変量効果の重みを示し、 は標準偏差を示します。
ここでも、tf.make_template
を使用して、TF 変数が呼び出し間で再利用されるようにします。
最後に、事前と尤度生成器を使用して、同時対数密度を構築します。
6.2 トレーニング (期待値最大化の確率的近似)
線形混合効果回帰モデルを適合させるために、期待値最大化アルゴリズム (SAEM) の確率的近似バージョンを使用します。基本的な考え方は、事後のサンプルを使用して、予想される同時対数密度 (E ステップ) を概算することです。次に、この計算を最大化するパラメータを見つけます (M ステップ)。具体的には、不動点イテレーションは次の式で取得できます。
ここで、 は証拠、 は無視する必要のある潜在変数、および の可能なパラメータ化を示します。
詳細については、次を参照してください。Convergence of a stochastic approximation version of the EM algorithms by Bernard Delyon, Marc Lavielle, Eric, Moulines (Ann. Statist., 1999)。
E ステップを計算するには、事後からサンプリングする必要があります。事後分布からサンプリングをすのは簡単ではないため、ハミルトニアンモンテカルロ (HMC) を使用します。HMC は、非正規化された事後対数密度の勾配 (パラメータではなく、wrt 状態) を使用して新しいサンプルを提供するマルコフ連鎖モンテカルロ法の手順です。
正規化されていない事後対数密度を指定するのは簡単です。これは、条件付けする「固定」された同時対数密度にすぎません。
これで、HMC 遷移カーネルを作成して E ステップのセットアップを完了しました。
注意:
state_stop_gradient=True
を使用して、M ステップが MCMC からの抽出を介してバックプロパゲーションするのを防ぎます。(E ステップでは前の最もよく知られている推定量で意図的にパラメータ化されているため、バックプロパゲーションを行う必要はありません。)tf.placeholder
を使用して、最終的に TF グラフを実行するときに、前のイテレーションのランダム MCMC サンプルを次のイテレーションのチェーンの値としてフィードできるようにします。TFP の適応型
step_size
ヒューリスティック、tfp.mcmc.hmc_step_size_update_fn
を使用します。
ここで、M ステップを設定します。これは基本的に、TF で行うことのある最適化と同じです。
最後に、いくつかのハウスキーピングタスクを実行します。すべての変数が初期化されていることを TF に通知する必要があります。また、TF 変数へのハンドルを作成して、プロシージャの各イテレーションでそれらの値を print
できるようにします。
6.3 実行
このセクションでは、SAEM TF グラフを実行します。ここで重要な点は、HMC カーネルからの最後のものを次のイテレーションにフィードすることです。これは、feed_dict
呼び出しで sess.run
を使用することで実現されます。
約 1500 ステップ後、パラメータの推定値は安定しました。
6.4 結果
パラメータを適合させたので、多数の事後サンプルを生成して結果を調べてみます。
次に、 変量効果の箱ひげ図を作成します。郡の頻度を減らして、変量効果を並べ替えます。
この箱ひげ図から、郡レベルの 変量効果の分散は、データセットにある郡のデータが少ない場合に増加することがわかります。直感的には、これは理にかなっています。証拠が少ない場合は、特定の郡の影響について確信が持てません。
7 並べて比較する
次に、3 つの手順すべての結果を比較します。これを行うために、Stan と TFP によって生成された事後サンプルの非パラメータ推定値を計算します。また、R の lme4
パッケージによって生成されたパラメトリック (概算) 推定値と比較します。
次のプロットは、ミネソタ州の各郡の各重みの事後分布を示しています。Stan (赤)、TFP (青)、および R のlme4
(オレンジ) の結果を示します。Stan と TFP の結果をシェーディングするため、2つ が一致すると紫色になると予想されます。簡単にするために、R からの結果はシェーディングしません。各サブプロットは単一の郡を表し、ラスタースキャンの順序で頻度の降順で並べられます (つまり、左から右、次に上から下)。
8 結論
このコラボでは、線形混合効果回帰モデルをラドンデータセットに適合させました。R、Stan、TensorFlow Probability の 3 つの異なるソフトウェアパッケージを試し、3 つの異なるソフトウェアパッケージによって計算された 85 の事後分布をプロットしました。
付録 A:代替のラドン HLM (ランダム切片の追加)
このセクションでは、各郡に関連付けられたランダム切片も持つ代替 HLM について説明します。
R の lme4
「チルダ表記」では、このモデルは次と同等です。
log_radon ~ 1 + floor + (1 + log_county_uranium_ppm | county)
付録 B: 一般化線形混合効果モデル
このセクションでは、本文で使用されているものよりも、階層線形モデルのより一般的な特性を示します。このより一般的なモデルは、一般化線形混合効果モデル (GLMM) として知られています。
GLMM は、一般化線形モデル (GLM) を一般化したものです。GLMM は、サンプル固有のランダムノイズを予測線形応答に組み込むことにより、GLM を拡張します。これは、まれな特徴がより一般的な特徴と情報を共有できるため、便利なこともあります。
生成プロセスとして、一般化線形混合効果モデル (GLMM) は次の特徴があります。
ParseError: KaTeX parse error: Expected 'EOF', got '#' at position 70: …e{2.45cm}\text{#̲ for each rando…ここでは、それぞれ以下を意味します。
$$ \begin{align} R &= \text{number of random-effect groups}\ |C_r| &= \text{number of categories for group $rParseError: KaTeX parse error: Expected 'EOF', got '}' at position 1: }̲\ N &= \tex…riParseError: KaTeX parse error: Expected 'EOF', got '}' at position 10: th sample}̲\ z_{r,i} &…rParseError: KaTeX parse error: Expected 'EOF', got '}' at position 1: }̲\ \Sigma_{r} &a…$
つまり、これは、各グループのすべてのカテゴリが iid MVN、 に関連付けられていることを意味します。 の抽出は常に独立していますが、グループ に対してのみ同じように分散されます。 ごとに 1 つの があることに注意してください。
サンプルのグループの特徴である と密接に組み合わせると、結果は 番目の予測線形応答 (それ以外の場合は ) のサンプル固有のノイズになります。
を推定する場合、基本的に、変量効果グループがもつノイズの量を推定します。そうしないと、 に存在する信号が失われます。