盆暗の学習記録

データサイエンス 、ソフトウェア開発、ビジネスについて日々学んだことの備忘録としていく予定です。初心者であり独学なので内容には誤りが含まれる可能性が大いにあります。

相関の希薄化とバイシリアル相関係数

相関の希薄化という現象と、それに対処する方法の一つである「バイシリアル相関係数」の構造についてメモ

相関の希薄化

相関の希薄化(attenuation of correlation) とは、データの測定誤差によって2つの確率変数 X,  Yの間の積率相関係数がゼロに近づく方向のバイアスをもつ現象です。

Spearman (1904) によって提案された希薄化を修正する式は次のようになっています。

 \rho_{xy} = \frac{r_{xy}}{\sqrt{r_{xx}} \sqrt{r_{yy}}}
  •  r_{xy}:観測された相関
  •  \rho_{xy}:真の相関、あるいは信頼性が完璧なもとでの相関
  •  r_{xx}:変数 Xの信頼性(測定誤差の少なさ)
  •  r_{yy}:変数 Yの信頼性(測定誤差の少なさ)

この式を変形すると

 r_{xy} = \rho_{xy} \sqrt{r_{xx}} \sqrt{r_{yy}}

となり、観測される相関係数は真の相関係数に対して、測定の信頼性の影響を受けている構造であることがわかります。

この信頼性をどう得るのかについては、例えば古典的テスト理論においては再テスト法(例えば  xを再び測定したときの相関 =  r_{xx})や信頼性係数といった方法についての議論が広がっていったようです。しかし本記事ではカテゴリカル変数の相関係数に焦点を当てたいと思います。

カテゴリカル変数の相関の希薄化

相関を測りたい確率変数にカテゴリカル変数(質的変数)が含まれており、かつそれが「もともと連続変数だったものが離散化された形で観測された」と考えられるものだった場合、本来よりも解像度が粗い測定をしているので信頼性が低い(測定誤差が大きい)ということで相関の希薄化の問題が生じます。

「もともと連続変数だったものが離散化された形で観測された」というのは、例えば次のようなデータです:

  • 例1(満足度のアンケート):回答者の心の中にある「満足度」が質問紙の「満足」「やや満足」「どちらでもない」などの離散的な選択肢によって離散化された形で観測されている
  • 例2(英語の試験の設問):ざっくり言えば、回答者の「英語力」が高いなら設問への回答が「正解」を選ぶ傾向が高くなり逆も然りとなる → 正解・不正解の二値へ離散化された形で英語力が観測されていると考えられる

二値化による相関の希薄化

連続変数を離散化したときにどのくらい相関が希薄化されるかは、もともとの連続変数が従う分布や離散化の閾値の取り方などによって異なります。

例えば相関係数 \rhoの2変量正規分布に従う連続変数 X,  Yのうち片方の変数、例えば Yを標準化して、分布の中央の点(平均値 = 中央値)を閾値に2等分するように二値化して Y_dとおくことにします。この場合、観測される積率相関係数  r = \operatorname{Cov}(X, Y_d) と元々の相関係数 \rho

 r = 0.798 \rho

という関係にあることが報告されています(Peters & Van Voorhis, 1940)。

実際に2変量正規分布からの疑似乱数を生成させて二値化して実験してみてもそのような結果になります。

import numpy as np
from scipy.stats import pearsonr

# 正規分布からのサンプリング
rho = 0.5 # 真の相関係数
np.random.seed(0)
data = np.random.multivariate_normal(mean=[1, 5], cov=[[1, rho], [rho, 1]], size=100_000)
x, y = data[:, 0], data[:, 1]

# 平均値を閾値に二値化
yd = 1 * (y >= y.mean())
r = pearsonr(x, yd)[0]  # 二値化後の相関係数
print(f"真の相関={rho:.3f}, 二値化後の相関係数={r:.3f}, 比率={r/rho:.3f}")
真の相関=0.500, 二値化後の相関係数=0.399, 比率=0.798

真の相関係数の条件を変えて( -0.5, 0.25, 0.75 の3条件で)、また疑似乱数の生成回数を増やしてモンテカルロシミュレーションしてみます(1回のサンプル数=10,000、試行回数=10,000)。

いずれの場合も、二値化後のピアソンの積率相関係数 r は真の相関 \rho よりゼロに近い値へと希薄化されており、二値化後の相関係数と真の相関の比率は0.798となっています。

この0.798という値は閾値の位置によって異なりますが、一般化すると

 e(p) = \frac{\phi(z)}{\sqrt{p(1 - p)}}

という関数であることが知られています(Cohen, 1983)。

イシリアル相関係数

相関の希薄化の問題に対処している相関係数のひとつに イシリアル(biserial)相関係数 というものがあります。これは前節の「正規分布に従う連続変数を二値化したカテゴリカル変数と連続値の間の相関」を測る相関係数で、

 r_{\text{bi}} := r_{\text{Pearson}} \times \frac{\sqrt{p(1 - p)}}{\phi(z)}

という相関係数になります。

これはちょうどピアソンの積率相関係数 r_{\text{Pearson}}を前述の希薄化の影響 e(p)の逆数で補正をかけた構造になっています。

私がバイシリアル相関係数の式を初めて見たときはなぜこういう式にしているのかがさっぱりわかりませんでしたが、相関の希薄化のことを知っていれば「既知の量のバイアスが入るから補正しよう」というかなり素直な式をしていることがわかります。

二値ではなく多値の場合は…?

二値化ではなく、任意のカテゴリ数への離散化の場合はどうすればいいのでしょうか。 その場合に向けて一般化した相関係数も存在します。

  • 連続変数 と カテゴリカル変数 の相関 → ポリシリアル(polyserial)相関係数
  • カテゴリカル変数 と カテゴリカル変数 の相関 → ポリコリック(polychoric)相関係数

なお、これらの相関係数は明示的に補正係数を掛けるバイシリアル相関係数とは異なり、「正規分布に従う変数が任意の閾値で区切られて観測された」という状況をモデリングし、そのモデルのもとで最も当てはまりがいい相関係数最尤推定するアプローチをとっています(詳しくは Drasgow 1986 などをご参照ください)。

また、バイシリアル、ポリシリアル、ポリコリックなどの相関係数Pythonで実行できるライブラリを作ったことがあるのでもしご興味のある方はご利用ください。

github.com

参考文献

  • Cohen, J. (1983). The cost of dichotomization. Applied psychological measurement, 7(3), 249-253.
  • Drasgow, F. (1986). Polychoric and polyserial correlations In: Kotz S, Johnson N, editors. The Encyclopedia of Statistics.
  • Spearman, C. (1904). The proof and measurement of association between two things. Am J Psychol, 15, 72-101.
  • Peters, C. C., & Van Voorhis, W. R. (1940). Statistical procedures and their mathematical bases. McGraw-Hill.