Q-Q圖原理詳解及Python實現

導讀在以前的《數據挖掘概念與技術 第2章》的文章中咱們介紹了Q-Q圖的概念,而且經過調用現成的python函數, 畫出了Q-Q圖, 驗證了Q-Q圖的兩個主要做用,1. 檢驗一列數據是否符合正態分佈 2. 檢驗兩列數據是否符合同一分佈本篇文章將更加全面的爲你們介紹QQ圖的原理以及本身手寫函數實現畫圖過程
本文的代碼文件(jupyter)和數據文件能夠在咱們的公衆號"數據臭皮匠" 中回覆"QQ圖"獲取

Q-Q圖是什麼python

QQ圖是quantile-quantile(分位數-分位數圖) 的簡稱,上面也有介紹它的兩個主要做用:
1.檢驗一列數據是否符合正態分佈
2.檢驗兩列數據是否符合同一分佈
 
Q-Q圖的原理
要弄清Q-Q圖的原理,咱們先來介紹下分位數的概念。這裏咱們引用下百度百科的介紹:
分位數, 指的就是連續分佈函數中的一個點,這個點對應機率p。若機率0<p<1,隨機變量X或它的機率分佈的分位數Za,是指知足條件p(X≤Za)=α的實數。
 
What...?? 是否是感受有點抽象,彆着急,咱們繼續往下看分位數的實例-百分位數。
 
百分位數,統計學術語,若是將一組數據從小到大排序,並計算相應的累計百分位,則某一百分位所對應數據的值就稱爲這一百分位的百分位數。可表示爲:一組n個觀測值按數值大小排列。如,處於p%位置的值稱第p百分位數。
給你們舉個例子:初三年級有1000名學生, 期末考試成績按照從高到低的順序排列, 排名第10的同窗, 恰好位於全校1000名同窗的1%處, 他的分數就是全校期末考試分數的第1百分位數, 記爲P1, 同理, 第20名同窗對應的分數就是第2百分位數P2, ... 第990名同窗的分數爲第99百分位數 P99。
 
那麼Q-Q圖的原理就是,經過把一列樣本數據的分位數與已知分佈的一列數據的分位數相比較,從而來檢驗數據的分佈狀況。因此, Q-Q圖的兩個功能都是比較兩列數據的分位數是否分佈在y=x的直線上。當兩列數據行數相同時, 首先將兩列數據分別從高到低排序, 直接畫散點圖就能夠了, 當兩列數據行數不同時, 須要分別計算出每列數據的百分位數, 再將兩列數據的百分位數畫散點圖, 檢查散點圖是否分佈在y=x直線附近。
 
檢驗數據是否符合正態分佈
咱們接下來的實例數據及引用自自kaggle的Students Performance in Exams , 你能夠在咱們公衆號後臺回覆"QQ圖"來獲取它。
首先來介紹一下咱們的數據集。數據共1000行, 8列, 每行表明一名學生的屬性信息, 最後三列爲三科成績, 分別是: 'math score', 'reading score', 'writing score' , 咱們將只適用最後三列的分數, 驗證學生分數是否符合正態分佈
咱們先經過調用python包來畫QQ圖 檢驗是否符合正態分佈
能夠看到, 學生的三科總分與標準正態分佈的數值畫出的散點圖, 基本分佈在一條直線附近, 能夠認爲學生分數符合正態分佈, 但不是標準正態分佈,詳細分析咱們在下文會講到。
接下來,咱們經過手動畫Q-Q圖 來實現檢驗數據是否符合正態分佈
當兩列數據行數相同時,直接將分別排序後的兩列數值畫散點圖
能夠看到, 咱們畫出了和統計包幾乎同樣的QQ圖(最左側和最右側之間的差別, 是因爲正態分佈變量是隨機產生的, 每次都會有一些不一樣)
 
直接將分別排序後的兩列數值畫散點圖, 好像不能體現Q-Q圖的本質, 咱們接下來取0到100的500個分位數,畫圖看下狀況
咱們畫出了和上面幾乎同樣的圖, 可是能夠看到, 右側的點分佈在在直線下方, 結果是符合直覺的, 由於正態分佈的數據在最右側須要有一些比較大的數字, 可是學生成績被總分300 限制住了, 這就印證了一句話,學霸只能考100是由於滿分只有100
 
檢驗兩列數據是否符合同一分佈
兩列數據行數相同時
兩列數據行數不一樣時
能夠看到, 'math score' 和 'reading score' 兩列的分位數分佈在y=x 直線附近, 咱們能夠認爲兩列數據符合同一分佈。
 
符合正態和標準正態分佈的區別
在上面檢驗數據是否符合正態分佈時,咱們說, 學生分數符合正態分佈, 但不是標準正態分佈。是由於經過仔細觀察會發現, 散點圖並非沿着y=x 線分佈, 而是沿着 y=ax+b 分佈, 即, 一條有截距且有斜率的直線。
Q-Q散點圖是沿着y=x分佈時, 符合標準正態分佈
Q-Q散點圖沿y=ax+b分佈時, 符合正態分佈, 但非標準正態分佈
能夠看到, 散點圖基本在y = ax+b 的附近分佈, 這時咱們能夠說,score_tol 列符合正態分佈, 但不是標準正太分佈。
通常認爲,Q-Q圖的散點須要分佈在y=x 直線附近才認爲符合正態分佈, 爲何散點圖分佈在y=ax+b附近, 仍然能夠認爲, score_tol 符合正態分佈呢? 由於, 從圖中能夠看到, score_tol 列能夠寫成正態分佈的列val 的線性函數 score_tol = a * val + b 而正態分佈的性質決定了, 若是一個變量x服從正態分佈, 那麼他的函數ax+b 也符合正態分佈。
本文的Python代碼和數據文件能夠在咱們的公衆號"數據臭皮匠" 中回覆"QQ圖"獲
 
關注公衆號:數據臭皮匠;得到更多精彩內容

做者:範小匠函數

審覈:灰灰匠動畫

編輯:森匠spa

相關文章
相關標籤/搜索