ギブスサンプリング

統計学と統計物理学において、**ギブスサンプリング**（）は、直接サンプリングが難しい確率分布の代わりにそれを近似するサンプル列を生成するMCMC法（）の1つである。この生成された数列は、同時分布や周辺分布や期待値などの積分計算を近似するために用いられる。通常は観測として与えられている変数に関してはサンプリングをする必要はない。ギブスサンプリングは統計的推定やベイズ推定の手法として頻繁に用いられている。ランダムアルゴリズムであり、（）やEMアルゴリズム（expectation-maximization algorithm）のような統計的推定法のための決定論的な方法の代替法である。

他のMCMC法と同様に、ギブスサンプリングはサンプルのマルコフ連鎖を生成する。得られるサンプル列がマルコフ連鎖であるため、例えば100番目毎にサンプルを選ぶといったサンプルが十分に独立とみなせるように気をつけるべきである。それに加え、サンプル列の始めの方の値は目的の分布を精確には表していないため、初期値を与えたすぐ後はburn-in期間としてサンプルを捨てるべきである。

## 導出
ギブスサンプリングはメトロポリス・ヘイスティングス法の1つである。同時分布より周辺化された条件付き確率分布から、与えられた確率分布に従ったサンプルをサンプリングする。同時確率(x_1, \dotsc, x_n)から確率変数\boldsymbol{X} = \{x_1, \dotsc, x_n\} を\left.k\right.サンプル得たい。n次元のi番目のサンプルを\boldsymbol{X}^{(i)} = \{x_1^{(i)}, \dotsc, x_n^{(i)}\}とする。

手順は以下の通りである。
#初期値\boldsymbol{X}^{(0)}を設定する。
#条件付き確率p(x_j|x_1^{(i)},\dotsc,x_{j-1}^{(i)},x_{j+1}^{(i-1)},\dotsc,x_n^{(i-1)})からi番目のサンプルx_j^{(i)}をサンプリングする。
#iがk以下であればi=i+1して2へ。それ以外だと終了。

サンプルは他の変数に条件付けされた分布からサンプリングされるが、他の変数には新しいサンプルを使用すべきである。つまりは、1ステップ毎に1変数をサンプルし、新しいサンプルに入れ替えていく。このサンプル集合は、全ての変数に関する同時分布を近似する。

それに加え、全てのサンプルに関して平均をとることで期待値を近似することができる。

以下は注意点である。
*初期値の設定にEMアルゴリズムなどを用いたり、ランダムに決めてもいい。しかし初期値の設定に敏感にならなくても、burn-inの期間を設ければ問題ではない。
*サンプリング初期の値を捨てる期間（*burn-in period*）を設けることがよく行われる。また、期待値を計算するときにはn番目毎の値しか用いないといったこともよく行われる。この理由には2つある。1つは生成されるサンプル列はマルコフ連鎖でありサンプル間にある程度の相関が存在するため独立なサンプルではない。もう1つはマルコフ連鎖の定常分布は目的の分布になるが初期値から定常分布に到達するまでには時間がかかる。 自己相関の量やnをアルゴリズムで決定することもできるが、それは黒魔術的である。
*焼きなまし法(Simulated Annealing)はサンプリングの初期によく用いられる。しかしサンプル空間の移動が遅くサンプルの相関が強くなってしまう。その他の自己相関を減少させる方法には *collapsed Gibbs sampling*や*blocked Gibbs sampling*、*ordered overrelaxation*などがある。

### 条件付き分布と同時分布の関係
他のすべての変数が与えられたときのある変数に関する条件付き確率は同時確率に比例する。
:p(x_j|x_1,\dotsc,x_{j-1},x_{j+1},\dotsc,x_n) = \frac{p(x_1,\dotsc,x_n)}{p(x_1,\dotsc,x_{j-1},x_{j+1},\dotsc,x_n)} \propto p(x_1,\dotsc,x_n)

ここで*比例する*とは、分母がx_jの関数ではなく、x_jがどんな値であれ分母が定数であることである。周辺化定数は同時確率をx_jに関して周辺化した値である。

:
p(x_1,\dotsc,x_{j-1},x_{j+1},\dotsc,x_n)
= \int p(x_1,\dotsc,x_n) dx_j


実用上、確率変数x_jの条件付き分布を求めるためのもっとも簡単な方法はグラフィカルモデルの変数のうちx_jの関数ではない値を独立とみなして因子化すればいい。

そのほかには、3つの場合が考えられる。
#分布が離散分布である場合、x_jの取りうる値すべてに関して確率を計算し、足しあわせることで周辺化定数を計算すればいい。
#分布が連続で既知の形を持つ場合、1次元の周辺化なので周辺化定数が計算可能である。
#その他の場合、周辺化定数は無視することができる。大抵のサンプリング法は周辺化定数がなくても問題ではない。

## 理論
サンプル\left.X\right.を次元\left.d\right.のパラメータベクトル\theta \in \Theta \,\!に基づいた事前分布g(\theta_1, \dotsc, \theta_d)からサンプリングする。

\left.d\right.が大きい場合、数値積分を行ない\left.\theta_i\right.の周辺化分布を計算することは困難を伴う。

その周辺化分布の計算を\left.\Theta\right.空間上のマルコフ連鎖を生成することで代替する。以下の2ステップを繰り返す。
# jを選ぶ1 \leq j \leq d
# g(\theta_1, \dotsc, \theta_{j-1}, \, \cdot \, , \theta_{j+1}, \dotsc, \theta_d)の分布にしたがい、新しい変数\left.\theta_j\right.を選ぶ。

この2ステップは分布\left.g\right.にしたがう可逆なマルコフ連鎖を生成する。

これは以下の通り証明される。すべてのi \neq j に関して\left.x_i = y_i\right.であれば、x \sim_j yと表す。x \sim_j y は同値関係である。\left.p_{xy}\right.はx \in \Thetaからy \in \Thetaへ遷移する確率の分布を表す。

よって遷移確率は
:p_{xy} = \begin{cases}
\dfrac{1}{d} \dfrac{g(y)}{\sum_{z \in \Theta: z \sim_j x} g(z) } & x \sim_j y \\
0 & \text{otherwise}
\end{cases}
 

したがって、 
:
g(x) p_{xy} = \frac{1}{d}\frac{ g(x) g(y)}{\sum_{z \in \Theta: z \sim_j x} g(z) }
= \frac{1}{d}\frac{ g(y) g(x)}{\sum_{z \in \Theta: z \sim_j y} g(z) }
= g(y) p_{yx}


このように詳細つりあい条件は満たされる。

実用的には\left.j\right.はランダムに選ばれず、並びの順番で選ばれる。
また正確に言うと、これは非定常マルコフ連鎖を生成するが、各ステップは可逆であり、全体のプロセスは求めたい定常分布を与える。

## 手法の拡張
ギブスサンプリングの拡張について説明する。これらの拡張はサンプル間の自己相関を減少させることで、計算コストを減らすことを目標に考えられている。

### Blocked Gibbs sampler
**blocked Gibbs sampler** は個々の変数を考えるのではなく、変数を複数のグループに分割して条件づき分布を考える。
例えば、隠れマルコフモデルではforward-backward algorithmを使い、隠れ変数に関するマルコフ連鎖を生成する。

### Collapsed Gibbs sampler
**collapsed Gibbs sampler**は周辺化分布の変数を積分消去する。たとえば、*A*、*B*、*C*の3つの変数があるとする。ギブスサンプリングでは*p*(*A*|*B*,*C*)、*p*(*B*|*A*,*C*)、*p*(*C*|*A*,*B*)からサンプリングすることになる。collapsed Gibbs samplerでは*A*をサンプリングする時には例えば*B*を積分消去した周辺化分布*p*(*A*|*C*)からサンプリングを行う。*A*に関して*B*が共役事前分布であったり、指数分布族であれば計算が容易にできる。詳しくはcompound distribution、Liu (1994)を参考。

## ソフトウェア
* OpenBUGS (*Bayesian inference Using Gibbs Sampling*) ：複雑な統計モデルのベイズ推定にMCMC法を用いている
* JAGS (*Just another Gibbs sampler*) MCMC法を用いた階層ベイズモデルを推定できる
* Church ：任意の分布をギブスサンプリングする

## 参照