ギブスサンプリング シミュレーター 戻る
統計・モンテカルロ

ギブスサンプリング シミュレーター

MCMC(マルコフ連鎖モンテカルロ)の代表手法ギブスサンプリングで、2変量正規分布から乱数を生成します。目標相関係数・サンプル数・バーンインを変えると、条件付き分布を交互にサンプリングする階段状の経路と、標本相関が目標値へ収束していく様子がリアルタイムで分かります。

パラメータ設定
目標相関係数 ρ
目標とする2変量正規分布の x と y の相関
サンプル数 N
バーンイン後に収集する連鎖の状態数
バーンイン
初期の偏った区間として破棄する反復数
乱数シード
同じ値なら結果が完全に再現される
計算結果
標本平均 x
標本平均 y
標本相関 ρ̂
標本標準偏差
収集サンプル数
目標との誤差
サンプリング経路 — 階段状ウォーク

点は収集された (x,y) サンプル、薄い楕円は目標相関の等高線。連続する状態を「水平→垂直」に結んだ線がギブス特有の階段状ウォークで、マーカーがその経路を歩きます。

トレースプロット — x の値と反復回数
x の周辺分布ヒストグラム
理論・主要公式

$$x^{(t+1)}\sim\mathcal N(\rho\,y^{(t)},\,1-\rho^2),\qquad y^{(t+1)}\sim\mathcal N(\rho\,x^{(t+1)},\,1-\rho^2)$$

ギブスサンプリングは、各変数を「他を固定したときの完全条件付き分布」から順番に引き直す。標準2変量正規分布では条件付き分布も正規分布になり、平均は相手の ρ 倍、分散は 1−ρ² となる。

$$\hat\rho = \frac{\sum_t (x_t-\bar x)(y_t-\bar y)}{\sqrt{\sum_t (x_t-\bar x)^2}\,\sqrt{\sum_t (y_t-\bar y)^2}}$$

収集サンプルから計算する標本相関 ρ̂。サンプル数 N を増やすほど目標 ρ に近づき、モンテカルロ誤差はおよそ 1/√N の速さで縮む。

ギブスサンプリングとは

🙋
「ギブスサンプリング」って名前は聞いたことがあるんですけど…そもそも何をするものなんですか?乱数を作るんですよね?
🎓
そう、ある確率分布に「従う」乱数を作る道具だよ。ふつうの乱数は一様分布や正規分布みたいに公式が分かってればすぐ作れる。でも、複数の変数が絡み合った複雑な同時分布になると、その公式から直接サンプルするのが難しくなる。ギブスサンプリングはそこで、「変数を1つずつ、他を固定したときの条件付き分布から引き直す」という回り道を使うんだ。これを延々と繰り返すと、いつのまにか全体が目標の同時分布に従ったサンプル列になっている。
🙋
1つずつ更新するだけで、本当に正しい分布に近づくんですか?なんだか不思議です。
🎓
不思議だよね。これは「マルコフ連鎖モンテカルロ(MCMC)」という理屈で保証されているんだ。条件付き分布を交互に使う更新ルールを作ると、その連鎖の定常分布がちょうど目標の同時分布になる。だから十分長く回せば、出てくる点は目標分布のサンプルとみなせる。このツールの例は2変量正規分布で、x を固定したときの y は平均 ρx・分散 1−ρ² の正規分布、y を固定したときの x も同じ形。左で目標相関 ρ を動かして、右上の散布図が楕円形に広がるのを見てみて。
🙋
経路のグラフがギザギザの階段みたいになってますね。これは何ですか?
🎓
それがギブスサンプリングの「見た目の指紋」みたいなものなんだ。1ステップでは1変数しか動かさないだろう? y を固定して x を引くと点は真横に動く。次に x を固定して y を引くと真上か真下に動く。横・縦・横・縦…の繰り返しだから、軌跡が必ず階段状になる。ρ を ±0.9 みたいに強くしてみて。条件付き分布の幅 1−ρ² が狭くなるから、一歩が小さくなって階段が細かく、連鎖がなかなか分布全体を歩き回れなくなる。これが「ミキシングが悪い」状態だよ。
🙋
バーンインっていう設定もありますね。最初の何個かを捨てるって、もったいなくないですか?
🎓
気持ちは分かるけど、これは必要な「捨て」なんだ。連鎖は原点 (0,0) から無理やりスタートしている。最初の数十ステップはまだ目標分布に馴染んでいない「準備運動中」の点で、これを統計量に混ぜると標本平均や標本相関が初期値に引っぱられて偏る。だから最初の区間をバーンインとして捨てる。相関が強いほど準備運動が長引くから、バーンインも長めに取る。左でバーンインを0にして ρ=0.95 にすると、誤差が少し悪化するのが見えるはずだ。
🙋
標本相関 ρ̂ が目標の ρ とぴったり一致しないのも、そういう理由ですか?
🎓
そう、それはモンテカルロ法の宿命だね。有限個のサンプルから計算する以上、ρ̂ には必ず誤差が残る。サンプル数 N を増やせば誤差はおよそ 1/√N で縮んでいく。ただしMCMCのサンプルは隣どうしが似ている(自己相関がある)から、独立な乱数より「実効サンプル数」が少なく、収束は少し遅め。実務では、N を増やす・バーンインを十分取る・自己相関を見ながら間引く、といった工夫で誤差を管理するんだ。

よくある質問

ギブスサンプリングは、多変数の確率分布から乱数(サンプル)を生成するためのMCMC(マルコフ連鎖モンテカルロ)法の一種です。目標の同時分布から直接サンプルできない場合でも、各変数の「他をすべて固定したときの条件付き分布」が分かれば実行できます。1変数ずつ順番にその条件付き分布から値を引き直すだけで、長く回すと連鎖全体が目標の同時分布に従うようになります。本ツールは2変量正規分布を例にこの手続きを可視化します。
ギブスサンプラーは任意の初期値(このツールでは原点 (0,0))から出発するため、最初の数十〜数百ステップは目標分布からずれた「準備運動中」の状態です。この初期の偏った区間を捨てる操作がバーンインです。捨てずに統計量を計算すると、初期値に引きずられて標本平均や標本相関が偏ります。相関ρが強い(±0.9 など)ほど連鎖の動きが遅く、混合(ミキシング)に時間がかかるため、長めのバーンインが必要になります。
ギブスサンプリングは1ステップで1変数しか更新しません。まず y を固定して x を引き直すと点は水平方向に動き、次に x を固定して y を引き直すと垂直方向に動きます。この水平→垂直→水平…の繰り返しが、(x,y) 平面上で特徴的な階段(ジグザグ)状の軌跡を描きます。相関が強いほど条件付き分布の幅 1−ρ² が狭くなり、1歩あたりの移動量が小さくなって階段が細かくなります。これがミキシングの遅さの正体です。
ギブスサンプリングはモンテカルロ法なので、有限のサンプルから計算した標本相関 ρ̂ には必ずモンテカルロ誤差が残ります。サンプル数を増やすほど ρ̂ は目標 ρ に近づき、誤差はおおむね 1/√N の速さで小さくなります。さらにMCMCのサンプルは互いに自己相関しているため、独立サンプルより「実効的なサンプル数」が少なく、収束はやや遅くなります。誤差を縮めたいときは、サンプル数を増やす・十分なバーンインを取る、が基本です。

実世界での応用

ベイズ統計のパラメータ推定:ギブスサンプリングが最も広く使われるのはベイズ推論です。階層モデルや回帰モデルの事後分布は解析的に書けないことが多く、各パラメータの完全条件付き分布だけが既知という状況がよく起こります。共役な事前分布を選べば条件付き分布が標準的な分布(正規・ガンマ・逆ガンマなど)になり、ギブスサンプラーで事後分布からサンプルを大量に取って、事後平均や信用区間を推定できます。BUGS・JAGS といった古典的なベイズソフトはまさにこの方式です。

画像処理とマルコフ確率場:ノイズ除去や画像の領域分割では、各画素のラベルが隣接画素に依存するマルコフ確率場(MRF)でモデル化されます。全画素の同時分布は巨大ですが、1画素の条件付き分布は近傍だけで決まるため計算が軽く、ギブスサンプリングと相性が抜群です。実際、ギブスサンプリングという名前自体、画像復元の文脈(Geman & Geman, 1984)で広まりました。

トピックモデル(LDA)と自然言語処理:文書集合から潜在的な話題を抽出する潜在ディリクレ配分法(LDA)では、各単語のトピック割り当てを崩壊型ギブスサンプリングで推定します。条件付き確率が単語・文書・トピックのカウントだけで書ける形になり、大規模なテキストコーパスでも実装しやすいのが利点です。

欠測データの補完:調査データやセンサーデータには欠測がつきものです。データ拡大法(data augmentation)では、欠測値そのものを未知パラメータとみなし、観測値で条件づけた分布からギブスサンプリングで補完します。多重代入法(multiple imputation)の中核アルゴリズムとしても使われています。

よくある誤解と注意点

まず最大の誤解が、「サンプルどうしは独立だ」という思い込みです。ギブスサンプリングが生み出すのはマルコフ連鎖であり、隣り合うサンプルは強く相関しています。とくに目標相関 ρ が強いと条件付き分布の幅 1−ρ² が狭くなり、連鎖は分布全体を「ちょびちょび」としか歩けません。このとき N=1000 のサンプルがあっても、独立サンプル換算の「実効サンプルサイズ」はその何分の一かもしれません。標準誤差を独立サンプルの式で見積もると過小評価になります。自己相関関数や実効サンプルサイズ(ESS)を必ず確認してください。

次に、「バーンインさえ取れば収束は保証される」という油断です。バーンインは初期値の影響を捨てるだけで、連鎖が本当に目標分布全体を探索できたかは別問題です。例えば多峰性(山が複数ある)分布では、ギブスサンプラーが1つの山に長くトラップされ、他の山にまったく行けないことがあります。このツールの2変量正規は単峰なので起こりませんが、実務の複雑なモデルでは、複数の初期値から連鎖を走らせて結果が一致するか(Gelman–Rubin の R̂ など)で収束を診断するのが鉄則です。

最後に、「ギブスサンプリングはいつでも使える万能ツール」ではないという点。ギブスサンプリングが成立する前提は、すべての変数の完全条件付き分布から実際にサンプルできることです。条件付き分布が非標準的な形でサンプルが難しい、あるいは変数どうしの相関が極端に強くてミキシングが絶望的に遅い、という場面では、メトロポリス・ヘイスティングス法、ハミルトニアンモンテカルロ(HMC)、ブロック化ギブスなど別の手法のほうが効率的です。手法は「目標分布の構造」に合わせて選ぶものだ、と覚えておきましょう。

使い方ガイド

  1. 相関係数ρを-0.95~0.95の範囲で設定し、2変量正規分布N(0,Σ)の依存構造を指定します
  2. サンプル数nを1000~50000の間で選択し、ギブスサンプリングの反復回数を決定します
  3. バーンイン期間を100~5000に設定して、初期値の影響を除去してからサンプル収集を開始します
  4. 乱数シードを0~1000000で指定し、再現可能な結果を得ます
  5. 実行ボタンを押すと、条件付き分布X|Y~N(ρY, 1-ρ²)とY|X~N(ρX, 1-ρ²)による交互サンプリングがリアルタイム実行されます

具体的な計算例

ρ=0.7、n=5000、バーンイン=500、シード=42で実行した場合:Y₁=0から開始し、条件付き正規分布からX₁~N(0.7×0, 0.51)、X₁値を用いてY₂~N(0.7×X₁, 0.51)と反復します。4500サンプル収集後、標本平均x̄≈0.02、ȳ≈0.01、標本相関ρ̂≈0.698、標本標準偏差s≈0.996となり、目標ρとの誤差は約0.2%以内に収束します。トレースプロットでは最初の500反復で急速に定常分布に到達する様子が観察されます。

実務での注意点