からっぽのしょこ

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

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

はじめに

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

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

【前の内容】

www.anarchive-beta.com

【他の記事一覧】

www.anarchive-beta.com

【この記事の内容】

Rでポアソン分布の計算

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

確率の計算

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

パラメータの設定

 ポアソン分布のパラメータ$\lambda$を設定します。

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

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

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

スクラッチで計算

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

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

 ポアソン分布の定義式

$$ \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.1465251
## [1] -1.920558

 対数をとった定義式

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

を計算します。
 対数をとったガンマ関数$\log \Gamma(x)$は、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.1465251

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

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

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

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

統計量の計算

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

 平均を計算します。

# 平均を計算
E_x <- lambda
E_x
## [1] 4

 ポアソン分布の平均は$\lambda$です。

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

 分散を計算します。

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

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

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


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

参考文献

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

おわりに

 記事を分割しました。

【次の内容】

www.anarchive-beta.com