python-指數分佈介紹(scipy.stats.expon)

一、指數分佈問題:

有一種品牌的路由器,據廠家統計知該路由器平均壽命是50000小時,現在有2個問題:

1、去年我買了一個這樣的路由器,使用到現在已經8000小時了一點問題都沒有,那我這臺路由器還能用40000小時以上的概率是多少?

2、 我現在推薦鄰居也買了一個這樣的路由器,鄰居這臺路由器可以用40000小時以上的概率是多少?

 

二、 指數分佈

泊松分佈描述的是事件發生次數,而指數分佈描述的是事件發生的時間間隔。

指數分佈主要用於描述電子元器件的壽命,其爲連續型分佈,概率密度函數爲:

f(x)=\left\{\begin{matrix}\lambda e^{-\lambda x}, x>0 \\ 0, x\leqslant 0 \end{matrix}\right.

分佈函數爲:

F(x)=\left\{\begin{matrix}1-e^{-\lambda x}, x>0 \\ 0, x\leqslant 0 \end{matrix}\right.

期望: \frac{1}{\lambda },   方差: \frac{1}{\lambda^{2} }

\lambda表示事件發生的頻率,在這裏路由器平均壽命是50000小時,那麼可以認爲路由器平均50000小時壞一次,那麼路由器壞的頻率是\lambda=1/50000。

此外,指數分佈有一個十分重要的性質,無記憶性:

P\left \{ X>s+t|X>s \right \}=P\left \{ X>t \right \}

在上面問題中,路由器已使用時間與後續還能使用的時間無關,即我的路由器與鄰居家的路由器後續使用壽命是沒有差別的,即問題1和2的概率是一樣的。

 

三、概率密度圖

用python計算概率密度,可以直接使用公式計算,或者用scipy.stats.expon計算:

from scipy import stats
import math
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei']#用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號

r = 1/50000
X = []
Y = []
for x in np.linspace(0, 1000000, 100000):
    if x==0:
        continue
 #   p = r*math.e**(-r*x)  #直接用公式算
    p = stats.expon.pdf(x, scale=1/r)  #用scipy.stats.expon工具算,注意這裏scale參數是標準差
    X.append(x)
    Y.append(p)
plt.plot(X,Y)
plt.xlabel("間隔時間")
plt.ylabel("概率密度")
plt.show()

結果:

針對這個圖該如何理解呢?連續型隨機變量的概率密度在某個點的概率密度並不是在這一點發生的概率。這裏引用一張圖

這張圖說明事件發生的時間間隔大於1的概率是0.37,那麼時間間隔小於1的概率是0.63,這一點用下面的累積概率分佈來看更直觀。

 

四、累積概率分佈(查表)

累積概率用stats.expon.cdf(x, scale=1/r)計算,當然也可以用公式計算。

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei']#用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號

r = 1/50000
X = []
Y = []
for x in np.linspace(0, 1000000, 100000):
    if x==0:
        continue
    p = stats.expon.cdf(x, scale=1/r)  #用scipy.stats.expon工具算,注意這裏scale參數是標準差
    X.append(x)
    Y.append(p)
plt.plot(X,Y)
plt.xlabel("間隔時間")
plt.ylabel("累積概率")
plt.show()

結果:

 用累積概率查表x=40000的值:

p = stats.expon.cdf(40000, scale=50000)
print(p)

結果是:0.5506710358827784

也就是說事件發生時間間隔小於40000的概率是0.55067,那麼問題1和2路由器在40000小時內壞的概率是0.55067,相應的可以使用40000小時以上的概率是1-0.55067=0.44933。

 

五、再來2個問題

醫院平均每小時出生3個嬰兒,問:

1、接下來15分鐘有嬰兒出生的概率是多少?

2、在接下來的15~30分鐘內有嬰兒出生的概率是多少?

問題1:

這裏嬰兒出生頻率\lambda =3,查表

p = stats.expon.cdf(15/60, scale=1/3)
print(p)

結果:0.5276334472589853

表明在15分鐘內有嬰兒出生的概率是0.5276。

注意這裏只是表明有嬰兒出生的概率是0.5276,並沒有指定有多少個嬰兒出生,更沒有表明有1個嬰兒出生的概率是0.5276。

問題2:

由於指數分佈是無記憶的,在接下來的15~30分鐘內一共15分鐘,有嬰兒出生的概率與問題1概率一樣,都是0.5276。

有些人不理解這個意思,錯誤的用cdf(30/60)-cdf(15/60)

p15 = stats.expon.cdf(15/60, scale=1/3)
p30 = stats.expon.cdf(30/60, scale=1/3)
print(p30-p15)

結果:0.2492363925925849

這個結果並不表明在接下來的15~30分鐘內有嬰兒出生的概率。

而是表明在0~15分鐘內沒有嬰兒出生並且在15~30分鐘內有嬰兒出生的概率是0.2492,或者表明接下來出生的第一個孩子時間在15~30分鐘的概率是0.2492。

 

 

author:藍何忠

email:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章