コードメモ ポアソン分布×正規分布

  • 2019年11月9日
  • 2020年1月13日
  • python

ポアソン分布における母数λが正規分布に従って変化する場合の確率P(X=k)の算出。
算出と言っても、式の導出はできなかったので乱数からシミュレーションしただけ。

[2019/11/10 更新] 関数に。中身は同じ。

import matplotlib.pyplot as plt
import numpy as np
import math
from scipy.stats import poisson
def simulate_poisson(avg_value, sigma_value, data_count, repeat_count):
#正規分布部の変数設定
avg = avg_value
sigma = sigma_value
x_size = data_count
repeat = repeat_count
##fig = plt.figure()
#正規分布に従う乱数を生成
#負の数の場合は除外し、積算回数を修正する
s_list = np.random.normal(loc=avg, scale=sigma, size=repeat)
s_list = [item for item in s_list if item >= 0]
repeat = len(s_list)
#plt.hist(s_list, bins=100)
#plt.show()
#λ=(上記乱数)のポアソン分布を生成し、平均算出
x = np.arange(0, x_size, 1)
p = []
for i in range(0, repeat):
p.append(poisson.pmf(x, s_list[i]))
avg_p = [0] * len(x)
for i in range(0, repeat):
##if i < 100:  #重いのでplot数を制限
##plt.plot(x,p[i])
avg_p = avg_p + p[i]
avg_p = avg_p / repeat
##各種出力
##print(avg_p)
##plt.plot(x, avg_p, color=("black"))
##plt.xlabel('k')
##plt.ylabel('P(X=k)')
##plt.grid('gray')
##fig.text(0.6, 0.8, 'μ = ' + str(avg) + ' , σ = ' + str(sigma))
##fig.text(0.6, 0.75, '積算回数 = ' + str(repeat) + ' 回')
##plt.show()
return avg_p
f:id:azusa19:20191109180857p:plain