ここでは統計学の基本的ツールである共分散と相関係数について解説します。
当ページで学ぶこと
- 共分散とは
- Pythonで共分散を求める
- 相関係数とは
- Pythonで相関係数を求める
共分散とは
確率論において、共分散は 2 つの確率変数の同時確率の指標です。2 つの変数がどのように変化するのかを示します。これは以下のように書き表されます。X と Y は確率変数です。
cov(X,Y)
共分散は次の式で求められます。
cov(X,Y)=E[(X−E[X])×(Y−E[Y])]
X と Y の期待値がわかっている場合は、共分散は以下の式で求められます。
cov(X,Y)=1n×∑(x−E[X])×(y−E[Y])
統計学では、標本から共分散を求めるにはバイアス補正を行います。
cov(X,Y)=1n−1×∑(x−E[X])×(y−E[Y])
共分散の値は、2 つの変数が同じ方向に変化するときは正の値になり、反対方向に変化するときは負の値になります。共分散の値の大きさの解釈は簡単ではありません。ただし 0 のときは 2 つの変数は完全に独立していることを示しています。
Pythonで共分散を求める
NumPy には共分散を直接求める関数はありません。代わりに共分散行列を求める cov()
関数 があります。これで作成した共分散行列から共分散を取得することができます。デフォルトでは cov()
関数はバイアス補正後の値を求めます。
以下のコードは、値が上昇するものと下降するものの2 つのベクトルを作成して共分散行列を求めています。そして共分散行列のインデックス [0, 1]
を取得しています。
import numpy as np
# ベクトルを作成
x = np.array([1,2,3,4,5,6,7,8,9])
y = np.array([9,8,7,6,5,4,3,2,1])
print(x)
print(y)
# 相関の計算
Sigma = np.cov(x,y)[0,1]
print(Sigma)
ご覧の通りベクトル x と y は逆の相関があることがわかります。
相関係数
共分散は、X と Y の標準偏差の積で割ることで、-1 から 1 の間に収まるように正規化することができます。この計算結果が、俗に言う「相関関係(ピアソンの相関係数)」です。
r=cov(X,Y)sX×sY
r は X と Y の相関係数であり、cov(X,Y) は X と Y の標本共分散であり、sX と sY は X と Y の標準偏差です。
Pythonで相関係数を求める
NumPy では corrcoef()
関数で 2 つの変数の間の相関係数を直接求めることができます。この関数は cov()
関数と同じように相関行列を返します。以下のコードでは、その中のインデックス [0,1]
を取得しています。
import numpy as np
# ベクトルを作成
x = np.array([1,2,3,4,5,6,7,8,9])
y = np.array([9,8,7,6,5,4,3,2,1])
print(x)
print(y)
# 相関の計算
corr = np.corrcoef(x,y)[0,1]
print(corr)