2017-05-29 49 views
1

我想做一個蒙特卡洛模擬,我在其上生成10個場景,每個場景的特點是在時間範圍內隨機數的到達。如何限制泊松隨機變量的樣本來模擬到達

我使用scipy.stats.poisson https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.poisson.html 生成抵達地爲每個方案的樣品,假設平均爲12

from scipy.stats import poisson 
arrivals = poisson.rvs(12, 10) 
print arrivals 

輸出的隨機數的列表:

[11 13 9 10 8 9 13 12 11 23] 

平均值是11.9這足夠好,但問題在於,在這種情況下,在最後一種情況下,有23個到達值遠離平均值12.

因爲在運行這個模擬之前我不得不選擇一個總體,所以我必須使該總體的大小足夠大以符合泊松隨機變量。 因此,假設我選擇了一個大小爲1.5 * 12 = 18的人口,不幸的是,在最後一個場景中,由於樣本大於人口本身,我會得到一個錯誤。

我的第一個問題是:爲了用Poisson隨機變量列表對這些到達進行採樣,必須選擇哪個人口的最小大小,而不會出現錯誤?

我的第二個問題是:有沒有更好的方法來使用另一個概率分佈來管理這類問題?

請注意,在這種情況下意味着= 12,但我必須模擬平均值= 57和平均值= 234的其他上下文。

回答

2

我不得不做出這樣的人口大到足以符合泊松隨機分佈隨機

Poisson distribution的大小上的所有非負整數(從0到無窮大)的定義。理論上,如果您從該分佈生成數字,您應該期望得到任何正整數,但遠離平均數(lambda)的那些出現的概率較低。例如,獲得18或更高的使用12的拉姆達參數的值的概率是3.7%:

>>> poisson.sf(18,12) 
0.037416489663391859 

因此,如果你想知道什麼是你需要使用獲得的1的最小尺寸錯誤%的模擬過程中,你可以使用逆:在一段時間內

>>> poisson.isf(0.01,12) 
21.0 

拉姆達到達的平均值,不是最大值(佔總人口的大小)。我猜想,仿真代碼不能更改爲使用樣本中的最大值。

泊松分佈似乎適合您的情況。但是,如果您想要一個反映您的規模人口中最大N的分佈,則可以調整更靈活的參數,如Beta-binomial分佈。我的建議是尋找你的現象的真實數據,然後從中調整或推導一個概率函數。一個更簡單的解決方案是通過隨機選取值來引導它。 對於統計問題,我們鼓勵您使用Cross validated

+0

謝謝@Emer我會利用你的解釋。 – piezzoritro