Python
データ分析

非線形の相関分析 MIC について

今回は、非線形の相関解析について取り上げて見ます。

これまでのブログでも相関解析は行なったきましたが、用いていた手法はピアソンの相関係数でした。
つまり、2つ以上の変数の”線形的”な関係の強弱を図る指標を用いていました。

今回は、非線形の相関関係を図れるMICという手法を用いて、相関の見え方がどう変化するかを見ていきます。

U字型の分布について

例えば、以下のようなプログラムで(x,y)の簡単なxの2乗関数のデータ分布を作って見ます。
u_shape_func.png

計測したデータがこんな綺麗な分布になることは稀ですが、
実際に関数から作ったU字型の分布について、ピアソン相関を計算してみます。

ピアソン相関(Eは期待値)
ピアソン相関

このような値が返ってきます。

pearson1.png

ほぼ0のかなり小さな値で、相関が無いような結果が返ってきます。
明らかにX,Yについての関連があるデータに対しては、
相関を見出せる指標が欲しいところです。

U字型の分布の例

肥満度(BMI)とガン全体の発生率の関係はU字型の分布であることが、国立がんセンターの研究から分かっています。
参考リンク
cancer_bmi.jpg

身近な健康に関わる統計データでもU字型の分布は存在し、
こういった分布でも感覚的にもしっくりくる
相関を計りたいところです。

MIC(Maximal information coefficient)

MICは2011年にScience誌に公開された、比較的最近の相関解析の手法です。
logics-of-blueさんのスライドが非常にわかりやすく記載されています。

MICという手法を用いると、どのような形状の分布であっても相関の指標を
計算することができます。

ちなみに、MICはピアソン相関のような数式計算ではなく、コンピュータで計算させます。
ざっくりとした説明になりますが、MICの算出ロジックは
データ分布の座標系をグリッドで区切って生きながら、以下の相互情報量という
数値が最大となるグリッドの区切り方とその最大値を計算します。

2つの離散確率変数XとYについて、p(x)とp(y)をそれぞれX, Yの周辺確率分布関数、
p(x,y)を同時確率分布関数とすると、相互情報量は以下のような数式で表現されます。

相互情報量

相互情報量はX と Y が共有する情報量の尺度で、XとYが独立であれば、
p(x,y) =p(x)p(y)という式が成立するため、
相互情報量は0となります。

相互情報量0

ちなみに、MICの値は相関が弱いと0に近づき、強いと1に近づきます。

MIC - Detecting Novel Associations in Large Data Sets
文献のPage17〜18に相互情報量の計算例が出ています。
これに習って、相互情報量の違いのイメージと計算結果を記載します。

MI_IMG.png

PythonでのMICを使う

冒頭で例を挙げた、U字型の関数(xの2乗関数)についてMICの値を計算してみます。
Pythonではminepyというライブラリで解析ができます。

ちなみにMacでのminepyのインストールは以下の通り。

pip install minepy

解析コードも非常にシンプルです。
minepyからMINE(Maximum Information-based Nonparametric exploration)のモジュールをインポートして計算します。
実際にMICを計算すると、以下のような結果になります。
MIC_result1.png

0.99884..という、かなり1に近い値が取得できました。
期待する値が取得できました。

試しにノイズを入れて、ピアソン相関とMICの値を比べてみます。

noise_graph.png

MIC_result2.png

ピアソン相関係数は、約-0.11の弱い負の相関の結果が出ています。
MICについては、約0.83の相関が強い傾向がある結果が出ています。

人為的に作成したプロットデータではありますが、
分布の形状的にはMICの結果の方が感覚的にしっくりきます。

最後に

MICはどんな形状の分布でも対応できる万能の相関解析法に見えますが、
sinカーブのような連続波形の形状の分布などでは、
期待する結果で出にくい傾向もあるようです。

相関解析の一つの指標として、導入するような扱いが良いのかもしれません。
ピアソン相関係数のような、データ分布の見え方と感覚的に大きく乖離が
あるような問題に対しては有効な手段と言えるかと思います。

今回はここまで。