我想創建與均值的泊松分佈是2數目的元素爲10000具有最小值1和尾部值140到目前爲止我只能指定分鐘如何在scipy.stats中指定泊松分佈的尾部值?
stats.poisson.rvs(2, loc = 1,size=10000)
我怎樣才能使它結束在140而不是11
我想創建與均值的泊松分佈是2數目的元素爲10000具有最小值1和尾部值140到目前爲止我只能指定分鐘如何在scipy.stats中指定泊松分佈的尾部值?
stats.poisson.rvs(2, loc = 1,size=10000)
我怎樣才能使它結束在140而不是11
一個平均等於2的泊松分佈樣本大於140的樣本很小,以至於你不能從10000個樣本中得到一個樣本。
事實上,泊松分佈只有一個參數λ和所定義的概率質量函數,使得
P(x=k) = λ^k * exp(-λ)/k!
平均值也等於λ。如果λ= 2,則
P(x=140) = 7.7e-199
因此,如果有10000個樣品的機會,將有在140是至少一個樣品 出的10000將小於7.7E-195。這是一個非常小的數字,你不能指望在一生中發生這種情況。
這是一個有點難以計算,一個樣品出來與λ= 2個的謊言泊松分佈的140以上可以使用scipy.stats.poisson.cdf
看到
P(x>=22) = 1 - scipy.stats.poisson.cdf(21,2) = 5.5e-16
因此,即使有機會,你將有概率10000以上21中的一個樣本小於5.5e-12。以相同的方式計算P(x>=140)
將返回0,因爲中間結果中的浮點四捨五入。
結論
如果你想分佈均值等於2.0,和重尾達到高達140上10000樣本,需要從不同的泊松分佈。你可以考慮帕累託分佈,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")
這是非常有用的,你可以請張貼您用於創建此圖 –
@AyaAbdelsalam更新後的代碼 –
也許值得指出的代碼顯而易見:泊松分佈沒有最大值。正如你所說,問題是你願意考慮「低到足夠低」來定義「最大值」的概率有多低,以便所有更高的值具有「足夠低」的概率。 – BrenBarn