2009年10月27日火曜日

RとImageMagickで混合分布推定アニメーション

EMアルゴリズムや変分ベイズ、MCMCでは最適化やサンプリングを繰り返すことで確率分布を求めます。
その過程を可視化する際のtipsをまとめてみます。

Rの他に必要なのはこちら。


MacPortでしたら

sudo port install ImageMagick +lcms +jpeg2
sudo port install ffmpeg

でインストール可能です。
動画作成までの道のりは以下のとおりです。

 1. Rプログラムの反復演算の都度画像を生成する
 2. ImageMagickで連結・mpeg変換を行う

いやぁ、簡単。このままではtipsにならないので、サンプルとその生成方法を記載してみます。
まずRにおいて、以下のような画像生成項目を記載します。

name = paste(t, ".png" , sep="")
png(file = paste("img/", name, sep=""), sep="")
 #プロットしたい図のplot
dev.off()

尚、tは反復回数t回目を表します。これによりimgフォルダにt=1から(任意の)収束回数までの連番pngファイルが生成されます。
続いて、imgフォルダ内に以下のようなシェルスクリプトを保存します。

#!/bin/bash
num=${1:?"Usage: $./conv.sh npics"}
for((i=1;i<$(($1+1));++i))
do
 name+=$i.png" "
done
#echo $name
`convert -delay 15 -quality 100% -antialias -compress None $name opt.mpg`

名前をconv.shとしましょう。また、t=100で収束したとします。その際、実行権限を与えた後、以下のように実行します。

chmod u+x conv.sh
./conv.sh 100

これにより、opt.mpgができあがります。表示間隔はdelayの引数を変えることで調整できます。
混合ガウス分布の推定を行った結果がこちら

ImageMagick自体は検索すれば多くのtipsが出てきますが、Rのtipsとして参考にしたのはこちら。

 RjpWiki:グラフィックス参考実例集:自作グラフィックス投稿欄:GIFアニメーション

一枚一枚画像を生成するので非常に時間がかかります(MCMCでやることは考えたくないです)が、視覚的に確認できると楽しいですね。是非お試しあれ。

0 件のコメント:

コメントを投稿