Ruby でスピアマンの順位相関係数(Spearman’s Rank Correlation Coefficient)の計算をしてみました。
0. 前提条件
- Debian GNU/Linux 10.2 (64bit) での作業を想定。
- Ruby 2.7.0 での作業を想定。
1. スピアマンの順位相関係数について
各変量を順位に変換してピアソンの積率相関係数(いわゆる相関係数)を求めたものを スピアマンの順位相関係数(Spearman’s Rank Correlation Coefficient) と呼ぶ。
実際にはまず、 対の変数 のそれぞれに順位をつける。但し、同順位(タイ)がある場合は中央(平均)順位(mid-rank) で順位をつける。
(e.g. 2位が3個ある場合、 。3位が2個ある場合、 )
そして、次の式によりスピアマンの順位相関係数 (または )を求める。
(1) 同順位(タイ)が存在しない場合、
(2) 同順位(タイ)が存在する場合、
(注) 同順位が存在しない場合は (2) の が となり、結局 (1) になる。よって、同順位(タイ)が存在しない場合と存在する場合で場合分けをせず、全て (2) で計算しても、結果は同じになる。
また、スピアマンの順位相関係数は、値を順位に置き換えたもの(同順位(タイ)は中央順位法)の相関係数(ピアソンの積率相関係数)であるので、当然、以下の計算式でも計算できる。
さらに、同順位(タイ)が存在する場合の計算式を以下のように説明している文献(特に海外の文献)も多い。(但し、前述の計算式で計算した結果と若干の差異がある)
2. Ruby スクリプトの作成
- Array クラスを拡張する形式にしている。
- Shebang ストリング(1行目)では、フルパスでコマンド指定している。(当方の慣習)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
|
3. Ruby スクリプトの実行
まず、実行権限を付与。
1
|
|
そして、実行。
1 2 3 4 |
|
以上。