二項分布の極限がポアソン分布になることをグラフによりイメージする
二項分布の極限はポアソン分布になります。どういうことだか最初意味がわからなかったので、それをイメージできるようにグラフを作ってみました。
本記事は次の3つの記事の3つ目です。
- 二項分布の極限がポアソン分布になることを文章変形によりイメージする
- 二項分布の極限がポアソン分布になることを数式変形によりイメージする
- 二項分布の極限がポアソン分布になることをグラフによりイメージする
今度はグラフでイメージします。
- 二項分布
- 母数 (分布のパラメータ)
- (0以上の整数)
- (0以上1以下の実数)
- 確率質量関数:
- 期待値:
- 分散:
- 母数 (分布のパラメータ)
- ポアソン分布
- 母数 (分布のパラメータ)
- (0より大きい実数)
- 確率質量関数:
- 期待値:
- 分散:
- 母数 (分布のパラメータ)
二項分布がポアソン分布に近づく様子のグラフです。
このグラフは6個の分布の確率質量関数です。横軸は 、縦軸が確率質量関数 です。
6個の分布は次のとおりです。ピーク付近で上から順にです。
- 青: の二項分布
- 橙: の二項分布
- 緑: の二項分布
- 赤: の二項分布
- 紫: の二項分布
- 茶: のポアソン分布
数式で書くと、
- 青:
- 橙:
- 緑:
- 赤:
- 紫:
- 茶:
二項分布の を一定に保ったまま、 を大きくして、 を小さくしていくと、 のポアソン分布に近づいていくことがグラフからもわかります。
このグラフを書いたコードは以下です。たまにはPHPを書かないと忘れてしまって悲しいのでPHPで久しぶりにコードを書きました。以前はPHPもよく書いてましたが、いまは書くことがほとんどないです。
<?php function combination($n, $k) { $ret = 1; for ($i = $n - $k + 1; $i <= $n; $i++) { $ret *= $i; } for ($i = 2; $i <= $k; $i++) { $ret /= $i; } return $ret; } function factorial($n) { $ret = 1; for ($i = 2; $i <= $n; $i++) { $ret *= $i; } return $ret; } function binomial($lambda, $n, $k) { $p = $lambda / $n; return combination($n, $k) * pow($p, $k) * pow(1 - $p, $n - $k); } function poisson($lambda, $k) { return pow($lambda, $k) * exp(-$lambda) / factorial($k); } for ($i = 0; $i <= 10; $i++) { printf("%d,%f,%f,%f,%f,%f,%f\n", $i, binomial(5, 10, $i), binomial(5, 13, $i), binomial(5, 17, $i), binomial(5, 25, $i), binomial(5, 50, $i), poisson(5, $i)); }
標準出力にCSVで数値を出力しますので、これをファイルに保存します。
$ php binomial-poisson.php > binomial-poisson.csv
Jupyter Notebook上で、PythonのpandasでCSVファイルを読み込んで、matplotlibでグラフにしました。
%matplotlib inline import numpy as np import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv("binomial-poisson.csv", names=["x", "10", "13", "17", "25", "50", "poisson"]) plt.plot(df["x"], df["10"]) plt.plot(df["x"], df["13"]) plt.plot(df["x"], df["17"]) plt.plot(df["x"], df["25"]) plt.plot(df["x"], df["50"]) plt.plot(df["x"], df["poisson"])
以上。