學習筆記78—三大統計相關係數:Pearson、Spearman秩相關係數、kendall等級相關係數

統計相關係數簡介函數

 

因爲使用的統計相關係數比較頻繁,因此這裏就利用幾篇文章簡單介紹一下這些係數。測試

 

相關係數:考察兩個事物(在數據裏咱們稱之爲變量)之間的相關程度。spa

 

若是有兩個變量:X、Y,最終計算出的相關係數的含義能夠有以下理解:.net

(1)、當相關係數爲0時,X和Y兩變量無關係。blog

(2)、當X的值增大(減少),Y值增大(減少),兩個變量爲正相關,相關係數在0.00與1.00之間。排序

(3)、當X的值增大(減少),Y值減少(增大),兩個變量爲負相關,相關係數在-1.00與0.00之間。ip

 

相關係數的絕對值越大,相關性越強,相關係數越接近於1或-1,相關度越強,相關係數越接近於0,相關度越弱。get

一般狀況下經過如下取值範圍判斷變量的相關強度:
相關係數     0.8-1.0     極強相關
                 0.6-0.8     強相關
                 0.4-0.6     中等程度相關
                 0.2-0.4     弱相關
                 0.0-0.2     極弱相關或無相關數學

 

 

Pearson(皮爾遜)相關係數io

 

 

一、簡介

 

皮爾遜相關也稱爲積差相關(或積矩相關)是英國統計學家皮爾遜於20世紀提出的一種計算直線相關的方法。

假設有兩個變量X、Y,那麼兩變量間的皮爾遜相關係數可經過如下公式計算:

公式一:

皮爾遜相關係數計算公式

公式二:

皮爾遜相關係數計算公式

公式三:

皮爾遜相關係數計算公式

公式四:

皮爾遜相關係數計算公式

以上列出的四個公式等價,其中E是數學指望,cov表示協方差,N表示變量取值的個數。

 

 

二、適用範圍

 

當兩個變量的標準差都不爲零時,相關係數纔有定義,皮爾遜相關係數適用於:

(1)、兩個變量之間是線性關係,都是連續數據。

(2)、兩個變量的整體是正態分佈,或接近正態的單峯分佈。

(3)、兩個變量的觀測值是成對的,每對觀測值之間相互獨立。

Matlab實現

 

三、皮爾遜相關係數的Matlab實現(依據公式四實現):

function coeff = myPearson(X , Y)
% 本函數實現了皮爾遜相關係數的計算操做
%
% 輸入:
%   X:輸入的數值序列
%   Y:輸入的數值序列
%
% 輸出:
%   coeff:兩個輸入數值序列X,Y的相關係數
%


if length(X) ~= length(Y)
    error('兩個數值數列的維數不相等');
    return;
end

fenzi = sum(X .* Y) - (sum(X) * sum(Y)) / length(X);
fenmu = sqrt((sum(X .^2) - sum(X)^2 / length(X)) * (sum(Y .^2) - sum(Y)^2 / length(X)));
coeff = fenzi / fenmu;

end %函數myPearson結束

 

也可使用Matlab中已有的函數計算皮爾遜相關係數:

coeff = corr(X , Y);

 

 

 

Spearman Rank(斯皮爾曼等級)相關係數

 

一、簡介

在統計學中,斯皮爾曼等級相關係數以Charles Spearman命名,並常常用希臘字母ρ(rho)表示其值。斯皮爾曼等級相關係數用來估計兩個變量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實現

源程序一:

斯皮爾曼等級相關係數的Matlab實現(依據排行差分集合d計算,使用上面的公式一)

function coeff = mySpearman(X , Y)
% 本函數用於實現斯皮爾曼等級相關係數的計算操做
%
% 輸入:
%   X:輸入的數值序列
%   Y:輸入的數值序列
%
% 輸出:
%   coeff:兩個輸入數值序列X,Y的相關係數


if length(X) ~= length(Y)
    error('兩個數值數列的維數不相等');
    return;
end

N = length(X); %獲得序列的長度
Xrank = zeros(1 , N); %存儲X中各元素的排行
Yrank = zeros(1 , N); %存儲Y中各元素的排行

%計算Xrank中的各個值
for i = 1 : N
    cont1 = 1; %記錄大於特定元素的元素個數
    cont2 = -1; %記錄與特定元素相同的元素個數
    for j = 1 : N
        if X(i) < X(j)
            cont1 = cont1 + 1;
        elseif X(i) == X(j)
            cont2 = cont2 + 1;
        end
    end
    Xrank(i) = cont1 + mean([0 : cont2]);
end

%計算Yrank中的各個值
for i = 1 : N
    cont1 = 1; %記錄大於特定元素的元素個數
    cont2 = -1; %記錄與特定元素相同的元素個數
    for j = 1 : N
        if Y(i) < Y(j)
            cont1 = cont1 + 1;
        elseif Y(i) == Y(j)
            cont2 = cont2 + 1;
        end
    end
    Yrank(i) = cont1 + mean([0 : cont2]);
end

%利用差分等級(或排行)序列計算斯皮爾曼等級相關係數
fenzi = 6 * sum((Xrank - Yrank).^2);
fenmu = N * (N^2 - 1);
coeff = 1 - fenzi / fenmu;

end %函數mySpearman結束

源程序二:

使用Matlab中已有的函數計算斯皮爾曼等級相關係數(使用上面的公式二)

coeff = corr(X , Y , 'type' , 'Spearman');

注意:使用Matlab自帶函數計算斯皮爾曼等級相關係數時,須要保證X、Y均爲列向量;Matlab自帶的函數是經過公式二計算序列的斯皮爾曼等級相關係數的。通常狀況下,使用上面給出的源程序一是能夠獲得所要的結果的,可是當序列X或Y中出現具備相同值的元素時,源程序一給出的結果就會與Matlab中corr函數計算的結果不一樣,這是由於當序列X或Y中有相同的元素時,公式一和公式二計算的結果會有誤差。這裏能夠經過將源程序一中的如下三行



 

Kendall Rank(肯德爾等級)相關係數

一、簡介

在統計學中,肯德爾相關係數是以Maurice Kendall命名的,並常常用希臘字母τ(tau)表示其值。肯德爾相關係數是一個用來測量兩個隨機變量相關性的統計值。一個肯德爾檢驗是一個無參數假設檢驗,它使用計算而得的相關係數去檢驗兩個隨機變量的統計依賴性。肯德爾相關係數的取值範圍在-1到1之間,當τ爲1時,表示兩個隨機變量擁有一致的等級相關性;當τ爲-1時,表示兩個隨機變量擁有徹底相反的等級相關性;當τ爲0時,表示兩個隨機變量是相互獨立的。

 

假設兩個隨機變量分別爲X、Y(也能夠看作兩個集合),它們的元素個數均爲N,兩個隨即變量取的第i(1<=i<=N)個值分別用Xi、Yi表示。X與Y中的對應元素組成一個元素對集合XY,其包含的元素爲(Xi, Yi)(1<=i<=N)。當集合XY中任意兩個元素(Xi, Yi)與(Xj, Yj)的排行相同時(也就是說當出現狀況1或2時;狀況1:Xi>Xj且Yi>Yj,狀況2:Xi<Xj且Yi<Yj),這兩個元素就被認爲是一致的。當出現狀況3或4時(狀況3:Xi>Xj且Yi<Yj,狀況4:Xi<Xj且Yi>Yj),這兩個元素被認爲是不一致的。當出現狀況5或6時(狀況5:Xi=Xj,狀況6:Yi=Yj),這兩個元素既不是一致的也不是不一致的。

 

這裏有三個公式計算肯德爾相關係數的值

 

公式一:

肯德爾相關係數公式1

其中C表示XY中擁有一致性的元素對數(兩個元素爲一對);D表示XY中擁有不一致性的元素對數。

注意:這一公式僅適用於集合X與Y中均不存在相同元素的狀況(集合中各個元素惟一)。

 

公式二:

肯德爾相關係數公式2

注意:這一公式適用於集合X或Y中存在相同元素的狀況(固然,若是X或Y中均不存在相同的元素時,公式二便等同於公式一)。

其中C、D與公式一中相同;

肯德爾相關係數公式2-子公式1肯德爾相關係數公式2-子公式2肯德爾相關係數公式2-子公式3

N一、N2分別是針對集合X、Y計算的,如今以計算N1爲例,給出N1的由來(N2的計算能夠類推):

將X中的相同元素分別組合成小集合,s表示集合X中擁有的小集合數(例如X包含元素:1 2 3 4 3 3 2,那麼這裏獲得的s則爲2,由於只有二、3有相同元素),Ui表示第i個小集合所包含的元素數。N2在集合Y的基礎上計算而得。

 

公式三:

肯德爾相關係數公式3

注意:這一公式中沒有再考慮集合X、或Y中存在相同元素給最後的統計值帶來的影響。公式三的這一計算形式僅適用於用表格表示的隨機變量X、Y之間相關係數的計算(下面將會介紹)。

參數M稍後會作介紹。

 

以上都是圍繞用集合表示的隨機變量而計算肯德爾相關係數的,下面所講的則是圍繞用表格表示的隨機變量而計算肯德爾相關係數的。

 

一般人們會將兩個隨機變量的取值製做成一個表格,例若有10個樣本,對每一個樣本進行兩項指標測試X、Y(指標X、Y的取值均爲1到3)。根據樣本的X、Y指標取值,獲得如下二維表格(表1):

肯德爾相關係數表1

由表1能夠獲得X及Y的能夠以集合的形式表示爲:

X={1, 1, 2, 2, 2, 2, 2, 3, 3, 3};

Y={1, 2, 1, 1, 2, 2, 3, 2, 3, 3};

獲得X、Y的集合形式後就可使用以上的公式一或公式二計算X、Y的肯德爾相關係數了(注意公式1、二的適用條件)。

固然若是給定X、Y的集合形式,那麼也是很容易獲得它們的表格形式的。

 

這裏須要注意的是:公式二也能夠用來計算表格形式表示的二維變量的肯德爾相關係數,不過它通常用來計算由正方形表格表示的二維變量的肯德爾相關係數,公式三則只是用來計算由長方形表格表示的二維變量的Kendall相關係數。這裏給出公式三中字母M的含義,M表示長方形表格中行數與列數中較小的一個。表1的行數及列數均爲三。

 

二、適用範圍 

肯德爾相關係數與斯皮爾曼相關係數對數據條件的要求相同,可參見統計相關係數(2)--Spearman Rank(斯皮爾曼等級)相關係數及MATLAB實現中介紹的斯皮爾曼相關係數對數據條件的要求。

 

 三、Matlab實現

fenzi = 6 * sum((Xrank - Yrank).^2);
fenmu = N * (N^2 - 1);
coeff = 1 - fenzi / fenmu;

改成

coeff = corr(Xrank' , Yrank'); %皮爾遜相關係數

這樣即可以使源程序一在計算包含相同元素值的變量(至少有一個變量的取值集合中存在相同的元素)間的斯皮爾曼等級相關係數時,獲得與Matlab自帶函數同樣的結果。程序一通過修改事後一樣能夠用來計算通常變量(兩個變量的取值集合中均不存在相同的元素)等級相關間的斯皮爾曼等級係數。

 

參考連接:https://blog.csdn.net/zhaozhn5/article/details/78392220

相關文章
相關標籤/搜索