方差、標准差和協方差三者之間的定義與計算


理解三者之間的區別與聯系,要從定義入手,一步步來計算,同時也要互相比較理解,這樣才夠深刻。

 

方差

方差是各個數據與平均數之差的平方的平均數。在概率論和數理統計中,方差(英文Variance)用來度量隨機變量和其數學期望(即均值)之間的偏離程度。在許多實際問題中,研究隨機變量和均值之間的偏離程度有着很重要的意義。

 

標准差

方差開根號。

 

協方差

在概率論和統計學中,協方差用於衡量兩個變量的總體誤差。而方差是協方差的一種特殊情況,即當兩個變量是相同的情況。

可以通俗的理解為:兩個變量在變化過程中是否同向變化?還是反方向變化?同向或反向程度如何?

你變大,同時我也變大,說明兩個變量是同向變化的,這是協方差就是正的。

你變大,同時我變小,說明兩個變量是反向變化的,這時協方差就是負的。

如果我是自然人,而你是太陽,那么兩者沒有相關關系,這時協方差是0。

從數值來看,協方差的數值越大,兩個變量同向程度也就越大,反之亦然。

可以看出來,協方差代表了兩個變量之間的是否同時偏離均值,和偏離的方向是相同還是相反。

公式:如果有X,Y兩個變量,每個時刻的“X值與其均值之差”乘以“Y值與其均值之差”得到一個乘積,再對這每時刻的乘積求和並求出均值,即為協方差。

 

方差,標准差與協方差之間的聯系與區別:

1. 方差和標准差都是對一組(一維)數據進行統計的,反映的是一維數組的離散程度;而協方差是對2組數據進行統計的,反映的是2組數據之間的相關性。

2. 標准差和均值的量綱(單位)是一致的,在描述一個波動范圍時標准差比方差更方便。比如一個班男生的平均身高是170cm,標准差是10cm,那么方差就是10cm^2。可以進行的比較簡便的描述是本班男生身高分布是170±10cm,方差就無法做到這點。

3. 方差可以看成是協方差的一種特殊情況,即2組數據完全相同。

4. 協方差只表示線性相關的方向,取值正無窮到負無窮。

 

利用實例來計算方差、標准差和協方差

樣本數據1:滬深300指數2017年3月份的漲跌額(%), [0.16,-0.67,-0.21,0.54,0.22,-0.15,-0.63,0.03,0.88,-0.04,0.20,0.52,-1.03,0.11,0.49,-0.47,0.35,0.80,-0.33,-0.24,-0.13,-0.82,0.56]

 

1. 計算滬深300指數2017年3月份的漲跌額(%)的方差

# Sample Date - SH000300 Earning in 2017-03

datas = [0.16, -0.67, -0.21, 0.54, 0.22, -0.15, -0.63, 0.03, 0.88, -0.04, 0.20, 0.52, -1.03, 0.11, 0.49, -0.47, 0.35, 0.80, -0.33, -0.24, -0.13, -0.82, 0.56]

mean1 = sum(datas)/len(datas) # result =  0.0060869565217391355

square_datas = []

for i in datas:

square_datas.append((i-mean1)*(i-mean1))

variance = sum(square_datas)/len(square_datas)

print(str(variance))

# result = 0.25349338374291114

 

# 當然如果你使用了numpy,那么求方差將會十分的簡單:

import numpy as np

datas = [0.16, -0.67, -0.21, 0.54, 0.22, -0.15, -0.63, 0.03, 0.88, -0.04, 0.20, 0.52, -1.03, 0.11, 0.49, -0.47, 0.35, 0.80, -0.33, -0.24, -0.13, -0.82, 0.56]

variance = np.var(datas)

print(str(variance))

# result = 0.253493383743

 

 

2. 計算滬深300指數2017年3月份的漲跌額(%)的標准差

import math

# Sample Date - SH000300 Earning in 2017-03

datas = [0.16, -0.67, -0.21, 0.54, 0.22, -0.15, -0.63, 0.03, 0.88, -0.04, 0.20, 0.52, -1.03, 0.11, 0.49, -0.47, 0.35, 0.80, -0.33, -0.24, -0.13, -0.82, 0.56]

mean1 = sum(datas)/len(datas)

square_datas = []

for i in datas:

    square_datas.append((i-mean1)*(i-mean1))

variance = sum(square_datas)/len(square_datas)

standard_deviation = math.sqrt(variance)

print(str(standard_deviation))

# result = 0.5034812645401129

 

#當然如果你使用了numpy,那么求標准差將會十分的簡單:

import numpy as np

# Sample Date - SH000300 Earning in 2017-03

datas = [0.16, -0.67, -0.21, 0.54, 0.22, -0.15, -0.63, 0.03, 0.88, -0.04, 0.20, 0.52, -1.03, 0.11, 0.49, -0.47, 0.35, 0.80, -0.33, -0.24, -0.13, -0.82, 0.56]

standard_deviation2 = np.std(datas, ddof = 0)

print(str(standard_deviation2))

# result =0.50348126454

 

 

請注意  ddof = 0 這個參數,這個是很重要的,只是稍后放在文末說明,因為雖然重要,但是卻十分好理解。

 

3.  計算滬深300指數2017年3月份的漲跌額(%)與 格力電器(SZ:000651) 2017年3月份的漲跌額(%)之間的協方差

協方差是計算兩組數據之間的關系,所以要引入第二個樣本,即格力電器(SZ:000651) 2017年3月份的漲跌額(%)

import math

 

# Sample Date - SH000300 Earning in 2017-03

datas_sh000300 = [0.16, -0.67, -0.21, 0.54, 0.22, -0.15, -0.63, 0.03, 0.88, -0.04, 0.20, 0.52, -1.03, 0.11, 0.49, -0.47, 0.35, 0.80, -0.33, -0.24, -0.13, -0.82, 0.56]

datas_sz000651 = [0.07, -0.55, -0.04, 3.11, 0.28, -0.50, 1.10, 1.97, -0.31, -0.55, 2.06, -0.24, -1.44, 1.56, 3.69, 0.53, 2.30, 1.09, -2.63, 0.29, 1.30, -1.54, 3.19]

mean_sh000300 = sum(datas_sh000300) / len(datas_sh000300)

mean_sz000651 = sum(datas_sz000651) / len(datas_sz000651)

temp_datas = []

for i in range(0, len(datas_sh000300)):

    temp_datas.append((datas_sh000300[i] - mean_sh000300) * (datas_sz000651[i] - mean_sz000651))

cov = sum(temp_datas)/len(temp_datas)

print(str(cov))

# result = 0.4385294896030246

 

當然如果你使用了numpy,那么求協方差將會十分的簡單:

import numpy as np

# Sample Date - SH000300 Earning in 2017-03

datas_sh000300 = [0.16, -0.67, -0.21, 0.54, 0.22, -0.15, -0.63, 0.03, 0.88, -0.04, 0.20, 0.52, -1.03, 0.11, 0.49, -0.47, 0.35, 0.80, -0.33, -0.24, -0.13, -0.82, 0.56]

datas_sz000651 = [0.07, -0.55, -0.04, 3.11, 0.28, -0.50, 1.10, 1.97, -0.31, -0.55, 2.06, -0.24, -1.44, 1.56, 3.69, 0.53, 2.30, 1.09, -2.63, 0.29, 1.30, -1.54, 3.19]

cov2 = np.cov(datas_sh000300, datas_sz000651, ddof=0)[1][0]

print(str(cov2))

# result = 0.438529489603

 

請注意  ddof = 0 這個參數,這個是很重要的,只是稍后放在文末說明,因為雖然重要,但是卻十分好理解。

從這個例子可以看出來,格力個股在2017年3月份是和滬深300指數正相關的,即指數漲,格力也大多是上漲的,只是 值偏小,兩者之間偏離各自均值的幅度也不同,即,我們知道了2者正相關,但是不知道正相關的幅度是大是小,這個需要引入下一個名詞,文章下面會介紹:相關系數

 

ddof = 0 參數的說明

如果你從網上查找方差的公式,你會發現有2個公式!

  和 

那么哪個是正確的呢?又有什么區別呢?這里就要說下貝賽爾修正

在上面的方差公式和標准差公式中,存在一個值為N的分母,其作用為將計算得到的累積偏差進行平均,從而消除數據集大小對計算數據離散程度所產生的影響。不過,使用N所計算得到的方差及標准差只能用來表示該數據集本身(population)的離散程度;如果數據集是某個更大的研究對象的樣本(sample),那么在計算該研究對象的離散程度時,就需要對上述方差公式和標准差公式進行貝塞爾修正,將N替換為N-1:

簡單的說,是除以 N 還是 除以 N-1,則要看樣本是否全,比如,我要統計全國20歲男性的平均身高,這時間你肯定拿不到全部20歲男性的身高,所以只能隨機抽樣 500名,這時間要除以 N-1,因為只是部分數據;但是我們算滬深300在2017年3月份的漲跌幅,我們是可以全部拿到3月份的數據的,所以我們拿到的是全部數據,這時間就要除以 N。

 

相關系數

在我們的例子中,求的滬深300在2017年3月份的方差為0.253493383743,標准差為0.5034812645401129。

那么我們該如何理解呢?

方差:如果 股票 B 的方差是 0.1,那么我們可以說 滬深300的離散度更大,因為滬深300 的方差>股票B的方差。

標准差:滬深300的均值是:mean1 = sum(datas)/len(datas) = 0.0060869565217391355,即平均每天上漲 0.006%,那么我們描述,滬深300指數在2017年3月份平均日波動區間為[ 0.006%-0.50%,  0.006%+0.50% ]

而協方差呢,如果我只有格力和滬深300的數據,我拿到的協方差值是0.438529489603,這個值只能表明是正相關的,但是正相關的程度呢,是滬深300上漲1%,格力也上漲1%,還是滬深300上漲1%,格力漲2%呢?我們從協方差的值中無從得知。

這時間就需要另外一個變量來描述相關度的大小了:相關系數

協方差的相關系數,不僅表示線性相關的方向,還表示線性相關的程度,取值[-1,1]。也就是說,相關系數為正值,說明一個變量變大另一個變量也變大;取負值說明一個變量變大另一個變量變小,取0說明兩個變量沒有相關關系。同時,相關系數的絕對值越接近1,線性關系越顯著。

計算公式為:就是用X、Y的協方差除以X的標准差乘以Y的標准差。

 

用 Python + Numpy 來實現代碼如下:

import numpy as np

import math

# Sample Date - SH000300 Earning in 2017-03

datas_sh000300 = [0.16, -0.67, -0.21, 0.54, 0.22, -0.15, -0.63, 0.03, 0.88, -0.04, 0.20, 0.52, -1.03, 0.11, 0.49, -0.47, 0.35, 0.80, -0.33, -0.24, -0.13, -0.82, 0.56]

datas_sz000651 = [0.07, -0.55, -0.04, 3.11, 0.28, -0.50, 1.10, 1.97, -0.31, -0.55, 2.06, -0.24, -1.44, 1.56, 3.69, 0.53, 2.30, 1.09, -2.63, 0.29, 1.30, -1.54, 3.19]

cov = np.cov(datas_sh000300, datas_sz000651, ddof=0)[1][0]

standard_deviation_sh000300 = np.std(datas_sh000300, ddof=0)

standard_deviation_sz000651 = np.std(datas_sz000651, ddof=0)

ppcc = cov/(standard_deviation_sh000300*standard_deviation_sz000651)

print(str(ppcc))

# result = 0.554372485367

 

相關系數是  0.554372485367,可以看出來兩者是正相關的,但是相關度很一般,至於一般的標准,就要看工作中的應用尺度了,如系數超過0.8,才存在配對交易的機會,否則,沒有。

 

本文完,下面的文章計划介紹下協同效應的實際應用。

本文禁止任何網站轉載,嚴厲譴責那些蛀蟲們。
本文首發於,博客園,請搜索:博客園 - 尋自己,查看原版文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM