Pythonで相関行列、偏相関行列を求める

相関行列、偏相関行列の計算(答え合わせ)は通常Rを使うが、今回はPythonでやってみる。

目的変数と説明変数

弊社アプリの結果画面

単相関

偏相関

PythonはQGISのPythonコンソール上で実行

実行するスクリプト

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import numpy as np
import scipy as sp
from scipy import linalg
 
def partialcorrcoef(c):
    inv_cor = linalg.inv(c)
    rows = inv_cor.shape[0]
    regu_1 = 1 / sp.sqrt(sp.diag(inv_cor))
    regu_2 = sp.repeat(regu_1, rows).reshape(rows, rows)
    regu_1 = 1 / sp.sqrt(sp.diag(inv_cor))
    regu_2 = sp.repeat(regu_1, rows).reshape(rows, rows)
    pcor = (-inv_cor) * regu_1 * regu_2
    sp.fill_diagonal(pcor, 1)
    return pcor
     
 
data=[
[520000,498000,447000,451000,608000],
[160,120,250,105,175],
[284,162,169,163,261],
[400,600,600,600,600]
]
 
C = np.corrcoef(data)
 
PC = partialcorrcoef(C)

スクリプトを実行した後に相関行列(C)、偏相関行列(PC}を表示

計算結果は一致したのでアプリには問題はなし