用Python去計(jì)算:方差var、協(xié)方差cov、相關(guān)系數(shù)

方差

定義

方差是在概率論和統(tǒng)計(jì)方差衡量隨機(jī)變量或一組數(shù)據(jù)時(shí)離散程度的度量。
概率論中方差用來度量隨機(jī)變量和其數(shù)學(xué)期望(即均值)之間的偏離程度。
統(tǒng)計(jì)中的方差(樣本方差)是每個(gè)樣本值與全體樣本值的平均數(shù)之差的平方值的平均數(shù)。
在許多實(shí)際問題中,研究方差即偏離程度有著重要意義。

使用numpy計(jì)算

>>> a=np.random.randint(10,size=10)
>>> a
array([3, 6, 2, 8, 9, 7, 5, 6, 9, 8])
>>> np.var(a) #樣本總方差
5.21
 >>> np.var(a, ddof = 1)  # 計(jì)算樣本方差
5.788888888888889

>>> b=np.random.randint(10,size=10)
>>> b
array([9, 8, 4, 2, 3, 2, 0, 8, 1, 4])
>>> c=(a,b)
>>> c
(array([3, 6, 2, 8, 9, 7, 5, 6, 9, 8]), array([9, 8, 4, 2, 3, 2, 0, 8, 1, 4]))
>>> np.var(c)  # 計(jì)算所有元素方差
8.36
>>> np.var(c, axis = 0) # 計(jì)算每一列的方差
array([ 9.  ,  1.  ,  1.  ,  9.  ,  9.  ,  6.25,  6.25,  1.  , 16.  ,
        4.  ])
>>> np.var(c, axis = 1)   # 計(jì)算每一行的方差
array([5.21, 9.09])

使用pandas計(jì)算

pandas 中的 var 函數(shù)可以得到樣本方差(不是總體方差)

>>> import pandas as pd
>>> df = pd.DataFrame(np.array([[85, 76, 90], [82, 90, 88], [84, 88, 78]]), columns=['a', 'b', 'b'], index=['x', 'y', 'z'])
>>> df
    a   b   b
x  85  76  90
y  82  90  88
z  84  88  78

>>> df.var()  #  顯示每一列的方差
a     2.333333
b    57.333333
b    41.333333
dtype: float64

>>> df.var(axis = 1) # 顯示每一行的方差
x    50.333333
y    17.333333
z    25.333333
dtype: float64

協(xié)方差COV

定義

協(xié)方差(Covariance)在概率論和統(tǒng)計(jì)學(xué)中用于衡量?jī)蓚€(gè)變量的總體誤差。而方差是協(xié)方差的一種特殊情況,即當(dāng)兩個(gè)變量是相同的情況。
協(xié)方差表示的是兩個(gè)變量的總體的誤差,這與只表示一個(gè)變量誤差的方差不同。 如果兩個(gè)變量的變化趨勢(shì)一致,也就是說如果其中一個(gè)大于自身的期望值,另外一個(gè)也大于自身的期望值,那么兩個(gè)變量之間的協(xié)方差就是正值。 如果兩個(gè)變量的變化趨勢(shì)相反,即其中一個(gè)大于自身的期望值,另外一個(gè)卻小于自身的期望值,那么兩個(gè)變量之間的協(xié)方差就是負(fù)值。


協(xié)方差自然是由方差衍生而來的,方差反應(yīng)的是一個(gè)變量(一維)的離散程度,到二維了,我們可以對(duì)每個(gè)維度求其離散程度,但我們還想知道更多。我們想知道兩個(gè)維度(變量)之間的關(guān)系,直觀的舉例就是身高和體重(青少年),我們采集到的數(shù)據(jù)里面有一種固有的性質(zhì),那就是身高越高的樣本似乎總有著更大的體重,那我們?nèi)绾魏饬窟@種關(guān)系呢,單獨(dú)求兩個(gè)方差是不行的。因此協(xié)方差應(yīng)運(yùn)而生,它的公式也與方差極度同源,方差是每個(gè)樣本減去均值的平方后去平均(n-1),協(xié)方差就把平方的2拆成1+1,就是x減去x的平均,乘以,y減去y的平均,最后對(duì)整體取平均。
協(xié)方差的效果是:協(xié)方差的值如果為正值,則說明兩者是正相關(guān)的 (數(shù)值越大,相關(guān)性越強(qiáng)),結(jié)果為負(fù)值就說明負(fù)相關(guān)的,如果為0,也是就是統(tǒng)計(jì)上說的“相互獨(dú)立”。

使用numpy

>>> X = np.array([171, 184, 210, 198, 166, 167])
>>> Y = np.array([78, 77, 98, 110, 80, 69])
>>> np.cov(X,Y)
array([[328.66666667, 228.73333333],
       [228.73333333, 237.46666667]])
#輸出一個(gè)2*2的協(xié)方差矩陣
# 328.66666667是X與X的協(xié)方差
# 228.73333333是X和Y的協(xié)方差
# 237.46666667是Y和Y的協(xié)方差

使用panda

>>> X = np.array([171, 184, 210, 198, 166, 167])
>>> Y = np.array([78, 77, 98, 110, 80, 69])
>>> x1=pd.DataFrame(X)
>>> y1=pd.DataFrame(Y)
>>> x1[0].cov(x1[0])
328.6666666666667
>>> x1[0].cov(y1[0])
228.73333333333332
>>> y1[0].cov(y1[0])
237.46666666666667

相關(guān)系數(shù)

定義

相關(guān)系數(shù)是最早由統(tǒng)計(jì)學(xué)家卡爾·皮爾遜設(shè)計(jì)的統(tǒng)計(jì)指標(biāo),是研究變量之間線性相關(guān)程度的量,一般用字母 r 表示。由于研究對(duì)象的不同,相關(guān)系數(shù)有多種定義方式,較為常用的是皮爾遜相關(guān)系數(shù)。

使用numpy

>>> X = np.array([171, 184, 210, 198, 166, 167])
>>> Y = np.array([78, 77, 98, 110, 80, 69])
# 得到相關(guān)性矩陣
>>> np.corrcoef(X,Y)
array([[1.        , 0.81874809],
       [0.81874809, 1.        ]])

使用pandas

>>> x1=pd.DataFrame(X)
>>> y1=pd.DataFrame(Y)
>>> z=pd.concat([x1,y1],axis=1)
>>> z
     0    0
0  171   78
1  184   77
2  210   98
3  198  110
4  166   80
5  167   69
# 得到相關(guān)性矩陣
>>> z.corr()
          0         0
0  1.000000  0.818748
0  0.818748  1.000000
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容