からっぽのしょこ

読んだら書く!書いたら読む!同じ事は二度調べ(たく)ない

【R】ポアソン分布の計算

はじめに

 機械学習で登場する確率分布について色々な角度から理解したいシリーズです。

 ポアソン分布の確率と統計量をR言語で計算します。

【前の内容】

www.anarchive-beta.com

【他の記事一覧】

www.anarchive-beta.com

【この記事の内容】

ポアソン分布の計算

 ポアソン分布(Poisson Distribution)の計算と統計量を計算します。ポアソン分布については「ポアソン分布の定義式の確認 - からっぽのしょこ」を参照してください。

確率の計算

 ポアソン分布に従う確率を計算する方法をいくつか確認します。

パラメータの設定

 まずは、ポアソン分布のパラメータ$\lambda$と確率変数の実現値$x$を設定します。

# パラメータを指定
lambda <- 4.5

# 確率変数の値を指定
x <- 2

 発生回数の期待値$\lambda > 0$、非負の整数$x$を指定します。設定した値に従う確率を計算します。

スクラッチで計算

 定義式から確率を計算します。

# 定義式により確率を計算
prob <- lambda^x / gamma(x + 1) * exp(-lambda)
prob
## [1] 0.1124786

 ポアソン分布は、次の式で定義されます。

$$ \mathrm{Poi}(x | \lambda) = \frac{\lambda^x}{x!} \exp(-\lambda) $$

 階乗$x!$の計算は、ガンマ関数$\Gamma(x + 1) = x!$に置き換えて計算します。ガンマ関数は、gamma()で計算できます。

 対数をとった定義式から計算します。

# 対数をとった定義式により確率を計算
log_prob <- x * log(lambda) - lgamma(x + 1) - lambda
prob     <- exp(log_prob)
prob; log_prob
## [1] 0.1124786
## [1] -2.184992

 対数をとった定義式を計算します。

$$ \log \mathrm{Poi}(x | \lambda) = x \log \lambda - \log x! - \lambda $$

 対数をとったガンマ関数は、lgamma()で計算できます。
 計算結果の指数をとると確率が得られます。

$$ \mathrm{Poi}(x | \lambda) = \exp \Bigl( \log \mathrm{Poi}(x | \lambda) \Bigr) $$

 指数と対数の性質より$\exp(\log x) = x$です。

 次は、関数を使って確率を計算します。

ポアソン分布の関数により計算

 ポアソン分布の確率関数dpois()を使って計算します。

# ポアソン分布の関数により確率を計算
prob <- dpois(x = x, lambda = lambda)
prob
## [1] 0.1124786

 確率変数の引数xx、パラメータの引数lambdalambdaを指定します。

 log = TRUEを指定すると対数をとった確率を返します。

# ポアソン分布の対数をとった関数により確率を計算
log_prob <- dpois(x = x, lambda = lambda, log = TRUE)
prob     <- exp(log_prob)
prob; log_prob
## [1] 0.1124786
## [1] -2.184992

 計算結果の指数をとると確率が得られます。

統計量の計算

 次は、ポアソン分布の期待値と分散、最頻値を計算します。詳しくは「ポアソン分布の平均と分散の導出:定義式を利用 - からっぽのしょこ」を参照してください。

 期待値を計算します。

# 期待値を計算
E_x <- lambda
E_x
## [1] 4.5

 ポアソン分布の期待値は$\lambda$です。

$$ \mathbb{E}[x] = \lambda $$

 分散を計算します。

# 分散を計算
V_x <- lambda
V_x
## [1] 4.5

 ポアソン分布の分散も$\lambda$です。

$$ \mathbb{V}[x] = \lambda $$

 最頻値を計算します。

# 最頻値を計算
mode_x <- floor(lambda)
mode_x
## [1] 4

 ポアソン分布の最頻値(モード)は、$\lambda$未満の最大の整数です。

$$ \mathrm{mode}[x] = \lfloor \lambda \rfloor $$

 floor()で小数点以下を切り捨てることで求められます。

歪度と尖度の計算

 最後に、ポアソン分布の歪度と尖度を計算します。詳しくはいつか書きます。

 歪度を計算します。

# 歪度を計算
skewness <- 1 / sqrt(lambda)
skewness
## [1] 0.4714045

 ポアソン分布の歪度は、次の式で計算できます。

$$ \mathrm{Skewness} = \frac{\mathbb{E}[(x - \mu)^3]}{\sigma^3} = \frac{1}{\sqrt{\lambda}} $$

 ここで、$x$の期待値$\mu = \mathbb{E}[x]$、標準偏差$\sigma = \sqrt{\mathbb{E}[(x - \mu)^2]}$です。

 尖度を計算します。

# 尖度を計算
kurtosis <- 1 / lambda
kurtosis
## [1] 0.2222222

 ポアソン分布の尖度は、次の式で計算できます。

$$ \mathrm{Kurtosis} = \frac{\mathbb{E}[(x - \mu)^4]}{\sigma^4} - 3 = \frac{1}{\lambda} $$


 以上で、ポアソン分布の確率と統計量の計算を確認できました。次は、グラフを作成します。

参考文献

  • 須山敦志『ベイズ推論による機械学習入門』(機械学習スタートアップシリーズ)杉山将監修,講談社,2017年.

おわりに

 記事を分割しました。

  • 2022.07.19:加筆修正しました。


【次の内容】

www.anarchive-beta.com