Pythonで相関行列・偏相関行列(2)
(1)偏相関行列を計算する
今回は偏相関行列の計算と図の作成をしたいと思います。
(2)使うデータ
いつもどおりirisデータです。
(3)コードの紹介の前に
相関係数の計算は、Pandasを使えば簡単に算出できます。しかし、偏相関行列の計算は、普段使うようなライブラリではできません(たとえば、scipy、statsmodels、scikit-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