ikeの日記

しがない研究者の雑記。

ガンマ分布と逆ガンマ分布

ブログに数式とコードを書く方法を学習したので、備忘録代わりに。

shape parameterが \alpha、scale parameterが \betaのガンマ分布の確率密度関数


f(x|\alpha, \beta) = \frac{1}{\Gamma(\alpha)\beta^{\alpha}} x^{\alpha - 1} \exp(-\frac{x}{\beta})

一方shape parameterが \alpha、scale parameterが \betaの逆ガンマ分布の確率密度関数


g(x|\alpha, \beta) = \frac{\beta^{\alpha}}{\Gamma(\alpha)} x^{-\alpha - 1} \exp(-\frac{\beta}{x})

ここで y = 1/xとおいて確率変数の変換公式を適用すると、


\begin{aligned}
f(x|\alpha, \beta) &= \frac{1}{\Gamma(\alpha)\beta^ {\alpha}} x^ {\alpha - 1} \exp(-\frac{x}{\beta})  \\
&= \frac{1}{\Gamma(\alpha)\beta^ {\alpha}} \frac{1}{y}^ {\alpha - 1} \exp(-\frac{1}{\beta y}) \frac{1}{y^ 2}  \\
&= \frac{1}{\Gamma(\alpha)\beta^ {\alpha}} y^ {-\alpha - 1} \exp(-\frac{1}{\beta y})  \notag \\
&= g(y|\alpha, \beta^ {-1}) \notag
\end{aligned}

よって、例えばRのrgamma()関数を使ってshape parameterが5、scale parameterが0.1の逆ガンマ分布から乱数を発生させたい場合には、

x <- 1/rgamma(n = 100, shape = 5, scale = 10)
# or
x <- 1/rgamma(n = 100, shape = 5, rate = 0.1)

という様にscale parameterをrate parameterに置き換えないといけない。

いつもコードを書くときにわからなくなって数時間無駄にするので、メモ。