Python中的泊松统计量是否存在逆概率质量函数?

问题描述 投票:1回答:1

我正在寻找Poisson统计量的逆pmf。 inverse表示返回分布参数lambda的函数inv_pmf(p, k)。为了清楚起见,参数使用如下:p = lambda ^ k / k! * exp(-lambda)。谢谢

python statistics distribution poisson
1个回答
0
投票

因此,您有概率方程p(k,λ)=λk e / k!。您知道pk,但想知道λ。好吧,从lhs和rhs中获取对数并得到简单的方程式。

log(p)= k * log(λ)-λ-log(k!)

λ= k * log(λ)-log(p)-log(G(k + 1)),其中G()是伽马函数,可在Python lib中使用。您可以绘制RHS和LHS之间的差异,并发现它可能有多种解决方案。使用Python fsolve函数,您可以从该非线性方程式中扎根。

代码(Python 3.7,Anaconda,Windows 10 x64)

#%%    
import math
import numpy as np
import matplotlib.pyplot as plt

def logrhs(p, k, λ):
    return k*np.log(λ) - math.log(p) - math.lgamma(k+1)

def poissonPMF(k, λ):
    lp = k*np.log(λ) - λ - math.lgamma(k+1)
    return np.exp(lp)

p = 0.2
k = 3.0

λλ = np.linspace(0.001, 10.0, 101)

#%%    
rhs = logrhs(p, k, λλ)
lhs = np.copy(λλ)

pmf = poissonPMF(k, λλ)

plt.plot(λλ, lhs - rhs, 'r')
plt.plot(λλ, pmf, 'g')
plt.show()

# %%
from scipy.optimize import fsolve

def f(x):
    return x - logrhs(p, k, x)

starting_guess = 4.0
λ = fsolve(f, starting_guess)
print((λ, poissonPMF(k, λ)))

starting_guess = 1.9
λ = fsolve(f, starting_guess)
print((λ, poissonPMF(k, λ)))

例如,我使用k = 3和p = 0.2进行测试。对我来说,它打印出两个根]

(array([3.90263215]), array([0.2]))
(array([2.24859448]), array([0.2]))

并验证确实概率等于0.2。图显示红线在两个地方越过0enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.