繁体   English   中英

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

[英]Is there an inverse probability mass function for Poisson statistics in Python?

我正在寻找泊松统计的逆 pmf。 反向我的意思是返回分布参数 lambda 的 function inv_pmf(p, k) 为清楚起见,参数使用如下:p = lambda^k / k。 * exp(-lambda)。 谢谢

所以你有概率方程 p(k,λ) = λ k e /k.. 你知道pk但想知道λ 好吧,从 lhs 和 rhs 获取日志并得到简单的方程。

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

或者

λ = k*log(λ) - log(p) - log(G(k+1)),其中G()是 Gamma 函数,可在 Python 库中找到。 您可以 plot RHS 和 LHS 之间的区别,并看到它可能有多种解决方案。 他们使用 Python fsolve function,您可以从该非线性方程中求根。

代码(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。 图表显示红线在两个地方穿过 0 在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM