Pearson相關系數
考察兩個事物(在數據里我們稱之為變量)之間的相關程度,簡單來說就是衡量兩個數據集合是否在一條線上面。其計算公式為: 或
或
N表示變量取值的個數。
相關系數r的值介於–1與+1之間,即–1≤r≤+1。其性質如下:
- 當r>0時,表示兩變量(當X的值增大(減小),Y值增大(減小))正相關,r<0時,兩變量為負相關(當X的值增大(減小),Y值減小(增大))。
- 當|r|=1時,表示兩變量為完全線性相關,即為函數關系。
- 當r=0時,表示兩變量間無線性相關關系。
- 當0<|r|<1時,表示兩變量存在一定程度的線性相關。且|r|越接近1,兩變量間線性關系越密切;|r|越接近於0,表示兩變量的線性相關越弱。
一般可按三級划分:|r|<0.4為低度線性相關;0.4≤|r|<0.7為顯著性相關;0.7≤|r|<1為高度線性相關。
當兩個變量的標准差都不為零時,相關系數才有定義,皮爾遜相關系數適用於:
- 兩個變量之間是線性關系,都是連續數據。
- 兩個變量的總體是正態分布,或接近正態的單峰分布。
- 兩個變量的觀測值是成對的,每對觀測值之間相互獨立。
一個具體的計算例子:
X Y 1 2 2 5 3 6
而利用matlab計算的話則可以使用函數 corrcoef或corr
先看一下help corrcoef的內容:
再看一下help corr的內容
對於前面提到的具體的計算例子,可以在matlab中實現如下:
x=[1;2;3]; y=[2;5;6]; r1=corr(x,y,'type','pearson'); r2=corrcoef(x,y);
最后可以看到
r1=0.9608
r2=
1.0000 0.9608
0.9608 1.0000
均與前面的計算結果相符。需要注意的是,使用corr函數時默認計算皮爾遜相關系數
Spearman相關系數
斯皮爾曼相關系數用來估計兩個變量X、Y之間的相關性,其中變量間的相關性可以使用單調函數來描述。如果兩個變量取值的兩個集合中均不存在相同的兩個元素,那么,當其中一個變量可以表示為另一個變量的很好的單調函數時(即兩個變量的變化趨勢相同),兩個變量之間的相關系數可以達到+1或-1。
假設兩個隨機變量分別為X、Y(也可以看做兩個集合),它們的元素個數均為N,兩個隨機變量取的第i(1<=i<=N)個值分別用Xi、Yi表示。對X、Y進行排序(同時為升序或降序),得到兩個元素排行集合x、y,其中元素xi、yi分別為Xi在X中的排行以及Yi在Y中的排行。將集合x、y中的元素對應相減得到一個排行差分集合d,其中di=xi-yi,1<=i<=N。隨機變量X、Y之間的斯皮爾曼相關系數可以由x、y或者d計算得到,其計算方式如下所示:
由排行差分集合d計算而得(公式一):
由排行集合x、y計算而得(斯皮爾曼相關系數同時也被認為是經過排行的兩個隨機變量的皮爾遜相關系數,以下實際是計算x、y的皮爾遜相關系數)(公式二):
以下是一個計算集合中元素排行的例子(僅適用於斯皮爾曼相關系數的計算)
這里需要注意:當變量的兩個值相同時,它們的排行是通過對它們位置進行平均而得到的。
斯皮爾曼相關系數對數據條件的要求沒有皮爾遜相關系數嚴格,只要兩個變量的觀測值是成對的,或者是由連續變量觀測資料轉化得到的,不論兩個變量的總體分布形態、樣本容量的大小如何,都可以用斯皮爾曼相關系數來進行研究。
使用matlab計算spearman相關系數則比較簡單,也是使用corr函數,如下:
r= corr(x, y, 'type' , 'Spearman');
對於上面的例子,則可以計算出r=1。
注意:使用Matlab自帶函數計算斯皮爾曼相關系數時,需要保證X、Y均為列向量;Matlab自帶的函數是通過公式二計算序列的斯皮爾曼相關系數的。