【統計】相関係数(ピアソン、スピアマン、ケンドール)

相関係数について。

【目次】

 

計算式等


2変量を x, y とし、x の順位を z、y の順位を w として考える。タイ(同一順位)は平均順位を用いる。

ピアソンの積率相関係数(Pearson product-moment correlation coefficient)

\quad r=\dfrac{S_{xy}}{\sqrt{S_{xx}} \sqrt{S_{yy}}}

\quad S_{xx}=\sum \left( x_{i}-\overline{x}\right)^{2}

\quad S_{yy}=\sum \left( y_{i}-\overline{y}\right)^{2}

\quad S_{xy}=\sum \left( x_{i}-\overline{x}\right)\left( y_{i}-\overline{y}\right)

 

スピアマンの順位相関係数(Spearman's rank correlation coefficient)

\quad r=\dfrac{S_{zw}}{\sqrt{S_{zz}} \sqrt{S_{ww}}}

\quad S_{zz}=\sum \left( z_{i}-\overline{z}\right)^{2}

\quad S_{ww}=\sum \left( w_{i}-\overline{w}\right)^{2}

\quad S_{zw}=\sum \left( z_{i}-\overline{z}\right)\left( w_{i}-\overline{w}\right)

 

ケンドールの順位相関係数(Kendall rank correlation coefficient)

\quad \tau=\dfrac{A-B}{\sqrt{C\times D}}

\quad A= \sum \left( X_{ij} \right)\qquad\begin{cases}1 \quad \verb|if|\ \left( x_{i} - x_{j} \right) \left( y_{i} - y_{j} \right) >0\\ 0 \quad \verb|Oherwise|\end{cases}

\quad B= \sum \left( X_{ij} \right)\qquad\begin{cases}1 \quad \verb|if|\ \left( x_{i} - x_{j} \right) \left( y_{i} - y_{j} \right) <0\\ 0 \quad \verb|Oherwise|\end{cases}

\quad C= \sum \left( X_{ij} \right)\qquad\begin{cases}1 \quad \verb|if|\ x_{i} \neq x_{j} \\ 0 \quad \verb|Oherwise|\end{cases}

\quad D= \sum \left( X_{ij} \right)\qquad\begin{cases}1 \quad \verb|if|\ y_{i} \neq y_{j} \\ 0 \quad \verb|Oherwise|\end{cases}

 ※ただし、i を基準として、i< j の組合せのみ。

散布図を描いて考えると、次を数えている。
 A=プロット { x_{i},\ y_{i}} を基準として、右上or左下にあるプロット数の総和。
 B=プロット { x_{i},\ y_{i}} を基準として、左上or右下にあるプロット数の総和。
 C=プロット { x_{i},\ y_{i}} を基準として、xが同値でない数の総和。
 D=プロット { x_{i},\ y_{i}} を基準として、yが同値でない数の総和。

 

計算例


次の2変量の相関係数を見てみる。簡単のため、データ数は少なくしている。

 X={1, 2, 4, 7, 9, 10}, Y={1, 1, 6, 4, 10, 10}

グラフにすると次のとおり。 

f:id:cochineal19:20201220130107p:plain

Excelでの計算は以下。

f:id:cochineal19:20201220145751p:plain

相関係数

ピアソンの積率相関係数

Xの平均=5.5, Y の平均=5.335のため次の計算。

\quad S_{xx}=\sum \left( x_{i}-5.5\right)^{2}=69.5

\quad S_{yy}=\sum \left( y_{i}-5.335\right)^{2}≒83.3

\quad S_{xy}=\sum \left( x_{i}-5.5\right)\left( y_{i}-5.335\right)=69

\quad r=\dfrac{69}{\sqrt{69.5} \sqrt{83.3}}=0.906666

 

スピアマンの順位相関係数

X, Yについて順位を付けたものをZ, Wとする。
Zの平均=3.5, Wの平均=3.5のため次の計算。
\quad S_{zz}=\sum \left( z_{i}-3.5\right)^{2}=17.5
\quad S_{ww}=\sum \left( w_{i}-3.5\right)^{2}=16.5
\quad S_{zw}=\sum \left( z_{i}-3.5\right)\left( w_{i}-3.5\right)=15.5
\quad r=\dfrac{15.5}{\sqrt{17.5} \sqrt{16.5}}≒0.9121593

 

ケンドールの順位相関係数

\quad A=4+4+2+2+0+0=12
\quad B=0+0+1+0+0+0=1
\quad C=5+4+3+2+1+0=15
\quad D=4+4+3+2+0+0=13
\quad \tau=\dfrac{12-1}{\sqrt{15\times 13}}≒0.7877264

A~Dの計算は、X, Yの順序で整列した {1,1}, {2,1}, {4,6}, {7,4}, {9,10}, {10,10} について、
個々のペアを基準として、自分より後ろのデータとの関係を調べている。

● AとBの計算例:

1番目のペア {1, 1} を基準にすると、次のようにA該当4個(0より大きいもの)、B該当0個(0より小さいもの)。
 {1, 1} vs. {2, 1}=(1-2)(1-1)=0
 {1, 1} vs. {4, 6}=(1-4)(1-6)=15
 {1, 1} vs. {7, 4}=(1-7)(1-4)=18
 {1, 1} vs. {9, 10}=(1-9)(1-10)=72
 {1, 1} vs. {10, 10}=(1-10)(1-10)=81

また、3番目のペア {4, 6} を基準にすると、A該当2個、B該当1個。
 {4, 6} vs. {7, 4}=(4-7)(6-4)=-6
 {4, 6} vs. {9, 10}=(4-9)(6-10)=20
 {4, 6} vs. {10, 10}=(4-10)(6-10)=24

このような手順で全ペアの該当件数を算出して総和する。

● CとDの計算:
Yの1番目 {1} を基準とすると、次のようにD該当4個(同値でないもの)。
 {1} vs. {1}=同値
 {1} vs. {6}=同値ではない
 {1} vs. {4}=同値ではない
 {1} vs. {10}=同値ではない
 {1} vs. {10}=同値ではない

また、Yの5番目 {10} を基準とすると、次のようにD該当は0個。
 {10} vs. {10}=同値

このような手順で全ての値での該当件数を算出して総和する。

※全ペアの結果は、貼付した Excel Q:AH列 を参照のこと。

 

Rでの実行:

> ADS1 <- data.frame(X=c(1,2,4,7,9,10), Y=c(1,1,6,4,10,10))
> ADS1$Z <- rank(ADS1$X)
> ADS1$W <- rank(ADS1$Y)
> ggplot(ADS1) + geom_point(aes(X, Y), size=5, color="blue")
> cor(ADS1$X,ADS1$Y,method="pearson")
[1] 0.906666
> cor(ADS1$X,ADS1$Y,method="spearman")
[1] 0.9121593
> cor(ADS1$Z,ADS1$W,method="pearson") #--順位をpearsonで計算しても同じ。
[1] 0.9121593
> cor(ADS1$X,ADS1$Y,method="kendall")
[1] 0.7877264

なお、順位に変換してからピアソンの相関係数を算出すれば、スピアマンの順位相関係数が得られる。

 

SASでの実行:

data ads;
input x y @@;
cards;
1 1 2 1 4 6 7 4 9 10 10 10
;
run;
proc corr data=ads pearson spearman kendall;
  var x y;
run;

f:id:cochineal19:20201220151329p:plain

 

プログラムコード


■ Rのコード

cor(ADS$X, ADS$Y, method="pearson")  #-- ピアソンの積率相関係数
cor(ADS$X, ADS$Y, method="spearman") #-- スピアマンの順位相関係数
cor(ADS$X, ADS$Y, method="kendall") #-- ケンドールの順位相関係数

 

SASのコード

proc corr data=ads pearson spearman kendall;
var x y; run;

 

Pythonのコード

整備中

 

ピアソンの相関係数と順位相関係数


ピアソンの相関係数は、線形の関係性を示す。
一方、スピアマンやケンドールの順位相関係数は順位を扱うため、例えば次の曲線の場合、ピアソンの相関係数=0.98 に対して、スピアマンやケンドールの順位相関係数は1になる。  

f:id:cochineal19:20201220130122p:plain

> ADS2 <- data.frame(X=c(1,2,3,4,5,6,7,8,9,10)
+                    ,Y=c(2,2.1,2.5,3,4,5,6,7.5,7.9,8))
> ggplot(ADS2) + geom_point(aes(X, Y), size=5, color="blue")
> cor(ADS2$X,ADS2$Y,method="pearson")
[1] 0.9807044
> cor(ADS2$X,ADS2$Y,method="spearman")
[1] 1
> cor(ADS2$X,ADS2$Y,method="kendall")
[1] 1

 

参考


統計学(出版:東京図書), 日本統計学会編

本ブログは個人メモです。 本ブログの内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。