#はじめに
これはRの基本コマンドをPythonで書き換えていき、自身の理解を深めようという目的で記事を書いている。
参考文献:「Rによるやさしい統計学」
#共分散と相関係数
2つの変数の関係を表すものに共分散と相関係数がある。
変数 $x$ と変数 $y$ の不偏共分散は以下の式で表される。
$$s_{xy} = \frac{1}{N-1}\sum_{i=1}^{N}(x_i-\bar{x})(y_i-\bar{y})$$
$\bar{x}$ は $x$ の平均を意味する。以上を用いると、相関係数は、
$$r_{xy} = \frac{s_{xy}}{s_x s_y}$$
と表される。分母の $s_x$ は変数 $x$ の標準偏差を表している。
相関係数の値は-1~1の範囲を取り、1に近いと正の相関があり、-1に近いと負の相関があるという。0に近い場合は無相関となる。
#Rでの共分散、相関係数
x <- c(1,3,10,12,6,3,8,4,1,5)
y <- c(20,40,100,80,50,50,70,50,10,60)
cov(x, y) #不偏共分散
cor(x, y) #相関係数
[1] 90.11111
[1] 0.9092974
$x$ と $y$ には強い正の相関があることが分かる。
#Python での共分散、相関係数
いろいろと方法はあるが、numpy
の関数を使った方法が一番簡単そう。
import numpy as np
x = np.array([1,3,10,12,6,3,8,4,1,5])
y = np.array([20,40,100,80,50,50,70,50,10,60])
print(np.cov(x, y)) #不偏共分散
print(np.corrcoef(x, y)) #相関係数
[[ 13.78888889 90.11111111]
[ 90.11111111 712.22222222]]
[[1. 0.9092974]
[0.9092974 1. ]]
出力を見て分かる通り、Python では共分散行列と相関係数行列が出力される。つまり、np.cov
関数の出力は
\left( \begin{array}{cc}
s_{xx} & s_{xy} \\
s_{yx} & s_{yy}
\end{array} \right)
を表しており、np.corrcoef
関数の出力は
\left( \begin{array}{cc}
r_{xx} & r_{xy} \\
r_{yx} & r_{yy}
\end{array} \right)
を表している。