首先還是介紹一下偏度和峰度的概念。
圖1. 偏度和峰度公式
偏度(skewness)又稱偏態、偏態系數,是描述數據分布偏斜方向和程度的度量,其是衡量數據分布非對稱程度的數字特征。對于隨機變量X,其偏度是樣本的三階標準化矩,計算公式如圖1中的式(1)所示。
偏度的衡量是相對于正態分布來說,正態分布的偏度為0。因此我們說,若數據分布是對稱的,偏度為0;若偏度>0,則可認為分布為右偏,也叫正偏,即分布有一條長尾在右;若偏度<0,則可認為分布為左偏,也叫負偏,即分布有一條長尾在左。正偏和負偏如圖2所示,在圖2中,左邊的就是正偏,右邊的是負偏。
圖2. 偏度的示意圖
而峰度(Kurtosis)則是描述數據分布陡峭或平滑的統計量,通過對峰度的計算,我們能夠判定數據分布相對于正態分布而言是更陡峭還是平緩。對于隨機變量X,其峰度為樣本的四階標準中心矩,計算公式如圖1中的式2所示。
當峰度系數>0,從形態上看,它相比于正態分布要更陡峭或尾部更厚;而峰度系數<0,從形態上看,則它相比于正態分布更平緩或尾部更薄。在實際環境當中,如果一個分部是厚尾的,這個分布往往比正態分布的尾部具有更大的“質量”,即含又更多的極端值。我們常用的幾個分布中,正態分布的峰度為0,均勻分布的峰度為-1.2,指數分布的峰度為6。
峰度的示意圖如圖3所示,其中第一個子圖就是峰度為0的情況,第二個子圖是峰度大于0的情況,第三個則是峰度小于0。
圖3. 峰度的示意圖
在說完基本概念之后,我們就再講一下怎么基于偏度和峰度進行正態性檢驗。這里主要有兩種方法,一是Omnibus檢驗,二是Jarque - Bera檢驗。
圖4. Omnibus和JB檢驗的公式
Omnibus檢驗的公式如圖4中公式(3)所示,式中Z1和Z2是兩個正態化函數,g1和g2則分別是偏度和峰度,在Z1和Z2的作用下,K的結果就接近于卡方分布,我們就能用卡方分布來檢驗了。這個公式的原理比較復雜,大家如想了解可自行查找相關資料。
Jarque - Bera檢驗的公式如圖4中公式(4)所示,式中n是樣本量,這個結果也是接近于卡方分布,其原理也不在這里贅述。這兩個檢驗都是基于所用數據是正態分布的,即有如下假設。
原假設H0:數據是正態分布的。
備擇假設H1:數據不是正態分布。
下面我們用代碼來說明一下偏度和峰度。
首先看一下數據,這個數據很簡單,只有15行2列。數據描述的是火災事故的損失以及火災發生地與最近消防站的距離,前者單位是千元,后者單位是千米,數據如圖5所示。其中distance指火災發生地與最近消防站的距離,loss指火災事故的損失。
圖5. 數據示例
下面是代碼,首先導入需要的庫。
importpandasaspdimportmatplotlib.pyplotaspltimportstatsmodels.stats.apiassmsimportstatsmodels.formula.apiassmffromstatsmodels.compatimportlzipfromstatsmodels.graphics.tsaplotsimportplot_acf
接下來是讀取數據并作圖,這些代碼都非常簡單,筆者不做過多的解釋。
file=r'C:\Users\data.xlsx'df=pd.read_excel(file)fig,ax=plt.subplots(figsize=(8,6))plt.ylabel('Loss')plt.xlabel('Distance')plt.plot(df['distance'],df['loss'],'bo-',label='loss')plt.legend()plt.show()
結果如圖6所示,從結果中我們可以看到這些點大致在一條直線上,那么我們就用一元線性回歸來擬合這些數據。
圖6. 數據連線圖
下面是生成模型,并輸出模型的結果。
expr='loss~distance'results=smf.ols(expr,df).fit()#生成回歸模型print(results.summary())
結果如圖7所示。從圖中我們可以看到,Prob (F-statistic)的值為1.25e-08,這個值非常小,說明我們的一元線性回歸模型是正確的,也就是loss和distance的線性關系是顯著的。而圖中還可以看到Skew=-0.003,說明這部分數據非常接近正態分布,而Kurtosis=1.706,說明我們的數據比正態分布更陡峭,是一個尖峰。此外,從圖中還可以看到Omnibus=2.551,Prob(Omnibus)=0.279,Jarque-Bera (JB)=1.047,Prob(JB)=0.592,這里我們很難直接從Omnibus和Jarque-Bera的數值來判斷是否支持前面的備擇假設,但我們可以從Prob(Omnibus)和Prob(JB)這兩個數值來判斷,因為這兩個數值都比較大,那么我們就無法拒絕前面的原假設,即H0是正確的,說明我們的數據是服從正態分布的。
圖7. 模型結果說明
接下來我們再驗證一下Skew、Kurtosis、Omnibus和Jarque-Bera (JB)這些數值,用的是statsmodels自帶的方法。代碼如下。
omnibus_label=['OmnibusK-squaredtest','Chi-squared(2)p-value']omnibus_test=sms.omni_normtest(results.resid)#omnibus檢驗omnibus_results=lzip(omnibus_label,omnibus_test)jb_label=['Jarque-Beratest','Chi-squared(2)p-value','Skewness','Kurtosis']jb_test=sms.jarque_bera(results.resid)#jarque_bera檢驗jb_results=lzip(jb_label,jb_test)print(omnibus_results)print(jb_results)
這里omnibus_label和jb_label是兩個list,里面包含了我們所要檢驗的項目名稱,sms.omni_normtest就是statsmodels自帶的omnibus檢驗方法,sms.jarque_bera就是statsmodels自帶的jarque_bera檢驗方法。results.resid是殘差值,一共有15個值,我們的數據本身就只有15個點,這里的每個殘差值就對應前面的每個數據點,sms.omni_normtest和sms.jarque_bera就是通過殘差值來進行檢驗的。而lzip這個方法很少見,其用法和python中原生函數zip差不多,筆者在這里更多地是想讓大家了解statsmodels,所以用了lzip,這里直接用zip也是可以的,至于lzip和zip的區別,留給大家自行去學習。而上面得到的結果如圖8所示。從圖8中可以看到,我們得到的結果和前面圖7中的結果一模一樣。這里用sms.omni_normtest和sms.jarque_bera來進行驗證,主要是對前面圖7中的結果的一個解釋,幫助大家更好地學習statsmodels。
到此,關于“怎么用Python講解偏度和峰度”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注本站網站,小編會繼續努力為大家帶來更多實用的文章!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
保本型理財產品有哪些?1、國債:國債保本保收益,由國家發行,是最安全的投資工具,但是收益不高,期限不等,共有1、3、5、7、10這5個期限。2、保險類:保本保收益,投資期限比較長,收益一般比同期國債高出2%左右,與國債的區別就是,保險類的有保險特質。3、保本型基金:保本型基金的核心就是保本,對期限要求較高,若沒有到期就贖回的話,不但不保本,還要承擔基金凈值波動的風險,與銀行存款或國債投資相比,保本...
據百科資料顯示,紐諾教育是廣州紐諾教育科技有限公司旗下的教育品牌。廣州紐諾教育科技有限公司于2016年01月11日成立。法定代表人王榮輝。紐諾教育是嬰幼兒服務及教育機構,總部在廣州 ,是一家致力于為0-6歲寶寶家庭提供線上線下一站式嬰幼兒托育服務的教育品牌。紐諾教育擁有紐諾·艾瑪國際保育園、育兒在線課程、嬰幼兒睡眠顧問職業培訓以及嬰幼兒養育上門服務四大核心業務。品牌的創立起源于創始人...
去年ks里涌現出一個叫東方阿寶的土豪,瘋狂在各大網絡名人的直播間刷禮物,獲利700多萬。無論你進平臺上哪個網絡名人工作室,對方都要為了錢叫東方寶“寶哥”。據網友統計,東方阿寶在ks上累計送禮上億。粉漲之后,東方阿寶從神壇跌落,成為粉絲和網絡名人口中的“東方阿寶”。從外形上看,東方阿寶已經老到可以叫“爺爺”了。人崩潰的原因是東方Po太喜歡吹牛了。本來大家都知道他有錢是因為他花了很多錢買禮物,但是為了...