利用Python實現並解釋概率圖形

在使用線性迴歸時,你可能已經遇到過一種概率圖形-QQ圖

quantile-quantile)。在擬合模型之後我們應該檢查迴歸的殘差是否遵循正態分佈。並且可以通過使用如下所示的QQ圖來進行視覺驗證。

利用Python實現並解釋概率圖形

QQ圖示例

概率函數曲線的一些定義

為了充分理解概率圖的概念,我們可以快速瀏覽概率論中的一些定義:

  • 概率密度函數(PDF),它允許我們計算在屬於樣本空間的任何區間中找到隨機變量的概率。重要的是要記住連續隨機變量取精確值的概率等於0。
利用Python實現並解釋概率圖形

高斯分佈的PDF

  • 累計分佈函數(CDF),它計算隨機變量取值等於或小於給定值x的概率。當我們處理連續變量時,CDF在PDF下的區域,在負無窮大到x的範圍內。
利用Python實現並解釋概率圖形

CDF的通式,X - 隨機變量,x - 評價點

  • 分位數Quantile
    :將概率分佈範圍劃分為具有相同概率的連續區間的切點。

下圖顯示了從標準正態分佈以及PDF和CDF中提取的隨機變量的分佈。

利用Python實現並解釋概率圖形

在本文中,我將用其他兩個情況進行比較:

  • 正態分佈,均值為1,標準差為2.5 - N(1,2.5)
  • 傾斜正態分佈與alpha = 5

我以傾斜正態分佈,通過調整alpha參數(同時將比例和位置保留為默認值)來控制分佈的偏度。隨著alpha的絕對值增加,偏斜的絕對值也增加。下面我們可以通過查看從它們中提取的隨機變量的直方圖來檢查分佈的差異。

利用Python實現並解釋概率圖形

概率圖形

我們使用概率圖形來直觀地比較來自不同數據集的數據。可能涉及的比較有:

  • 兩個經驗集
  • 一個經驗和一個理論集
  • 兩個理論集

當我們將觀察到的數據與來自特定理論分佈的數據進行比較時,概率圖的最常見用途是中間的那個。我會用此變體來解釋下面的特定類型的圖,但是,它也可以應用於其他兩種情況。

PP圖

簡而言之,PP圖(probability–probability)是一種可視化,它將兩種分佈(經驗和理論)的CDF相互繪製。

利用Python實現並解釋概率圖形

從N(0,1)到標準正常的完全匹配的隨機數比較的PP圖示例

關於PP圖的一些關鍵信息:

  • 在圖上的點:假設我們有兩個分佈(f和g)和定值的一個點z,在圖上點指明瞭數據的百分比在f和g內位於或低於z。
  • 為了比較分佈,我們檢查點是否位於45度線(x = y)上。如果它們偏離,則分佈不同。
  • PP圖非常適合比較高概率密度區域,因為在這些區域中,經驗和理論CDF的變化比低概率密度區域更快。
  • PP圖需要完全指定的分佈,因此如果我們使用高斯作為理論分佈,我們應該指定位置和比例參數。
  • 更改位置或比例參數不一定保持PP圖中的線性。
  • PP圖可用於直觀地評估分佈的偏度。
  • 當分佈不重疊時,該圖可能導致奇怪的模式。因此,在比較具有附近或相同位置的概率分佈時,PP圖非常有用。下面我給出一個PP圖,比較從N(1,2.5)和N(5,1 )比較的隨機變量。
利用Python實現並解釋概率圖形

從N(1,2.5)對N(5,1)比較得出的隨機變量

QQ圖

與PP圖類似,QQ圖(quantile-quantile)允許我們通過將它們的分位數相互比較來比較分佈。

關於QQ圖的一些關鍵信息:

  • 圖上的點:圖表上的一個點對應於來自兩個分佈的某個分位數。
  • 在QQ圖上,參考線取決於理論分佈的位置和比例參數。截距和斜率分別等於位置和比例參數。
  • 點的線性模式表明給定的分佈合理地描述了經驗數據分佈。
  • QQ圖在分佈的尾部獲得非常好的分辨率但在中心部位很差。
  • QQ圖不需要指定理論分佈的位置和比例參數,因為理論分位數是根據指定的標準分佈計算的。
  • 點模式的線性度不受更改位置或比例參數的影響。
  • QQ圖可用於直觀地評估兩個分佈的位置,比例和偏度的相似性。

Python中的示例

我使用statsmodels庫來創建ProbPlot類的概率圖。

PP圖

當我開始使用statsmodels創建一些PP圖時,我注意到了一個問題 :因為我將N(1,2.5)中的隨機抽取與標準法線進行比較,圖表是完美契合的,但他們卻不應該這樣。我嘗試調查此問題並在StackOverflow上發現了一篇文章,該文章解釋了為什麼即使我們提供了一些值,但當前實現總是試圖估計理論分佈的位置和比例參數。所以在上面的例子中,經驗數據是來自正態分佈,而不是我們指定的。

這就是為什麼我編寫了一個函數,用於將經驗數據與提供參數的理論分佈直接比較。

讓我們首先嚐試使用statsmodels和pp圖比較,從N(1,2.5)到N(0,1)的隨機抽取。我們看到,在statsmodels的情況下,它是完美的擬合,因為函數估計了正態分佈的位置和比例參數。當檢查pp圖的結果時,我們看到分佈顯著不同,這也可以在直方圖上觀察到。

利用Python實現並解釋概率圖形

N(1,2.5)與標準正態的PP圖

我們也嘗試解釋PP圖的形狀。為此,我將再次顯示圖表以及直方圖。沿x軸的水平移動是由於分佈不完全重疊的事實引起的。當該點高於參考線時,意味著理論分佈的CDF值高於經驗值的CDF值。

利用Python實現並解釋概率圖形

下一個案例是將偏斜正態的隨機抽取與標準正態值進行比較。我們看到來自statsmodels的圖表意味著它不是一個完美的匹配,因為它很難找到正態分佈的位置和比例參數,這些參數解釋了所提供數據的偏度。該圖還顯示標準正常的CDF值始終高於所考慮的偏差正態分佈的值。

利用Python實現並解釋概率圖形

偏斜正態(alpha = 5)與標準正常的PP圖

注意:我們也可以使用statsmodels獲得完美契合。為此,我們需要將ProbPlot中的理論分佈指定為skewnorm,並傳遞一個額外的參數distargs =(5,)來指示alpha的值。

QQ圖

讓我們首先將偏斜正態分佈與標準正態分佈(使用ProbPlot的默認設置)進行比較。

利用Python實現並解釋概率圖形

偏斜正態(alpha = 5)與標準正態的QQ圖

可以觀察到的第一件事是點形成曲線而不是直線,這通常表示樣本數據中的偏度。解釋圖的另一種方法是查看分佈的尾部。在這種情況下,所考慮的偏斜正態分佈具有較輕的左尾和較重的右尾而不是一個可以預期標準正態分佈。我們需要記住偏移的分佈是變動的,因此這些結果符合我們的預期。

我還想快速瀏覽同一練習的兩個其他變體。在第一個中,我將理論分佈指定為斜正態,並在distargs中傳遞alpha = 5 。這導致下面的圖,我們在其上看到線性圖案。然而,線條圖案基本上是45度線,表明良好的擬合。

利用Python實現並解釋概率圖形

偏斜正態(alpha = 5)與標準正態(alpha = 5)的QQ圖

第二種方法是比較兩個經驗樣本: 一個來自偏斜正態(alpha = 5),第二個來自標準正態。我設置fit = False以關閉位置,比例和distrargs的自動擬合。

結果似乎與初始方法一致。

利用Python實現並解釋概率圖形

使用股票回報的示例

我還想展示一個使用QQ圖來評估微軟股票價格是否遵循正態分佈的實際例子。結論是尾部的質量肯定更多,而不是正常情況下的假設。

利用Python實現並解釋概率圖形

MSFT與Norma Distribution的回報

進一步的實施細節

在qq圖的方法中,我們可以指定希望能生成什麼樣的參考線,種類有:

  • s - 標準化線(預期訂單統計數據按給定樣本的標準偏差進行縮放,並將平均值添加到它們中)
  • q - 線穿過四分位數
  • r - 迴歸線
  • 45 - y = x行(如PP圖中使用的那一行)

下面我展示了三種方法的比較,我們可以看到它們非常相似。

利用Python實現並解釋概率圖形

在處理QQ圖時,我們還可以使用statsmodel的另一個特徵,它採用非超出概率代替理論分位數。

利用Python實現並解釋概率圖形


分享到:


相關文章: