3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

R, Pythonでの共分散、相関係数の求め方

Posted at

#はじめに
これは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)

を表している。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?