相関係数
2変数の場合についてここまでの内容を復習する。標本分散、標本共分散にもとづいた式を用いて説明を行う。 2つのデータ列
$ X = \{x_1,x_2, \ldots, x_N\}
$ Y = \{y_1,y_2,\ldots,y_N\}
分散(variance)
$ Vx = \frac{1}{N} \sum_{i=1}^{N} (x_i - \bar{x})^2
$ Vy = \frac{1}{N} \sum_{i=1}^{N}(y_i - \bar{y})^2
標準偏差(standard deviation)
$ S_x = \sqrt{V_x}
$ S_y = \sqrt{V_y}
共分散(covariance)
$ S_{xy} = S_{yx} = \frac{1}{N} \sum_{i=1}^{N} (x_i - \bar{x})(y_i - \bar{y})
$ \Sigma = \left[\begin{array}{cc}S_{x}&S_{xy}\\S_{xy}&S_{y}\end{array}\right]
相関係数(correlation coefficient)
$ r_{xy} = r_{yx} = \frac{S_{xy}}{S_x S_y}
相関行列(correlation matrix)
$ \left[\begin{array}{cc} 1 & r_{xy} \\ r_{xy} & 1 \end{array}\right]
プログラムを示す。
code:cm01.py
import numpy as np
print('定義式--------------')
Vx = np.sum((x - np.mean(x))**2) / N
Vy = np.sum((y - np.mean(y))**2) / N
print('分散',Vx, Vy)
Sx1 = np.sqrt(Vx1)
Sy1 = np.sqrt(Vy1)
print('標準偏差', Sx1, Sy1)
Sxy1 = np.sum((x- np.mean(x))*(y - np.mean(y))) / N
print('共分散', Sxy1)
r1 = Sxy1 / (Sx1 * Sy1)
print('相関係数', r1)
code:result.txt
定義式--------------
分散 256.0 176.0
標準偏差 16.0 13.2664991614216
共分散 126.0
相関係数 0.5936004596374721
code:(続き).py
print('NumPy--------------')
Sxy2 = np.cov(x, y, bias=True)
print('分散共分散行列\n', Sxy2)
r2 = np.corrcoef(x, y)
print('相関行列: \n', r2)
code:実行結果.txt
NumPy--------------
分散共分散行列
相関行列: