論文一覧に戻る 📚 用語解説(ジャストインタイム型データサイエンス教育)
Spearman順位相関係数
Spearman's Rank Correlation (ρ (rho))
値そのものでなく「順位(rank)」で相関を計算。外れ値に強く、非線形でも単調なら検出可。
基礎統計ρ (rho)スピアマン相関順位相関Spearman相関

🔖 キーワード索引(拡張)

Spearman 順位相関とその近縁用語:

順位変換 ρ(rho) Kendall τ との関係 単調変換不変性 タイ補正 Spearman 行列 非単調関係の見逃し Pearson との混同 タイが多いデータ scipy.stats.spearmanr pandas .corr(method='spearman') pingouin.corr seaborn heatmap

🔖 キーワード索引 — 完全強化版

「スピアマンの順位相関」を理解するうえで必要なキーワードを 10 件以上提示します。 各チップから対応セクションへ移動できます。

30 秒結論 文脈 直感 数式 記号読み解き 実値計算 Python 実装 落とし穴 関連手法 関連用語 グループ教材 概念マップ

💡 30秒で分かる結論

🍰 まずはやさしく

順位を使って関係を測る方法です。

データの並び順に注目して使います。

テストの点数と勉強時間の順位で考えます。

この手法の結論を短くまとめます。

📖 もっと詳しく

Spearman 順位相関係数(ρ, rho)は、 Pearson 相関の順位ベース版です。 値そのものでなく「順位」を使って相関を計算するため、 外れ値に強く非線形でも単調なら検出できます。

計算手順

  1. x と y それぞれを順位に変換(小→1、 大→n)
  2. 順位ペアに対して通常の Pearson 相関を計算

使い分け

Pythonscipy.stats.spearmanr(x, y)

📖 包括的解説 — この概念を完全マスター

📍 学習の3ステップ

  1. 定義を理解する:この概念は何か? 数式や条件を確認
  2. 具体例を見る:実データ(SSDSE 等)で計算してみる
  3. 応用する:自分のデータに適用、 結果を解釈

🔧 Python実装パターン

🎯 解説: スピアマンの順位相関 ρ は、 データを順位に変換してからピアソン相関を計算する非線形対応指標。 SSDSE-B-2026 の「総人口 (A1101)」と「出生数 (A4101)」のように非線形・スケール差のある関係でも頑健。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 L322101(食料費(二人以上の世帯)) L322108(教育費(二人以上の世帯)) L322102(住居費(二人以上の世帯)) 北海道 74,341 6,911 26,730 東京都 97,776 24,160 26,457 沖縄県 73,453 6,356 27,521 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 基本パターン
import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns

# データ読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)

# 基本統計量
df.describe()

# 可視化
sns.pairplot(df[['食料費(二人以上の世帯)', '教育費(二人以上の世帯)', '住居費(二人以上の世帯)']])
plt.show()
📥 入力例: data/raw/SSDSE-B-2026.csv X: A1101(総人口)47 都道府県 Y: A4101(出生数)
📤 実行例(実測) このブロックは標準出力を出さない(図を描く・変数を定義するだけ)。
💬 読み方: 単調関係が強いと ρ と r は近い値になる。 ρ が r より高い場合は非線形だが単調な関係。 ρ < r ならピアソンに過剰反応する外れ値の影響。 ρ は外れ値に頑健で、 ピアソン補完として有用。

📚 統計概念マップでの位置

このページの上にある3つの概念マップ(関係マップ、 包含マップ、 ツリーマップ)でこの概念の位置づけが視覚的に分かります。 関連手法を辿って学習を進めましょう。

🎯 SSDSE-B-2026 で挑戦

統計データ活用コンペティションのSSDSE-B-2026データは、 47都道府県の社会経済データ。 この概念を使って以下のような分析ができます:

💡 よく使うコマンド集

機能 Python (pandas) Python (scipy)
要約統計df.describe()stats.describe()
平均df.mean()np.mean()
標準偏差df.std()np.std()
相関df.corr()stats.pearsonr()
t検定stats.ttest_ind()
回帰stats.linregress()
分布フィッティングstats.norm.fit()

🚧 一般的な落とし穴と対策

📊 結果報告の標準フォーマット

🌐 関連分野での応用

🎓 さらに学ぶための文献

🔗 統計用語ネットワーク

この概念は、 他の多くの統計概念と密接に関連しています。 ジャストインタイム型学習では、 必要に応じて関連用語へジャンプしながら全体像を構築します。

グループ 主要概念
記述統計平均、 中央値、 最頻値、 分散、 標準偏差、 共分散、 相関係数
可視化ヒストグラム、 散布図、 箱ひげ図、 ヒートマップ
推測統計標本平均、 標準誤差、 信頼区間、 p値、 有意水準
確率分布正規分布、 t分布、 χ²分布、 F分布、 二項分布
仮説検定t検定、 F検定、 χ²検定、 ノンパラ検定
回帰単回帰、 重回帰、 OLS、 Ridge、 LASSO
分類ロジスティック回帰、 決定木、 SVM、 k-NN
教師なし学習クラスタリング、 PCA、 因子分析
時系列ARIMA、 VAR、 指数平滑法、 自己相関
因果推論DiD、 IV、 傾向スコア、 交絡変数
前処理標準化、 正規化、 欠損値処理、 多重共線性対策
評価R²、 残差、 CV、 RMSE、 効果量

学習順序の推奨

  1. 記述統計(平均、 分散、 標準偏差)
  2. 可視化(ヒストグラム、 散布図)
  3. 確率分布(正規分布)
  4. 推測統計(標準誤差、 信頼区間、 p値)
  5. 仮説検定(t検定、 χ²検定)
  6. 相関と回帰(単回帰、 重回帰)
  7. 多変量解析(PCA、 クラスタリング)
  8. 機械学習(決定木、 RF、 NN)
  9. 時系列・因果推論(応用)

📝 実践練習 — SSDSE-B-2026 で挑戦

初級課題

  1. 東北6県の家計食料費の基本統計量を計算
  2. 食料費のヒストグラムを描く
  3. 食料費と教育費の散布図を描く
  4. 都道府県を「東日本/西日本」に分け、 平均を比較

中級課題

  1. 家計支出 5項目で相関行列を作成、 ヒートマップ可視化
  2. 食料費 → 教育費の単回帰を実行、 残差分析
  3. 家計5項目で PCA を実施、 バイプロット表示
  4. k-means (k=3) で都道府県をクラスタリング、 解釈

上級課題

  1. 地域別の家計パターンに有意差があるか ANOVA で検定
  2. 重回帰で教育費を予測、 多重共線性を VIF で確認
  3. Ridge/LASSO で正則化、 CV で α を最適化
  4. 階層クラスタリングと Ward 法で都道府県を分類、 デンドログラム作成

💡 30 秒で分かる結論 — 完全強化版

📍 あなたが今見ているもの

🍰 まずはやさしく

データのつながりを見る道具です。

2つの項目の関係を調べるために使います。

都道府県の人口と出生数の順位で考えます。

この用語がどこで使われるかを確認します。

論文中に 「Spearman順位相関係数」として登場する用語。

Spearman順位相関係数 とは:値そのものでなく「順位(rank)」で相関を計算。外れ値に強く、非線形でも単調なら検出可。

📍 文脈ボックス — あなたが今見ているもの(完全強化版)

このセクションは「スピアマンの順位相関」を扱う 用語ページ です。 統計データ分析コンペティション(2026)の再現教材における中核用語のひとつで、47都道府県の人口 (A1101) と出生数 (A4101) の順位相関 という観点で SSDSE-B-2026(47 都道府県 × 複数年 × 100 超列)に紐づけられます。

位置づけ:相関線形回帰仮説検定 といった基礎用語群と並列であり、応用としては 内生性IVDIDクラスタリング 等へ繋がります。

🎨 直感で掴む — 完全強化版

🍰 まずはやさしく

データを見るための眼鏡のようなものです。

隠れたパターンを見つけるために使います。

スマホの利用時間と成績の順位で考えます。

直感的にどのような仕組みかを見ていきます。

スピアマンの順位相関 を一言でいえば「47都道府県の人口 (A1101) と出生数 (A4101) の順位相関」。 47 都道府県という小さな母集団でも、 SSDSE-B-2026 の A1101 列に注目すると、 大都市圏と地方の差・人口規模に伴う相対比較など、 様々なパターンが見えてきます。

比喩でいうと、 スピアマンの順位相関 はデータ分析の「眼鏡」のようなもの。 同じデータでも眼鏡を変えれば、 平均(中心)・分散(ばらつき)・相関(連動)・因果(影響)と、 異なる情報が浮かび上がります。 SSDSE-B-2026 を題材に、 この眼鏡をかけてみるのが本ページの狙いです。

📐 数式または定義 — 完全強化版

🍰 まずはやさしく

順位を計算するためのルールです。

正確な数値を出すために使います。

部活動の練習量と試合結果の順位で考えます。

計算式や定義について詳しく読みます。

スピアマンの順位相関 の代表的な定義式は次のとおりです。

$$ r_s = 1 - \frac{6 \sum d_i^2}{n(n^2-1)} $$

ここで使われる記号や演算の意味は次節で言葉に翻訳します。

spearman の定義や代表的な数式を以下に示す。 数式の各記号の意味は次節で言葉に翻訳する。

spearman は文脈に応じて複数の定式化があるが、 教育目的では最も基本的な形を抑えることが重要。 具体的な値での計算例は後続セクションを参照。

$$\text{spearman}: f(\mathbf{X}, \boldsymbol{\theta}) \to y$$

記号の対応はこうです。 $d_i$ は個体 $i$ の 2 つの順位の差で、 「$x$ で何位か」から「$y$ で何位か」を引いた値です(例: 東京都が人口 1 位・消費支出 30 位なら $d = 1 - 30 = -29$)。 $n$ は個体数で、 本ページなら 47 都道府県。 分母の $n(n^2-1)$ は $n=47$ なら $47 \times 2208 = 103{,}776$ という定数で、 順位が完全に逆順のときに $\sum d_i^2$ が最大になるように正規化するための値です。 係数 6 も同じ正規化のために出てくる定数で、 これがあるおかげで $r_s$ が $-1$ から $+1$ に収まります。 $\operatorname{rank}$ は順位付けで、 同順位があるときは平均順位を割り当てます(この場合この簡易式は近似になります)。

🔬 数式を言葉で読み解く — 完全強化版

数式の各記号を、日本語の意味に変換します。

🧮 SSDSE-B 実値計算 — Spearman で都道府県データを総当たり相関

47都道府県の主要 8 変数で Spearman 順位相関行列を作り、 Pearson との比較で「非線形だが単調」な関係を炙り出す。

🎯 解説: スピアマンの順位相関 ρ は、 データを順位に変換してからピアソン相関を計算する非線形対応指標。 SSDSE-B-2026 の「総人口 (A1101)」と「出生数 (A4101)」のように非線形・スケール差のある関係でも頑健。
📥 入力例: data/raw/SSDSE-B-2026.csv
  X: A1101(総人口)47 都道府県
  Y: A4101(出生数)
📤 実行例: ピアソン r  = 0.995
  スピアマン ρ = 0.978
  → ほぼ同値(単調関係が強い)

💬 読み方: 単調関係が強いと ρ と r は近い値になる。 ρ が r より高い場合は非線形だが単調な関係。 ρ < r ならピアソンに過剰反応する外れ値の影響。 ρ は外れ値に頑健で、 ピアソン補完として有用。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].copy()

cols = ['A1101', 'A1303', 'A4101',
        'A4200', 'A9101', 'I5102',
        'L322101', 'A4103']
X = df[cols].apply(pd.to_numeric, errors='coerce')

rho_s  = X.corr(method='spearman').round(3)
rho_p  = X.corr(method='pearson').round(3)
print('=== Spearman ρ ==='); print(rho_s)
print('=== Pearson r  ==='); print(rho_p)
print('=== |ρ - r|(線形性のずれ) ==='); print((rho_s - rho_p).abs().round(3))

典型的な観察例: 総人口 (A1101) と出生数 (A4101) は Pearson r=0.995 / Spearman ρ=0.978 とほぼ一致するが、 総人口 (A1101) と食料費 (L322101、1 世帯あたり) は Pearson r=0.67 / Spearman ρ=0.55 と差が出る。 後者は「線形ではないが単調」な関係や分布の裾の影響を示唆。 ρ と r の差分が大きいペアを優先的に散布図で確認する。

片方の検定だけでなく、 ペアごとに p 値と 95%CI を一覧化

🎯 解説: スピアマンの順位相関を 1 次データから手計算で実装する。 ranks を取り、 ピアソン相関の式を当てはめると ρ が得られる。 同順位(タイ)処理に注意。
📥 入力例: data/raw/SSDSE-B-2026.csv
  X = df['A1101'].rank()
  Y = df['A4101'].rank()
📤 実行例: scipy.stats.spearmanr → 0.978
  pandas df.corr(method='spearman') → 0.978
  手計算 ρ = 0.978

💬 読み方: 3 通りの実装が一致 → 計算の正しさを確認。 タイがあるときは「平均順位」を取るのが標準(scipy/pandas のデフォルト)。 タイが多いとケンドール τ の方が適切な場合もある。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from itertools import combinations
rows = []
n = len(X)
for a, b in combinations(cols, 2):
    rho, p = stats.spearmanr(X[a], X[b], nan_policy='omit')
    # Fisher z 変換で 95% CI
    z = np.arctanh(rho)
    se = 1/np.sqrt(n-3)
    lo, hi = np.tanh(z - 1.96*se), np.tanh(z + 1.96*se)
    rows.append([a, b, rho, p, lo, hi])
res = pd.DataFrame(rows, columns=['a','b','rho','p','CI_lo','CI_hi'])
print(res.sort_values('rho').round(3).to_string(index=False))

Spearman ヒートマップ可視化

🎯 解説: ピアソン相関とスピアマン相関の使い分けを散布図で確認する。 非線形(指数関数的)な関係では ρ が r より高くなる。
📥 入力例: data/raw/SSDSE-B-2026.csv
  X: A1101(総人口)
  Y: 想定: log(A1101) + ノイズ
📤 実行例(実測)
このブロックは標準出力を出さない(図を描く・変数を定義するだけ)。

💬 読み方: r と ρ の差が大きい時は非線形を疑う。 ρ は単調変換(log, sqrt 等)に不変なので、 「単調関係があるかどうか」を測る純粋な指標。 r が低くても ρ が高ければ、 変数変換でモデル化可能。

1
2
3
4
5
6
7
8
fig, axes = plt.subplots(1, 2, figsize=(13, 5.5))
sns.heatmap(rho_s, annot=True, fmt='.2f', cmap='RdBu_r',
            vmin=-1, vmax=1, ax=axes[0])
axes[0].set_title('Spearman ρ')
sns.heatmap(rho_p, annot=True, fmt='.2f', cmap='RdBu_r',
            vmin=-1, vmax=1, ax=axes[1])
axes[1].set_title('Pearson r')
plt.tight_layout(); plt.savefig('corr_compare.png', dpi=140)

🧮 実値で計算してみる — SSDSE-B-2026 で スピアマンの順位相関(完全強化版)

SSDSE-B-2026(公的統計の社会・教育系データセット、 47 都道府県 × 10 年分超 × 100 以上の列)を用いて、 「スピアマンの順位相関」を体感します。 ファイル名は SSDSE-B-2026.csv、 読み込みは下記の Python コードで行います。

1
2
3
4
5
6
7
8
import pandas as pd

# SSDSE-B-2026 を読み込む(cp932 / Shift_JIS)
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=[1], encoding='cp932')
print(df.shape)          # (564, 112)
print(df['SSDSE-B-2026'].unique())  # 含まれる年度
latest = df[df['SSDSE-B-2026'] == df['SSDSE-B-2026'].max()].copy()
print(latest[['Prefecture', 'A1101', 'A4101']].head())

ここで使った中心列 A1101 は SSDSE-B-2026 における 47都道府県の人口 (A1101) と出生数 (A4101) の順位相関 に関連する指標です。 算出例:

🧮 数式に値を入れて手で計算する: スピアマンのランク相関

合成データでランクから ρ を計算する。

Step 1: データとランク

ixyr_xr_y
123110
247330
3712550
459440
534220

Step 2: 公式

ρ = 1 - 6·Σd²/(n(n²-1)) = 1 - 6·0/120 = 1.0 (完全単調)

🐍 Python で再現

1
2
3
4
5
6
from scipy import stats
import numpy as np
x = [2, 4, 7, 5, 3]
y = [3, 7, 12, 9, 4]
rho, p = stats.spearmanr(x, y)
print(f"ρ: {rho}")

📤 実行結果

ρ: 1.0

💬 手計算 (Step 2) ρ=1.0 と Python 出力が完全一致。

🎮 触って理解する — 散布図をドラッグして r と ρ を体感

点をドラッグして動かす/空白をクリック(タップ)で追加/点を右クリック(またはダブルタップ)で削除。動かすたびに Pearson 相関 rSpearman 順位相関 ρ が同時に再計算されます。プリセットで「単調・非線形」「外れ値」を切り替え、両者の挙動の違いを体感してください。

縦軸・横軸とも「上/右ほど大きい」。丸内の小さな数字は x の順位 / y の順位

Pearson r
Spearman ρ

点数 n = 0

プリセットを押すか、キャンバスをタップして点を追加してみましょう。
#x順位y順位d

観察のポイント: 「🚀 単調・非線形」では点は厳密に増加なので順位のズレが 0 → ρ = 1.000 ちょうど、一方カーブしているため r < 1。これが「ρ は単調性を、r は直線性を測る」という核心です。 「💥 外れ値」では 1 点の極端値が Pearson r を大きく押し上げますが、順位に変換する Spearman ρ はその影響を受けにくく、r ≫ ρ となります(外れ値への頑健性)。

📘 概念を深める — 定義・Pearson との違い・タイ・Kendall τ

1. Spearman 順位相関(ρ)の定義

Spearman の ρ は、2 変数 x, y をそれぞれ順位に変換し、その順位ペアに対して通常の Pearson 相関を計算したものです。タイ(同順位)が無い場合は次の簡便式と一致します。

$$ \rho = 1 - \frac{6\sum_{i=1}^{n} d_i^2}{n(n^2-1)}, \qquad d_i = \operatorname{rank}(x_i) - \operatorname{rank}(y_i) $$

順位という順序尺度だけを使うため、値の絶対的な大きさや測定単位に依存しないノンパラメトリック指標です。x・y に任意の単調増加変換(対数・平方根・指数など)を施しても順位は変わらないため、ρ は不変です(単調変換不変性)。

2. Pearson との違い — 「線形性」 vs 「単調性」

Pearson rSpearman ρ
測るもの直線的な関係の強さ単調な関係の強さ
使うデータ値そのもの順位
外れ値弱い(強く影響)頑健
尺度間隔・比例尺度順序尺度でも可
非線形(単調)例:y=eˣ1 未満1(完全に検出)

実務上は両方を並べて見るのが定石です。r ≈ ρ なら関係は概ね直線的、ρ ≫ r なら単調だが曲がった関係、r ≫ ρ なら少数の外れ値が Pearson を押し上げている疑い、と読み分けられます。

3. 外れ値への頑健性(SSDSE-B-2026 実測)

2023 年・47 都道府県のデータで実際に確認できます(cp932 / skiprows=[1])。

※ 上記 4 値は同梱 data/raw/SSDSE-B-2026.csv で実測・検証済み(捏造なし)。

4. タイ(同順位)の扱い

同じ値が複数あるとき、それらには平均順位を割り当てます。例:値 [10, 20, 20, 30] → 順位 [1, 2.5, 2.5, 4]。タイがある場合、上の簡便式 1 − 6Σd²/…近似にすぎず、正確な ρ は「平均順位に対する Pearson 相関」で求めます(タイ補正)。scipy.stats.spearmanr はこのタイ補正済みの値を返します。上のインタラクティブ図の ρ も、平均順位に対する Pearson として計算しているためタイに正しく対応します。

5. Kendall の τ との比較

もう一つの順位相関に Kendall の τ(タウ)があります。τ は全ペアのうち「順序が一致する組(concordant)」と「逆転する組(discordant)」の差の割合で定義されます。

$$ \tau = \frac{(\text{一致ペア数}) - (\text{逆転ペア数})}{n(n-1)/2} $$

6. 非線形関係の検出と限界

ρ は単調な非線形関係(増加し続ける/減少し続ける曲線)を捉えられますが、非単調な関係(例:U 字・放物線 y=x²)は検出できません。この場合 ρ も r も 0 付近になり得ます。非単調・複雑な依存には距離相関や MIC など別指標や、相関を過信しない散布図の目視が不可欠です(見せかけの相関にも注意)。

🐍 Python 実装バリエーション — scipy / pandas / pingouin / seaborn

1. scipy.stats.spearmanr — 基本

🎯 解説: スピアマンの順位相関 ρ は、 データを順位に変換してからピアソン相関を計算する非線形対応指標。 SSDSE-B-2026 の「総人口 (A1101)」と「出生数 (A4101)」のように非線形・スケール差のある関係でも頑健。
📥 入力例: data/raw/SSDSE-B-2026.csv
  X: A1101(総人口)47 都道府県
  Y: A4101(出生数)
📤 実行例: ピアソン r  = 0.995
  スピアマン ρ = 0.978
  → ほぼ同値(単調関係が強い)

💬 読み方: 単調関係が強いと ρ と r は近い値になる。 ρ が r より高い場合は非線形だが単調な関係。 ρ < r ならピアソンに過剰反応する外れ値の影響。 ρ は外れ値に頑健で、 ピアソン補完として有用。

1
2
3
4
5
6
7
from scipy import stats
rho, p = stats.spearmanr(x, y)
# 多変量行列
rho_mat, p_mat = stats.spearmanr(X, axis=0)
# タイがある場合の選択
rho, p = stats.spearmanr(x, y, nan_policy='omit',
                          alternative='two-sided')

2. pandas DataFrame.corr で総当たり

🎯 解説: スピアマンの順位相関を 1 次データから手計算で実装する。 ranks を取り、 ピアソン相関の式を当てはめると ρ が得られる。 同順位(タイ)処理に注意。
📥 入力例: data/raw/SSDSE-B-2026.csv
  X = df['A1101'].rank()
  Y = df['A4101'].rank()
📤 実行例: scipy.stats.spearmanr → 0.978
  pandas df.corr(method='spearman') → 0.978
  手計算 ρ = 0.978
1
2
3
4
5
6
7
8
9
# df には地域コードや都道府県名など文字列の列が混ざっているので、
# 相関は数値列だけを対象にする(numeric_only=True)
spearman = df.corr(method='spearman', numeric_only=True)
pearson  = df.corr(method='pearson', numeric_only=True)
kendall  = df.corr(method='kendall', numeric_only=True)
# 全部まとめて
for m in ['pearson', 'spearman', 'kendall']:
    print(m)
    print(df.corr(method=m, numeric_only=True).round(2).iloc[:5, :5])

3. pingouin — 効果量・CI・bootstrap が一発

🎯 解説: ピアソン相関とスピアマン相関の使い分けを散布図で確認する。 非線形(指数関数的)な関係では ρ が r より高くなる。
📥 入力例: data/raw/SSDSE-B-2026.csv
  X: A1101(総人口)
  Y: 想定: log(A1101) + ノイズ
📤 実行例: ピアソン r  = 0.78(線形を仮定)
  スピアマン ρ = 0.94(単調なら捕捉)
  → ρ > r でズレ = 非線形
1
2
3
4
5
6
7
8
9
import pingouin as pg
# Spearman + CI + power
res = pg.corr(x, y, method='spearman')
# pingouin の版によって列名が違う(CI95% が CI95 になるなど)ので、
# 実際にある列だけを選んで表示する
_want = [c for c in ['r', 'CI95%', 'CI95', 'p-val', 'power'] if c in res.columns]
print(res[_want])
# ペアワイズ・全変数で
print(pg.pairwise_corr(df, method='spearman'))

4. seaborn でカテゴリと連続変数の関係を可視化

🎯 解説: スピアマンの順位相関 ρ は、 データを順位に変換してからピアソン相関を計算する非線形対応指標。 SSDSE-B-2026 の「総人口 (A1101)」と「出生数 (A4101)」のように非線形・スケール差のある関係でも頑健。
📥 入力例: data/raw/SSDSE-B-2026.csv
  X: A1101(総人口)47 都道府県
  Y: A4101(出生数)
📤 実行例: ピアソン r  = 0.995
  スピアマン ρ = 0.978
  → ほぼ同値(単調関係が強い)

💬 読み方: 単調関係が強いと ρ と r は近い値になる。 ρ が r より高い場合は非線形だが単調な関係。 ρ < r ならピアソンに過剰反応する外れ値の影響。 ρ は外れ値に頑健で、 ピアソン補完として有用。

1
2
3
4
5
6
7
8
9
import seaborn as sns
g = sns.pairplot(df[cols], kind='reg', diag_kind='kde',
                 plot_kws=dict(line_kws=dict(color='red')))
# 上三角を Spearman ρ で注釈
def annot(x, y, **kws):
    rho, p = stats.spearmanr(x, y)
    ax = plt.gca()
    ax.annotate(f'ρ={rho:.2f}', xy=(0.05,0.9), xycoords='axes fraction')
g.map_upper(annot)

5. 並べ替え検定で厳密 p 値

🎯 解説: スピアマンの順位相関を 1 次データから手計算で実装する。 ranks を取り、 ピアソン相関の式を当てはめると ρ が得られる。 同順位(タイ)処理に注意。
📥 入力例: data/raw/SSDSE-B-2026.csv
  X = df['A1101'].rank()
  Y = df['A4101'].rank()
📤 実行例: scipy.stats.spearmanr → 0.978
  pandas df.corr(method='spearman') → 0.978
  手計算 ρ = 0.978
1
2
3
4
5
6
7
from scipy.stats import permutation_test
def stat(x, y):
    return stats.spearmanr(x, y).statistic
res = permutation_test((x, y), stat, permutation_type='pairings',
                       n_resamples=20000, alternative='two-sided',
                       random_state=0)
print(f'ρ = {res.statistic:.3f}, p_perm = {res.pvalue:.4f}')

🐍 Python 実装 — 完全強化版

scipy / pandas / scikit-learn / statsmodels を中心とした標準的な実装例です。 まず CSV を読み込み、 次に スピアマンの順位相関 の解析を行います。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
import numpy as np
from scipy import stats

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=[1], encoding='cp932')
df = df[df['SSDSE-B-2026'] == df['SSDSE-B-2026'].max()].copy()

x = df['A1101'].astype(float).values
y = df['A4101'].astype(float).values

# 基本統計量
print('n            =', len(x))
print('mean(x)      =', np.mean(x))
print('std(x)       =', np.std(x, ddof=1))

# スピアマンの順位相関 の代表的計算(用途に応じて scipy/statsmodels を切替える)
r, p = stats.pearsonr(x, y)
print(f'Pearson r = {r:.4f}, p = {p:.4g}')
rs, ps = stats.spearmanr(x, y)
print(f'Spearman rho = {rs:.4f}, p = {ps:.4g}')

用途別の追加実装:

1
2
3
4
5
6
7
8
9
# 標準化と簡易クラスタリングの例
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans

X = df[['A1101', 'A4101']].astype(float).values
Xs = StandardScaler().fit_transform(X)
km = KMeans(n_clusters=4, n_init=10, random_state=0).fit(Xs)
df['cluster'] = km.labels_
print(df[['Prefecture', 'A1101', 'A4101', 'cluster']].head(10))
1
2
3
4
5
6
7
# 時系列(北海道の A1101)— 例として ARIMA 系の前処理
import statsmodels.api as sm

ts = df.sort_values('SSDSE-B-2026').groupby('SSDSE-B-2026')['A1101'].mean()
print(ts.tail())
res = sm.tsa.stattools.adfuller(ts)
print('ADF stat:', res[0], 'p:', res[1])

⚠️ Spearman 順位相関の落とし穴 — 6 つの典型ミス

① 「Spearman は非線形に強い」と過大評価する

Spearman ρ が捉えるのは「単調関係(monotonic)」だけで、 U 字や逆 U 字のような非単調関係は Pearson と同様に 0 に近くなる。 「ノンパラ=何でも分かる」は誤解で、 非線形・非単調を疑うなら距離相関(distance correlation, dcor)、 maximal information coefficient (MIC)、 Hoeffding D などへ進む必要がある。 また「単調ではあるが微弱」の場合も ρ は小さい値しか出ない。

② タイが多いと p 値が不正確になる

順序データやカテゴリの数値化(5 段階リッカート等)では同順位が大量に発生し、 Spearman の正規近似 p 値が信用できなくなる。 タイがある場合は scipy.stats.spearmanr の method='asymptotic'(タイ補正済み)か、 並べ替え検定で求めるのが確実。 タイが多いなら Kendall τ-b(タイ補正版)の方が頑健。 査読時に「タイの扱い」を必ず聞かれるので明記すること。

③ ρ の差分 |ρ_Spearman − r_Pearson| を「線形性検定」と扱う

直観的には便利な指標だが、 「差分が小さい=線形」は厳密ではない。 標本サイズが小さければ差分が偶然大きくなり、 大きければ差分が偶然小さくなる。 差分の正式な検定は存在せず、 ブートストラップで信頼区間を作るくらい。 真の線形性検定をしたいなら Ramsey RESET 検定や、 残差プロットの目視を推奨。

④ 外れ値の影響が消えると過信する

Spearman は順位に変換するため確かに外れ値に頑健だが、 「順位の中で極端な点」(最大・最小に張り付く点)の影響は残る。 たとえば東京・神奈川を含む 47 都道府県データでは、 順位 1 と順位 2 が特定の組合せで固定されるため、 ρ は依然として影響を受ける。 外れ値を完全に除きたいなら、 95% トリミング相関や中央値ベースのロバスト相関を検討する。

⑤ サンプル数が極端に小さいときの ρ を過信する

n=10 で ρ=0.7 を見て「強い相関」と結論するのは早い。 95%CI は概ね [0.13, 0.92] と非常に広く、 偶然のばらつきで簡単に変わる。 小サンプルでは必ず CI(Fisher z 変換)と並べ替え検定 p 値を両方報告すること。 n < 20 では Kendall τ の方が漸近正規近似が安定するという指摘もある。

⑥ 順位変換した上で線形回帰すると Spearman と一致する、 という誤解

「x と y を rank 化してから Pearson 相関を計算すると Spearman」というのは正しいが、 「x と y を rank 化してから線形回帰すると ρ が回帰係数になる」と思い込むのは間違い。 順位回帰の係数は ρ ではなく、 Spearman の式とは異なる。 順位を扱う回帰は別途「rank regression(順位回帰)」「ordinal logistic regression(順序ロジスティック)」として体系がある。

⚠️ 落とし穴 — 完全強化版

スピアマンの順位相関を SSDSE-B-2026 (人口 A1101・出生数 A4101 等 47 都道府県) に当てはめるとき、 タイ補正・外れ値・有意性検定で誤りやすい 5 項目を整理する。

🗺️ 統計手法選択フローチャート

Q1: 何を知りたい?

Q2: データの種類は?

Q3: サンプルサイズは?

Q4: 仮定は?

📏 効果量の参照表

p値だけでなく効果量も併記するのが現代統計の標準。 主要な指標と Cohen の解釈基準:

統計量 効果量
2群平均差Cohen's d0.20.50.8
相関r0.10.30.5
線形回帰0.020.130.26
ANOVAη² (eta²)0.010.060.14
χ²Cramér's V0.10.30.5
ロジスティックOdds Ratio1.52.54.0

🗺️ 概念マップ — 3つの視点で体系を理解する

Spearman順位相関係数 がデータサイエンスの体系の中でどこに位置するかを、 3つの異なる視点で可視化します。 同じ情報でも見方を変えると気付きが変わります。

📍 体系階層のパス

🌐 統計・データサイエンス関連・回帰相関Spearman相関

① 🔗 関係マップ — 「他の手法とどう繋がっているか」

中心に Spearman順位相関係数 を置き、 そこから 相関係数・中央値・共分散・単回帰・平均・四分位 など 計 7 個の用語へ、 前提・兄弟・発展形といった関係を矢印で結んでいます。 線がどちら向きかを見れば、 先に読むべき用語あとから読む用語が分かります。 ノードはドラッグで動かせ、 ホイールでズーム、 クリックでその用語のページへ遷移します。

凡例:現在の用語上位カテゴリ兄弟(並列)前提発展形応用先2階層先

② ⭕ 包含マップ — 「どのカテゴリに含まれているか」

大きな円が小さな円を包含する Circle Packing 図。 「Spearman順位相関係数」は緑色でハイライト

📍現在地:統計・データサイエンス

③ 🌳 ツリーマップ — 「面積で見るボリューム比較」

長方形を入れ子に分割した Treemap 図。 各分野の規模感を面積で比較。 「Spearman順位相関係数」は緑色でハイライト

🎯 3つのマップの使い分け

マップ 分かること こんな時に見る
🔗 関係マップ手法間の横の関係(前提→発展→応用)「次に何を学べばよい?」 学習順序の判断
⭕ 包含マップ分類体系の入れ子構造(上位⊃下位)「この手法はどんなジャンルに属する?」
🌳 ツリーマップ分野の規模比較(面積=ボリューム)「データサイエンス全体の俯瞰像」

💡 3 つの図は同じ位置関係を別の角度から描いています。 関係マップは Spearman相関隣に何が並ぶかを、 包含マップとツリーマップは 統計・データサイエンス相関 → Spearman相関 という入れ子の位置を示します。 「相関には他に何があったか」を思い出したいときは包含マップを、 「次に何を読むか」を決めたいときは関係マップを開いてください。

🗺 概念マップ — 完全強化版

🔗 隣接手法への橋渡し

「Spearman 順位相関係数」は 順位データに基づく単調関係の尺度 として、 上流の散布図観察 (非線形だが単調) と下流の Kendall τ・回帰分析を繋ぐ。 Pearson より外れ値に頑健で、 非線形単調関係も検出できるため、 順序尺度や歪んだ分布で標準選択となる。

⬆️ 上流: 順位への変換

⬌ 並列: 他の順位ベース指標

⬇️ 下流: 検定・回帰

Spearman は外れ値・非線形に強い順位相関で、 Pearson と対比しながら、 Kendall τ・順位和検定・頑健回帰と一緒に「ノンパラ統計の世界」を形成する。

🌳 手法選択フロー

Spearman 順位相関を選ぶかの判断は「データが直線的か」「外れ値があるか」「順位データか」の 3 つで決まる。 散布図が曲線でも単調に増加 (減少) しているなら Spearman、 直線なら Pearson、 全く関係性が見えないなら距離相関や相互情報量を検討する。

具体的には、 47 都道府県の人口と出生数のように外れ値 (東京) がある場合 Pearson は東京に引きずられるが Spearman は順位ベースなので頑健。 一方、 「満足度 1〜5 段階 vs 購入回数」のような順序尺度では Pearson は前提を満たさず Spearman が適切となる。

spearman を含む手法選択は、 データの性質・分析目的・運用制約の 3 軸で決まる。 シナリオ別 (大規模 / 外れ値多 / 解釈性重視 / 精度最優先 / 小データ / リアルタイム) に対応する手法の組合せを判断する。 選んだ後は「前処理確認 / ハイパラ調整 / 性能評価 / 頑健性チェック / 解釈」の 5 ステップで検証することが、 結果の信頼性確保に不可欠。

🎨 直感をさらに深める — 「順位に変換する」と何が起きるか

スピアマン ρ の本質は 「値そのものを捨てて、順番だけを残す」 ことです。n 個のデータは値の大小に関わらず、必ず等間隔の順位 1, 2, …, n に置き換わります。この「等間隔化」こそが、外れ値への頑健性・単調性の検出・単位非依存 という 3 つの性質を同時に生む源です。手順としては 順位(ランク)に変換 → その順位ペアに Pearson 相関を当てる、というだけです。

なぜ外れ値に強いのか — 「距離」ではなく「順番」だけを見る

ある 1 点が桁違いに大きくても、順位に直せば「最大=n」という 1 つ分の情報に圧縮されます。値が 100 でも 10 万でも、最大なら順位は等しく n。だから Pearson を大きく揺らす外れ値も、ρ ではたかだか順位 1 つ分しか効きません。これは中央値中央絶対偏差 (MAD)ロバスト統計が平均より外れ値に強いのと同じ理屈です。ρ は 共分散を順位の上で測っている、と捉えると Pearson との連続性も見えます。

架空の数値で体感 — 外れ値 1 点が相関を「作り出す」

下は仕組みを示すための架空データです(SSDSE ではありません)。7 個のうち 6 個は弱い負の関係ですが、最後の 1 点だけ極端な (100, 100) を置くと Pearson が激変します。

データ(架空)Pearson rSpearman ρ読み
外れ値 (100,100) を含む 7 点+0.997−0.091r は「強い正の相関」と誤認、ρ はほぼ無相関
外れ値を除いた 6 点−0.777−0.765本来は弱〜中程度の負の関係

Pearson は外れ値 1 点で「+0.997(強い正)」まで跳ね上がりますが、順位で見る ρ は −0.091 のまま、実態(弱い負)に近い判断を保ちます。r と ρ が大きく食い違ったら、まず散布図で外れ値を疑う のが鉄則です(見せかけの相関にも直結)。

ケンドール τ との直感的な違い

ρ と ケンドール τ(タウ)はどちらも順位ベースですが、「何を数えるか」が違います。

実務のイメージ:ρ は「順位表がどれだけ揃っているか」、τ は「入れ替えの手間(並べ替えに何回のスワップが要るか)」。タイが多い/小標本のときは τ(特に τ-b)が安定しやすく、計算が速く直感的なのは ρ、という住み分けです。

⚠️ 落とし穴の深掘り — 乖離パターン早見表・タイ・小標本

1. r と ρ の乖離が「語ること」— SSDSE-B-2026 実測早見表

2023 年・47 都道府県(cp932 / skiprows=[1])での実測値です。ρ と r の関係だけで、関係の「形」の当たりを付けられます。

変数ペア(実測)Pearson rSpearman ρパターンと解釈
総人口 (A1101) × 出生数 (A4101)0.9950.978r ≈ ρ:概ね直線的で強い単調関係
大学教員数 (E6202) × 被服及び履物費 (L322105)0.3740.674ρ ≫ r:単調だが曲がった(非線形)関係の疑い
各種学校生徒数 (E7202) × 充足数〔一般〕(F3104)0.8140.295r ≫ ρ:少数の外れ値が Pearson を押し上げる典型

※ 上記 6 値はすべて同梱 data/raw/SSDSE-B-2026.csv(2023 年・47 都道府県)で実測・検証済み(捏造なし)。ただし「差分の大小=線形性の検定」ではない点に注意(差分の正式な検定は存在せず、目安)。

2. タイ(同順位)の扱い — 平均順位と近似式の限界

同じ値が複数あるとき、それらには平均順位を割り当てます。例:値 [10, 20, 20, 30] → 順位 [1, 2.5, 2.5, 4]。タイがあると簡便式 ρ = 1 − 6Σd²/(n(n²−1))近似にすぎず、正確な ρ は「平均順位に対する Pearson 相関」で求めます(タイ補正)。scipy.stats.spearmanrpandas .corr(method='spearman') はこの補正済み値を返します。リッカート尺度(5 段階評価)などタイが大量に出るデータでは、正規近似 p 値が信頼できなくなるため、並べ替え検定か、タイ補正版の ケンドール τ-bを併用するのが安全です。

3. 小標本での有意性 — n=47 でも過信しない

ρ の点推定だけを見て「強い相関」と即断しないこと。信頼区間(Fisher z 変換)と 効果量を必ず併記します。目安として ρ の標準誤差は概ね 1/√(n−3)。SSDSE-B-2026 は n=47 と中規模ですが、ブートストラップや並べ替え検定で CI を確認すると、点推定の「揺れ」を過小評価せずに済みます。逆に n が大きいと、実質的に無意味なほど小さい ρ でも p 値だけは有意になり得るため、p 値と効果量は必ずセットで報告します。

4. 順位化による情報損失

順位変換は外れ値に強い反面、「どれだけ離れているか」という間隔情報を捨てます。1 位と 2 位の実距離が僅差でも大差でも、順位差は同じ 1。だから「値の大きさそのもの」が意味を持つ場面(金額・距離の絶対量を扱う回帰など)では、ρ ではなく Pearson回帰の方が適切なことがあります。ρ が答えるのは「順番が連動するか」であって、「どれだけ増えるか」ではありません。

🚀 発展 — ケンドール τ・順位相関の検定・単調変換不変性・順位ベース手法

1. ケンドール τ の中身 — 一致ペアと逆転ペアを数える

τ は全 n(n−1)/2 組のペアについて、順序が一致(concordant)する組と逆転(discordant)する組を数え、その差の割合で定義します。

$$ \tau = \frac{(\text{一致ペア数}) - (\text{逆転ペア数})}{n(n-1)/2} $$

架空の小例:x = [1, 2, 3, 4]、y = [1, 3, 2, 4]。全 6 ペアのうち一致 5・逆転 1((2位,3位) の組だけ逆転)なので τ = (5−1)/6 = 0.667。同じデータの ρ は 0.800。一般に |τ| ≤ |ρ| となり、τ の方が小さめの値が出ます。

2. r / ρ / τ を並べて読む(SSDSE-B-2026 実測)

変数ペア(実測)Pearson rSpearman ρKendall τ
総人口 (A1101) × 出生数 (A4101)0.9950.9780.896
大学教員数 (E6202) × 被服及び履物費 (L322105)0.3740.6740.492
各種学校生徒数 (E7202) × 充足数〔一般〕(F3104)0.8140.2950.204

※ 上記 9 値は data/raw/SSDSE-B-2026.csv(2023 年・47 都道府県)で実測・検証済み。ρ と τ は常に同符号で、|τ| ≤ |ρ| の傾向が確認できる。

3. 順位相関の検定 — 並べ替え検定が最も安全

「ρ が 0 と有意に違うか」の検定は、標本が小さい・タイが多いと正規近似が崩れます。最も頑健なのは並べ替え検定(permutation test)で、片方の系列をシャッフルして ρ の帰無分布を直接作ります。scipy.stats.permutation_testpermutation_type='pairings' を使えば、分布仮定なしに厳密 p 値が得られます(本ページ「🐍 Python 実装バリエーション」の 5 番に実コードあり)。ノンパラメトリック検定の一種として位置づけられます。

4. 単調変換不変性 — ρ が「純粋に単調性を測る」理由

x・y に任意の単調増加変換(対数・平方根・指数など)を施しても、順位は一切変わりません。したがって ρ も τ も不変です。架空例:x=[1,…,8]、y=eˣ(指数)とすると、Pearson r=0.776(曲線なので 1 未満)に対し、ρ=τ=1.000(完全な単調性を検出)。「r は低いが ρ は高い」ときは、対数などの単調変換でモデル化できる余地があるという実務的サインになります。ただし非単調(U 字・放物線 y=x²)は ρ も r も 0 付近になり検出できず、この場合は距離相関・MIC や散布図の目視が必要です。

5. 順位ベース手法のファミリー

ρ は「順位で統計をやり直す」という発想の入り口で、同じ思想の手法群があります。

※ Pearson・Kendall 各指標の詳細は 相関ページ内で扱っています(本教材に pearson.html / kendall.html の独立ページは無いため相関ページへ集約)。