相関係数について。
【目次】
計算式等
2変量を x, y とし、x の順位を z、y の順位を w として考える。タイ(同一順位)は平均順位を用いる。
ピアソンの積率相関係数(Pearson product-moment correlation coefficient)
スピアマンの順位相関係数(Spearman's rank correlation coefficient)
ケンドールの順位相関係数(Kendall rank correlation coefficient)
※ただし、i を基準として、i< j の組合せのみ。
散布図を描いて考えると、次を数えている。
A=プロット {} を基準として、右上or左下にあるプロット数の総和。
B=プロット {} を基準として、左上or右下にあるプロット数の総和。
C=プロット {} を基準として、xが同値でない数の総和。
D=プロット {} を基準として、yが同値でない数の総和。
計算例
次の2変量の相関係数を見てみる。簡単のため、データ数は少なくしている。
X={1, 2, 4, 7, 9, 10}, Y={1, 1, 6, 4, 10, 10}
グラフにすると次のとおり。
Excelでの計算は以下。
ピアソンの積率相関係数
Xの平均=5.5, Y の平均=5.335のため次の計算。
スピアマンの順位相関係数
X, Yについて順位を付けたものをZ, Wとする。
Zの平均=3.5, Wの平均=3.5のため次の計算。
ケンドールの順位相関係数
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;
プログラムコード
■ 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になる。
> 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