R程式語言已經成為統計分析中的事實標準。但在這篇文章中,我將告訴你在Python中實現統計學概念會是如此容易。我要使用Python實現一些離散和連續的概率分佈。雖然我不會討論這些分佈的數學細節,但我會以連結的方式給你一些學習這些統計學概念的好資料。在討論這些概率分佈之前,我想簡單說說什麼是隨機變數(random variable)。隨機變數是對一次試驗結果的量化。
舉個例子,一個表示拋硬幣結果的隨機變數可以表示成
1 2 |
X = {1 如果正面朝上, 2 如果反面朝上} |
隨機變數是一個變數,它取值於一組可能的值(離散或連續的),並服從某種隨機性。隨機變數的每個可能取值的都與一個概率相關聯。隨機變數的所有可能取值和與之相關聯的概率就被稱為概率分佈(probability distributrion)。
我鼓勵大家仔細研究一下scipy.stats
模組。
概率分佈有兩種型別:離散(discrete)概率分佈和連續(continuous)概率分佈。
離散概率分佈也稱為概率質量函式(probability mass function)。離散概率分佈的例子有伯努利分佈(Bernoulli distribution)、二項分佈(binomial distribution)、泊松分佈(Poisson distribution)和幾何分佈(geometric distribution)等。
連續概率分佈也稱為概率密度函式(probability density function),它們是具有連續取值(例如一條實線上的值)的函式。正態分佈(normal distribution)、指數分佈(exponential distribution)和β分佈(beta distribution)等都屬於連續概率分佈。
若想了解更多關於離散和連續隨機變數的知識,你可以觀看可汗學院關於概率分佈的視訊。
二項分佈(Binomial Distribution)
服從二項分佈的隨機變數X表示在n個獨立的是/非試驗中成功的次數,其中每次試驗的成功概率為p。
E(X) = np, Var(X) = np(1−p)
如果你想知道每個函式的原理,你可以在IPython筆記本中使用help file命令。 E(X)表示分佈的期望或平均值。
鍵入stats.binom?
瞭解二項分佈函式binom
的更多資訊。
二項分佈的例子:拋擲10次硬幣,恰好兩次正面朝上的概率是多少?
假設在該試驗中正面朝上的概率為0.3,這意味著平均來說,我們可以期待有3次是硬幣正面朝上的。我定義擲硬幣的所有可能結果為k = np.arange(0,11)
:你可能觀測到0次正面朝上、1次正面朝上,一直到10次正面朝上。我使用stats.binom.pmf
計算每次觀測的概率質量函式。它返回一個含有11個元素的列表(list),這些元素表示與每個觀測相關聯的概率值。
您可以使用.rvs
函式模擬一個二項隨機變數,其中引數size
指定你要進行模擬的次數。我讓Python返回10000個引數為n和p的二項式隨機變數。我將輸出這些隨機變數的平均值和標準差,然後畫出所有的隨機變數的直方圖。
泊松分佈(Poisson Distribution)
一個服從泊松分佈的隨機變數X,表示在具有比率引數(rate parameter)λ的一段固定時間間隔內,事件發生的次數。引數λ告訴你該事件發生的比率。隨機變數X的平均值和方差都是λ。
E(X) = λ, Var(X) = λ
泊松分佈的例子:已知某路口發生事故的比率是每天2次,那麼在此處一天內發生4次事故的概率是多少?
讓我們考慮這個平均每天發生2起事故的例子。泊松分佈的實現和二項分佈有些類似,在泊松分佈中我們需要指定比率引數。泊松分佈的輸出是一個數列,包含了發生0次、1次、2次,直到10次事故的概率。我用結果生成了以下圖片。
你可以看到,事故次數的峰值在均值附近。平均來說,你可以預計事件發生的次數為λ。嘗試不同的λ和n的值,然後看看分佈的形狀是怎麼變化的。
現在我來模擬1000個服從泊松分佈的隨機變數。
正態分佈(Normal Distribution)
正態分佈是一種連續分佈,其函式可以在實線上的任何地方取值。正態分佈由兩個引數描述:分佈的平均值μ和方差σ2 。
E(X) = μ, Var(X) = σ2
正態分佈的取值可以從負無窮到正無窮。你可以注意到,我用stats.norm.pdf
得到正態分佈的概率密度函式。
β分佈(Beta Distribution)
β分佈是一個取值在 [0, 1] 之間的連續分佈,它由兩個形態引數α和β的取值所刻畫。
β分佈的形狀取決於α和β的值。貝葉斯分析中大量使用了β分佈。
當你將引數α和β都設定為1時,該分佈又被稱為均勻分佈(uniform distribution)。嘗試不同的α和β取值,看看分佈的形狀是如何變化的。
指數分佈(Exponential Distribution)
指數分佈是一種連續概率分佈,用於表示獨立隨機事件發生的時間間隔。比如旅客進入機場的時間間隔、打進客服中心電話的時間間隔、中文維基百科新條目出現的時間間隔等等。
我將引數λ設定為0.5,並將x的取值範圍設定為 $[0, 15]$ 。
接著,我在指數分佈下模擬1000個隨機變數。scale
參數列示λ的倒數。函式np.std
中,引數ddof
等於標準偏差除以 $n-1$ 的值。
結語(Conclusion)
概率分佈就像蓋房子的藍圖,而隨機變數是對試驗事件的總結。我建議你去看看哈佛大學資料科學課程的講座,Joe Blitzstein教授給了一份摘要,包含了你所需要了解的關於統計模型和分佈的全部。