- Conway-Maxwell-Poisson分布
- 累積密度関数
- 超幾何関数
お絵描きする。
#%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import math
T=20;
###initial condition###
def Fac(n):
fac = 1
for i in range(1,n+1):
fac *= i
return fac
def Z(u,v):
z = 0
for i in range(100):
z += u**i/(Fac(i)**v)
return z
def pcmp(u,v,x):
return u**x/(Fac(x)**v)
zuv1 = Z(1,1.5)
zuv2 = Z(3,1.1)
zuv3 = Z(5,0.7)
zuv4 = Z(3,3)
CMP1 = [pcmp(1,1.5,x)/zuv1 for x in range(T)]
CMP2 = [pcmp(3,1.1,x)/zuv2 for x in range(T)]
CMP3 = [pcmp(5,0.7,x)/zuv3 for x in range(T)]
CMP4 = [pcmp(3,3,x)/zuv4 for x in range(T)]
time1 = [n for n in range(T)]
import matplotlib.pyplot as plt
# xに対応するyの値を用意
plt.plot(time1,CMP1,"r-..")
plt.plot(time1,CMP2,"g-.")
plt.plot(time1,CMP3,"b--")
plt.plot(time1,CMP4,"purple")
plt.xlabel("x")
plt.ylabel("probability")
plt.title("CMP distribution")
# plt.show()で画面に表示
plt.show()
- CMP分布のパラメータを推定する方法2つ
- 重みづけ最小二乗法
- 単純で、効率的だが、正確さに欠ける
- 少し変数を変えて、(対数変換して)最小二乗法をする(傾きと切片を求める)
- ついでに、分散とか、モーメントの類を取り出せる
- しかし、対数変換の過程で、だいぶ誤差が入る。
- 最大尤度
- 正確だが、複雑で、計算量多い
- データ点x_iについての確率を全て掛けたもの(λとνの関数)を用意する
- それを最大化するようなλとνの組を求めましょうという問題に落ち着く
- こうして、データ点から、CMP分布に回帰することが出来る。
- 気持ちとしては、ポアソン分布やベルヌーイ分布、幾何分布っぽさをνの値で調節できる分布だった、ということ。
- このような、複数の分布の性質を重ね合わせたもの、ということは色々拡張できそうだ。面白い。
バイバイ!