見出し画像

Pythonで相関行列・偏相関行列(2)

(1)偏相関行列を計算する

 今回は偏相関行列の計算と図の作成をしたいと思います。

(2)使うデータ

 いつもどおりirisデータです。

(3)コードの紹介の前に

 相関係数の計算は、Pandasを使えば簡単に算出できます。しかし、偏相関行列の計算は、普段使うようなライブラリではできません(たとえば、scipystatsmodelsscikit-learnといった、よく使うライブラリには、偏相関行列を計算する機能がないようです)。
 偏相関行列を計算できるライブラリを検索すると、良い感じのものを発見しましたので、紹介します。

(4)pingouin

 このpingouin、結構優秀なライブラリだと思います。できることはたくさんありますので、下記に紹介します。

1.ANOVA and T-test
2.Bayesian
3.Circular
4.Contingency
5.Correlation and regression
6.Distribution
7.Effect sizes
8.Multiple comparisons and post-hoc tests
9.Multivariate tests
10.Non-parametric
11.Others
12.Plotting
13.Power analysis
14.Reliability and consistency

 主要な分析がそろっています。pingouinだけで十分事足りるような気がします。今回は、この中でCorrelation and regressionの機能を使い、偏相関行列を計算します。

(5)実際に計算してみる。

import pandas as pd
import pingouin as pg
import matplotlib.pyplot as plt

df = pd.read_csv('iris.csv')

#偏相関行列の計算
x = pg.pcorr(df).round(3)
print(x, '\n')

#ヒートマップを作成。
import seaborn as sns
sns.heatmap(x, #データの指定
           vmin=-1.0, #最小値の指定
           vmax=1.0, #最大値の指定
           center=0, #中央の値の指定
           annot=True, # True:格子の中に値を表示
           xticklabels=x.columns.values, #x軸の名前を指定
           yticklabels=x.columns.values #y軸の名前を指定
           )
plt.show()

 出来上がりの図はこちらです。

偏相関行列

 以下、解説です。

■5行目

x = pg.pcorr(df).round(3)

 偏相関行列の計算も、相関行列の時と同様に1行だけでOKです。ただし、pingouinの偏相関行列は、ピアソンの相関係数をもとに計算されますので、注意が必要です。※行列にしなければ、スピアマンなどでも計算できます。

 あとは、相関行列のときとまったく同じです。

(6)まとめ

 偏相関行列は結構使いたい場面がありますが、計算が面倒でした。pingouinはあまり知られていないライブラリに思いますが、便利なので使ってみてはいかがでしょうか。個人的には、スピアマンを使う場面が多いので、自作関数を作っています。これは今度紹介しようと思います。

(7)参考

pingouinについてはここです。
https://pingouin-stats.org/index.html