正規分布のベイズ推定で共分散行列の(共役)事前分布として使われる逆Wishart分布(→ wikipedia:en)というものがありますが、あまりイメージしにくかったので図にしてパラメータの変化がどのような違いをもたらすか調べてみました。
といっても逆Wishart分布は n x n 行列を値にとる確率分布なので、2×2 行列を考えても3次元なので(※対称行列)そのままプロットするとわかりにくい。そこで ellipse パッケージを使って可視化してみます。
ellipse パッケージ
ellipse パッケージの ellipse 関数は入力された 2×2 行列を共分散行列だと思って、level引数で与えられた信頼楕円の座標の集合を返すような関数です。例えば以下のようなサンプル:
library(ellipse) library(MASS) # 多変量正規分布をランダムサンプリング mu <- c(0,0) Sigma <- matrix(c(3,2,2,3),nc=2) X <- mvrnorm(300,mu,Sigma) # 90% 信頼楕円の生成 ellp <- ellipse(Sigma,level=0.9) # プロット plot(X,pch=20,xlab="",ylab="",xlim=c(-5,5),ylim=c(-5,5)) lines(ellp,col=2,lw=2) dev2bitmap("ellipse_package.png")
上の図のような感じで正規分布のサンプルと同じような形の楕円を簡単に書くことができます。
逆Wishart分布を図示
前置きが長くなりました。逆Wishart分布は2つのパラメータ \(\nu, \Sigma_0\) を持ちます。MCMCpack パッケージに riwish という逆Wishart分布を発生させる関数があるのでそれを使うことにします。
まずは \(\Sigma_0\) を対角行列 \(sI\) に限定して、\(\nu, s\) を適当に動かしてみることにします。赤線が逆Wishart分布からのサンプルで、青線が \(\Sigma_0\) を図示したものです。
以上より、
- 小さな \(s\) は分散の小さな共分散行列を生成し、大きなものは分散の大きな共分散行列を生成する、
- 小さな \(\nu\) はサンプリングされる共分散行列の相関が強いものが多く見られる(多様性がある)、一方、大きな \(\nu\) はもとの \(\Sigma_0\) の形をある程度保つ、
ということがわかります。
次に、正の相関を持つ共分散行列:
\begin{align*}
\Sigma_0=
s\begin{bmatrix}
1&0.8\\
0.8&1
\end{bmatrix}
\end{align*}
を考えて、同様に \(\nu, s\) を適当に動かしてみます。
この図より
- 正の相関を持った共分散行列が多く生成される傾向が強い、
- 先程と同様、小さな \(s\) ほど分散の小さな共分散行列を生成し、大きなものは分散の大きな共分散行列を生成する、
- 先程と同様、小さな \(\nu\) ほど大きな多様性を生み出す
ことがわかりました。
ベイズ推定のハイパーパラメータ
以上を踏まえて、逆Wishart分布を共分散行列の事前分布とするときのレシピを考えてみました:
- 相関に関する事前情報がないときは対角行列を、非対角要素に情報があればゼロ以外の値を設定する
- \(\nu\)の値としては小さい値を設定して、多様性が大きく(バラつきが大きく)なるように設定する?
- 行列のスケール定数は小さく設定したほうがいい?
ただし下の2つに関しては、ケースバイケースだと思います。サンプル数が少ない場合、不安定な推定になるような気もします。
このあたり今度実験してみます。