成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用Python講解偏度和峰度

開發 后端
本文主要通過statsmodels來解釋一下偏度和峰度在數據分析中的一些基本應用,想要更深入了解偏度、峰度以及statsmodels的讀者,可以自行查閱相關資料。

 [[341023]]

之前筆者在做一個金融數據項目時,有朋友問我,衡量股票收益率有沒有什么好的方法。這個問題讓筆者也思索了好久,其實股票的收益率如果我們從本質來看不就是數據嗎,無非就是收益率我們就想讓其越高越好,也就是讓這個數據增加得越多越好。而衡量數據我們經常用到的方法有均值、方差、偏度和峰度。均值和方差是我們見到和用到最多的方法,甚至在中學課本里都有提及,那么筆者今天就講一下偏度和峰度這兩個大家不太常用的方法,并結合python代碼講一下偏度和峰度在數據分析中的簡單應用。

首先還是介紹一下偏度和峰度的概念。

圖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. 數據示例

下面是代碼,首先導入需要的庫。 

  1. import pandas as pd  
  2. import matplotlib.pyplot as plt  
  3. import statsmodels.stats.api as sms  
  4. import statsmodels.formula.api as smf  
  5. from statsmodels.compat import lzip  
  6. from statsmodels.graphics.tsaplots import plot_acf 

接下來是讀取數據并作圖,這些代碼都非常簡單,筆者不做過多的解釋。 

  1. file = r'C:\Users\data.xlsx'  
  2. df = pd.read_excel(file)  
  3. fig, ax = plt.subplots(figsize=(8,6))  
  4. plt.ylabel('Loss')  
  5. plt.xlabel('Distance')  
  6. plt.plot(df['distance'], df['loss'], 'bo-', label='loss' 
  7. plt.legend()  
  8. plt.show() 

結果如圖6所示,從結果中我們可以看到這些點大致在一條直線上,那么我們就用一元線性回歸來擬合這些數據。

圖6. 數據連線圖

下面是生成模型,并輸出模型的結果。 

  1. expr = 'loss ~ distance'  
  2. results = smf.ols(expr, df).fit() #生成回歸模型  
  3. 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自帶的方法。代碼如下。 

  1. omnibus_label = ['Omnibus K-squared test', 'Chi-squared(2) p-value']  
  2. omnibus_test = sms.omni_normtest(results.resid) #omnibus檢驗  
  3. omnibus_results = lzip(omnibus_label, omnibus_test)  
  4. jb_label = ['Jarque-Bera test', 'Chi-squared(2) p-value', 'Skewness', 'Kurtosis']  
  5. jb_test = sms.jarque_bera(results.resid) #jarque_bera檢驗  
  6. jb_results = lzip(jb_label, jb_test)  
  7. print(omnibus_results)  
  8. 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。

圖8. omnibus和jb檢驗的結果

本文主要通過statsmodels來解釋一下偏度和峰度在數據分析中的一些基本應用,想要更深入了解偏度、峰度以及statsmodels的讀者,可以自行查閱相關資料。 

 

責任編輯:龐桂玉 來源: Python中文社區
相關推薦

2023-05-29 16:11:37

數據偏度數據集中

2009-12-31 10:49:34

VPN屬性

2024-10-28 15:57:34

Python函數

2018-04-16 10:12:46

Linux命令gunzip

2013-04-16 10:24:33

函數偏函數編程語言

2023-11-26 00:13:16

開源數據Logstash

2010-05-06 17:07:34

Unix命令

2018-11-27 11:18:23

PythonConu測試容器

2010-06-17 13:22:40

UML用例建模

2021-01-26 13:27:11

分布 Raft 算法

2010-06-30 17:57:08

UML用例建模

2011-04-19 09:51:27

PythonNautilus

2009-07-22 07:42:00

Scala偏應用函數

2010-05-04 15:09:29

Unix命令

2011-03-23 09:31:42

LAMP安裝LAMP配置

2023-02-24 07:42:30

Java動態代理

2010-08-06 09:38:58

RIP報文

2010-06-11 17:15:18

rsync重啟

2010-04-27 17:40:09

AIX系統

2020-02-06 13:59:48

javascript算法復雜度
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人av免费 | 91成人在线 | av色在线| 一区二区三区在线看 | 男人的天堂在线视频 | 91免费电影 | 亚洲免费在线观看视频 | 欧美日韩不卡合集视频 | 国产精品二区三区在线观看 | 91精品久久久久久久久久 | 精品国产乱码久久久久久闺蜜 | 日韩1区 | 日韩精品视频中文字幕 | 欧美日韩亚洲一区二区 | 欧美日韩亚洲视频 | 免费国产一区 | 国产丝袜一区二区三区免费视频 | 亚洲高清视频在线观看 | 999精彩视频 | 亚洲自拍偷拍欧美 | 日韩www| 国产免费观看一区 | 久久久噜噜噜久久中文字幕色伊伊 | 精品国产乱码久久久久久蜜退臀 | 香蕉视频91| 久久久久久久久久久一区二区 | 99福利在线观看 | 毛片av免费在线观看 | m豆传媒在线链接观看 | 尹人av| 久久免费观看视频 | h视频免费在线观看 | 中文字幕免费视频 | 一区二区国产精品 | 激情一区二区三区 | 精品国产不卡一区二区三区 | 毛片毛片毛片毛片毛片 | 中文字幕人成乱码在线观看 | 久久久久9999亚洲精品 | 性福视频在线观看 | 欧美黄色一级毛片 |