我想创建一个泊松分布,均值为2个元素数量为10000,最小值为1,尾值为140到目前为止我只能指定最小值
stats.poisson.rvs( 2, loc = 1,size=10000)
如何以140而不是11
结束答案 0 :(得分:4)
平均等于2的泊松分布中的样本大于140的可能性非常小,以至于您不会得到10000个样本中的一个。
实际上,泊松分布只有一个参数λ和一个概率质量函数定义为
P(x=k) = λ^k * exp(-λ) / k!
平均值也等于λ。如果λ= 2那么
P(x=140) = 7.7e-199
因此,如果有10000个样本,则至少有一个样本的可能性 10000中的140个将小于7.7e-195。这是一个非常小的数字,你不能指望它会在一生中发生。
计算出λ= 2的Poisson分布样本高于140的概率有点难。您可以使用scipy.stats.poisson.cdf
来查看
P(x>=22) = 1 - scipy.stats.poisson.cdf(21,2) = 5.5e-16
因此,即使您在21岁以上的样本中有一个样本的机会小于5.5e-12也是如此。由于中间结果中的浮点舍入,以相同方式计算P(x>=140)
将返回0。
<强>结论强>
如果您希望分布均值等于2.0,并且10000个样本上的重尾达到140,则需要与泊松不同的分布。你可以考虑Pareto分布,scipy.stats.pareto
参数b = 2。
以下是来自
的10000个随机样本的比较scipy.stats.poisson.rvs(2,size=10000)
和
numpy.rint(scipy.stats.pareto.rvs(2,size=10000))
很明显,具有相同均值的帕累托分布具有更重的尾部。
作为参考,情节的代码在
之下import matplotlib.pyplot as plt
import scipy.stats
import numpy as np
pareto_x = np.rint(scipy.stats.pareto.rvs(2,size=10000))
poisson_x = scipy.stats.poisson.rvs(2,size=10000)
plt.figure(figsize=(8,4))
plt.subplot(121)
plt.title("Poisson distribution, a = 2")
plt.xlabel("sample number")
plt.ylabel("sample value")
plt.axis([0,10000,0,180])
plt.plot(range(0,10000),poisson_x,"o")
plt.subplot(122)
plt.axis([0,10000,0,180])
plt.title("Pareto distribution, b = 2")
plt.xlabel("sample number")
plt.plot(range(0,10000),pareto_x,"o")
plt.subplots_adjust(hspace=0.4,bottom=0.2)
plt.savefig("poisson_pareto.png")