ただのメモ

他の人に見せても良い方のメモ

Conway-Maxwell-Poisson分布

  • Conway-Maxwell-Poisson分布
    • 離散確率分布
    • ポアソン分布を一般化したもの
    • λとνが正で、λは0<λ<1、νはいろいろ
    • νが1なら、ポアソン分布
    • νが∞なら、ベルヌーイ分布
    • νが0なら、幾何分布となる。
  • 累積密度関数
    • 超幾何関数

お絵描きする。

#%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 = [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()

f:id:medical-science:20220322004130p:plain

  • CMP分布のパラメータを推定する方法2つ
  • 重みづけ最小二乗法
    • 単純で、効率的だが、正確さに欠ける
    •  log(p_{x-1}/p_x) = - log(\lambda ) + \nu log(x)
    • 少し変数を変えて、(対数変換して)最小二乗法をする(傾きと切片を求める)
    • ついでに、分散とか、モーメントの類を取り出せる
    • しかし、対数変換の過程で、だいぶ誤差が入る。
  •  最大尤度
    • 正確だが、複雑で、計算量多い
    • データ点x_iについての確率を全て掛けたもの(λとνの関数)を用意する
    • それを最大化するようなλとνの組を求めましょうという問題に落ち着く
  • こうして、データ点から、CMP分布に回帰することが出来る。
  • 気持ちとしては、ポアソン分布やベルヌーイ分布、幾何分布っぽさをνの値で調節できる分布だった、ということ。
  • このような、複数の分布の性質を重ね合わせたもの、ということは色々拡張できそうだ。面白い。

バイバイ!