要点
- pandasのdfから相関行列を求めるメソッドはdf.corr()
- 偏相関行列を求めるメソッドは?
- 見つからなかった(検索が足りないのかもしれない)。
- 偏相関係数(行列じゃなく)を求めてる記事や、
- コードなしで計算している記事は見つけた。
- Rのスクリプト記事もあった。
- 共分散行列から求める関数を載せている記事はある。
- 「たぶんメソッドはない」という受け答えのStack Overflow.
- もしもうあるようだったら教えてほしい……
- 見つからなかった(検索が足りないのかもしれない)。
- pandas dfを引数に取り偏相関行列のdfを返す関数を作ったので備忘録のために置いておく。
- 動作チェックもしたよ!
コード
p_corr.py
# df: tidy data, column are variable names, index is obs id.
# using numpy as np, pandas as pd
def df_partial_corr(df):
temp_cov = df.cov()
omega = np.linalg.inv(temp_cov)
D = np.diag(np.power(np.diag(omega), -0.5))
temp_pcorr = -np.dot(np.dot(D, omega), D) \
+ 2*np.eye(temp_cov.shape[0])
mtx_pcorr = pd.DataFrame(temp_pcorr,
columns = temp_cov.columns,
index = temp_cov.index)
return mtx_pcorr
検証
この記事のデータを用いて、この記事がRで偏相関行列を求めているので、これを再現。(元ネタ記事の検証を行列に拡張しただけですね)
df_pcorr = df_partial_corr(df) の中身をのぞいてみると、
問題なく再現できているようです。