1、簡介
在統計學中,肯德爾相關系數是以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),這兩個元素既不是一致的也不是不一致的。
這里有三個公式計算肯德爾相關系數的值
公式一:
其中C表示XY中擁有一致性的元素對數(兩個元素為一對);D表示XY中擁有不一致性的元素對數。
注意:這一公式僅適用於集合X與Y中均不存在相同元素的情況(集合中各個元素唯一)。
公式二:
注意:這一公式適用於集合X或Y中存在相同元素的情況(當然,如果X或Y中均不存在相同的元素時,公式二便等同於公式一)。
其中C、D與公式一中相同;
;
;
N1、N2分別是針對集合X、Y計算的,現在以計算N1為例,給出N1的由來(N2的計算可以類推):
將X中的相同元素分別組合成小集合,s表示集合X中擁有的小集合數(例如X包含元素:1 2 3 4 3 3 2,那么這里得到的s則為2,因為只有2、3有相同元素),Ui表示第i個小集合所包含的元素數。N2在集合Y的基礎上計算而得。
公式三:
注意:這一公式中沒有再考慮集合X、或Y中存在相同元素給最后的統計值帶來的影響。公式三的這一計算形式僅適用於用表格表示的隨機變量X、Y之間相關系數的計算(下面將會介紹)。
參數M稍后會做介紹。
以上都是圍繞用集合表示的隨機變量而計算肯德爾相關系數的,下面所講的則是圍繞用表格表示的隨機變量而計算肯德爾相關系數的。
通常人們會將兩個隨機變量的取值制作成一個表格,例如有10個樣本,對每個樣本進行兩項指標測試X、Y(指標X、Y的取值均為1到3)。根據樣本的X、Y指標取值,得到以下二維表格(表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的肯德爾相關系數了(注意公式一、二的適用條件)。
當然如果給定X、Y的集合形式,那么也是很容易得到它們的表格形式的。
這里需要注意的是:公式二也可以用來計算表格形式表示的二維變量的肯德爾相關系數,不過它一般用來計算由正方形表格表示的二維變量的肯德爾相關系數,公式三則只是用來計算由長方形表格表示的二維變量的Kendall相關系數。這里給出公式三中字母M的含義,M表示長方形表格中行數與列數中較小的一個。表1的行數及列數均為三。
2、適用范圍
肯德爾相關系數與斯皮爾曼相關系數對數據條件的要求相同,可參見統計相關系數(2)--Spearman Rank(斯皮爾曼等級)相關系數及MATLAB實現中介紹的斯皮爾曼相關系數對數據條件的要求。
3、Matlab實現
源程序一:
肯德爾相關系數的Matlab實現(依據公式二得到)
function coeff = myKendall(X , Y) % 本函數用於實現肯德爾等級相關系數的計算操作 % % 輸入: % X:輸入的數值序列 % Y:輸入的數值序列 % % 輸出: % coeff:兩個輸入數值序列X,Y的相關系數 if length(X) ~= length(Y) error('兩個數值數列的維數不相等'); return; end %將X變為行序列(如果X已經是行序列則不作任何變化) if size(X , 1) ~= 1 X = X'; end %將Y變為行序列(如果Y已經是行序列則不作任何變化) if size(Y , 1) ~= 1 Y = Y'; end N = length(X); %得到序列的長度 XY = [X ; Y]; %得到合並序列 C = 0; %一致性的數組對數 D = 0; %不一致性的數組對數 N1 = 0; %集合X中相同元素總的組合對數 N2 = 0; %集合Y中相同元素總的組合對數 N3 = 0; %合並序列XY的總對數 XPair = ones(1 , N); %集合X中由相同元素組成的各個子集的元素數 YPair = ones(1 , N); %集合Y中由相同元素組成的各個子集的元素數 cont = 0; %用於計數 %計算C與D for i = 1 : N - 1 for j = i + 1 : N if abs(sum(XY(: , i) ~= XY(: , j))) == 2 switch abs(sum(XY(: , i) > XY(: , j))) case 0 C = C + 1; case 1 D = D + 1; case 2 C = C + 1; end end end end %計算XPair中各個元素的值 while length(X) ~= 0 cont = cont + 1; index = find(X == X(1)); XPair(cont) = length(index); X(index) = []; end %計算YPair中各個元素的值 cont = 0; while length(Y) ~= 0 cont = cont + 1; index = find(Y == Y(1)); YPair(cont) = length(index); Y(index) = []; end %計算N1、N2及N3的值 N1 = sum(0.5 * (XPair .* (XPair - 1))); N2 = sum(0.5 * (YPair .* (YPair - 1))); N3 = 0.5 * N * (N - 1); coeff = (C - D) / sqrt((N3 - N1) * (N3 - N2)); end %函數myKendall結束
源程序二:
使用Matlab中已有的函數計算肯德爾相關系數
coeff = corr(X , Y , 'type' , 'Kendall');
注意:使用Matlab自帶函數計算肯德爾相關系數時,需要保證X、Y均為列向量;Matlab自帶的函數是通過公式二計算序列的肯德爾相關系數的。
這里還有另外一種不是計算肯德爾相關系數的公式(僅適用於集合X與Y中均不存在相同元素的情況,實際上其與公式一等價),可見參考文獻(3)。
4、參考內容
(1)、http://en.wikipedia.org/wiki/Kendall_tau_rank_correlation_coefficient
(2)、http://www.unesco.org/webworld/idams/advguide/Chapt4_2.htm
(3)、http://www.wikidoc.org/index.php/Kendall_tau_rank_correlation_coefficient
---------------------
作者:wsywl
來源:CSDN
原文:https://blog.csdn.net/wsywl/article/details/5889419
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!