[matplotlib animation] 10. ガンマ分布のアニメーション

matplotlib Animation

はじめに

この記事はmatplotlibのFuncAnimationを使用して、ガンマ分布の形状母数(shape parameter)と尺度母数(scale parameter)が変化する様子をアニメーションで表現する方法について解説しています。ガンマ分布のパラメータ変化に伴う確率密度関数の形状変化を視覚的に捉えることができます。

形状母数が変化するアニメーション

コード

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

解説

モジュールのインポート

ガンマ分布を計算するために、scipy.statsモジュールからgamma関数をインポートします。

軸範囲と軸ラベル、グリッドの設定

データの生成

形状母数 \(\alpha\)、尺度母数 \(\beta\) の確率分布関数\(p(x)\)は、以下の式のようになる。 $${p(x|\alpha,\beta)=\frac{\beta^{\alpha}}{\Gamma(\alpha)} x^{\alpha-1}e^{-\beta x}}$$

gamma.pdf(x, 1, scale=1)を用いて、形状母数が1、尺度母数が1のガンマ分布の確率密度関数の値を取得します。

xはlinspaceで0~50までの範囲を設定しているため、xとyの値からガンマ分布のグラフを描画できます。

パラメータaは1から30まで、60ステップで変化させています。

アニメーションの設定

まず、グラフを格納するための空のリストlinesを作成します。

アニメーションでは古いプロットを消す必要があるため、linesにグラフが存在する場合はlines.pop().remove()でそれを削除します。 a[num]を使って形状母数の要素を順に変化させていきます。 line,でプロットを作成し、linesに追加していきます。 ax.set_titleを使ってタイトルに現在の形状母数の値を表示します。

アニメーションの表示

FuncAnimationを使用してアニメーションを表示します。updateを60ステップ実行してアニメーションを生成します。intervalは100 msに設定されているため、完全なアニメーションは6秒間続きます。to_html5_video関数でHTMLビデオ形式に変換します。

尺度母数が変化するアニメーション

コード

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

解説

データの生成

尺度母数は0.05〜3まで60stepで変化させます。

アニメーションの設定

尺度母数についても同様に、bの値を順次変化させることでアニメーションを作成します。

まとめ

matplotlibのFuncAnimationを活用することで、統計分布の特性理解に役立つ動的な可視化が可能になります。特にガンマ分布のような複数のパラメータを持つ分布の挙動を直感的に把握するのに有効です。

参考

[Python]scipy statsの使い方 - Qiita
scipy で正規分布に従うランダムデータの作り方 連続確率分布 Uniform Distribution(一様分布) 一様分布はscipy.stats.uniformを使う。 確率密度分布 pdfで何もParameterを指定しない場合は...
scipy.stats.gamma — SciPy v1.16.1 Manual

コメント