はしくれエンジニアもどきのメモ

情報系技術・哲学・デザインなどの勉強メモ・備忘録です。

Poisson分布の条件付分布(Conditional)は二項分布に従うことの証明

Poisson分布の条件付分布(Conditional)は二項分布に従うことの証明

Poisson分布の条件付分布(Conditional)は,二項分布に従うことの証明のメモ. ついでにSimulation もやってみる.

Poisson分布の条件付分布が二項分布に従うことの証明

どういう条件付分布かというと, 互いに独立でポアソン分布に従う確率変数 \( X \sim Po(\lambda_x), Y \sim Po(\lambda_y) \) の和\( X+Y = n\)が起きた中で,\(X=k\)であるという分布になる. 記号で書くと, \( X=k | X + Y =n \) になり,これが二項分布に従う.

もっと例を使って説明すると, Poisson分布に従うようなボタンXのクリック数 \(X\) と ボタンYのクリック数 \(Y\) が 合計\( n \) 回起きたとき,そのうち ボタンX のクリック数である割合(成功確率)は平均の割合\( \frac{\lambda_X}{\lambda_X + \lambda_Y }\) である,つまり \(Bin(n, \frac{\lambda_X}{\lambda_X + \lambda_Y })\) に従うということになる.直感的には確かにそうなりそうなので,実際に数式を使って証明する.

確率変数 \(X, Y\) は互いに独立として, $$ X \sim Po(\lambda_{X})\\ Y \sim Po(\lambda_{Y}) $$

ポアソン分布の再生性

cartman0.hatenablog.com

より, $$ Z = X+Y \sim Po(\lambda_{X} + \lambda_{Y}) $$

条件付分布は, \begin{eqnarray*} P(X_c = k) &=& P(X = k∣X+Y=n)\\ &=& \frac{P(X=k, X+Y=n)}{P(X+Y=n)} \end{eqnarray*} 分母に条件,分子に同時分布がくる形になる.

確率変数の値が $X=k$ になるときを考えると, 同時分布は, $$ P(X=k, X+Y=n) = P(X=k, Z=n)= P(X=k)P(Y=n-k) $$ になる.よって,P(X)P(Y)の積になる.

よって,条件付分布は, \begin{eqnarray*} P(X_c = k) &=& \frac{P(X=k \cap X+Y=n)}{P(X+Y=n)} \\ &=& \frac{P(X=k)P(Y=n-k)}{P(Z=n)} \\ &=& \frac{ \frac{\lambda_X^k}{k!}e^{-\lambda_X} \frac{\lambda_Y^{(n-k)}}{(n-k)!}e^{-\lambda_Y}}{ \frac{(\lambda_X + \lambda_Y)^n}{n!}e^{-(\lambda_X + \lambda_Y)} }\\ &=& \frac{n!}{(n-k)!k!} \frac{\lambda_X^k \lambda_Y^{(n-k)}}{(\lambda_X + \lambda_Y)^n} \\ &=& \frac{n!}{(n-k)!k!} \frac{\lambda_X^k \lambda_Y^{(n-k)}}{(\lambda_X + \lambda_Y)^{k}(\lambda_X + \lambda_Y)^{n-k}} \\ &=& \frac{n!}{(n-k)!k!} \left(\frac{\lambda_X}{\lambda_X + \lambda_Y}\right)^{k} \left(\frac{\lambda_Y}{\lambda_X + \lambda_Y} \right)^{n-k}\\ &=& \frac{n!}{(n-k)!k!} \left(\frac{\lambda_X}{\lambda_X + \lambda_Y}\right)^{k} \left(1 - \frac{\lambda_X}{\lambda_X + \lambda_Y} \right)^{n-k}\\ &=& {}_{n}C_{k} \left(\frac{\lambda_X}{\lambda_X + \lambda_Y}\right)^{k} \left(1 - \frac{\lambda_X}{\lambda_X + \lambda_Y}\right)^{n-k} \end{eqnarray*} 条件付分布は,二項定理の項が出てくることにより, 二項分布の確率(質量)関数となる.

よって, $$ X_c \sim B(n, \frac{\lambda_X}{\lambda_X + \lambda_Y}) $$

条件付分布のシミュレーション

数式で証明できたけど,実際に二項分布に従うのかシミュレーションしてみる.流れとしては,

  1. \(X \sim Po(2), Y \sim Po(3)\) として, それぞれ5000個のポアソン乱数を発生させ,その和を求める.

    例えば以下のようになる.

    XYX+Y
    3 2 5
    1 9 10
    4 3 7
    ... ... ...
  2. 例えば,\(X+Y= 5\) になるときのみを抽出.

    XYX+Y
    3 2 5
    2 3 5
    1 4 5
    ... ... ...
  3. \(X\)の値の頻度をカウントし,正規化してプロット.

  4. 二項分布 \(Bin(n=5, p=\frac{2}{2+3}) \) に従っているはずなので,確率質量関数(pmf)をプロットして,ある程度重なっているか確認.

使用環境は以下である.

環境

  • conda: 4.2.12
    • Python 3.5.1
    • scipy 0.18.1
    • pandas 0.18.1
    • jupyter 1.0.0

コードは以下のようになる. なお,コードでは, \((X=k|X+Y =2), (X=k|X+Y =3) \cdots , (X=k|X+Y =5)\) の時をプロットしている.


import scipy as sp
import scipy.stats as stats
import pandas as pd
import matplotlib.pyplot as plt

%matplotlib inline
fig = plt.figure(figsize=(11, 5))

size= 5000

def plot(n_start, sub_row, sub_col):
    num = sub_row * sub_col

    for i in sp.arange(0, num, 1):
        n = n_start + i
        plt.subplot(str(sub_row) + str(sub_col) + str(i+1))

        X_rand = stats.poisson.rvs(mu=2, size=size)
        Y_rand = stats.poisson.rvs(mu=3, size=size)

        df = pd.DataFrame([X_rand, Y_rand, X_rand+Y_rand], index=["X", "Y", "X+Y"]).T
        df_n = df[df["X+Y"]==n]
        freq = df_n["X"].value_counts(sort=False) / df_n["X"].count()
        freq.plot(label=("X|X+Y=" + str(n)))

        #true binome
        k_ = sp.arange(0, n+1, 1)
        plt.bar(k_-0.2/2, stats.binom.pmf(k=k_, n=n, p=2/(2+3)), label="true B(" + str(n) + ", 2/5)", width=.2, color="red")

        plt.xlim(-.5, n+0.5)
        plt.grid()
        plt.xlabel("k")
        plt.ylabel("Prob")
        plt.legend(loc=1)


plot(2, sub_row=2, sub_col=2)
fig.suptitle("Simulation that Conditional of Poissons follows Binom", y=0, fontsize=16)
plt.tight_layout()
plt.show()

結果は以下のようなった. 青い実線 が上記の乱数発生で計算した確率で,赤い棒グラフ が二項分布の実際の確率(質量)関数の値である. 大体合ってるのが分かる.

二項分布従うかどうかのシミュレーション結果

Simulation that Conditional of Poissons follows Binom

何に使えるの?

この性質何に使えるの?って感じだが, どうやら「2群のポアソン分布の平均の差の検定」, C-Test [1] (CはConditionalの略)に使われているようだ.この二項分布に従うという性質を使って,両側・片側検定を行う.後日,ブログに挙げる予定.