Juliaで散布図・相関図を描き、相関係数を求める方法

どうも、木村(@kimu3_slime)です。

今回は、Juliaで散布図を描き、相関係数を求める方法を紹介します。

 



準備

RDatasets, StatsPlotsを使うので、持っていなければインストールしておきましょう。

準備として、以下のコードを実行しておきます。

 

散布図、相関図を描く

RDatasets.jlから、アイリス(iris, アヤメ)のデータを使いましょう。

150 rows × 5 columns

SepalLengthSepalWidthPetalLengthPetalWidthSpecies
Float64Float64Float64Float64Cat…
15.13.51.40.2setosa
24.93.01.40.2setosa
34.73.21.30.2setosa
44.63.11.50.2setosa
55.03.61.40.2setosa

 

「@df データフレーム scatter(変数名1, 変数名2)」で2つのデータに関する散布図(scatter plot)が描けます。

がく片の長さと花弁の長さの散布図は次の通りです。

第1成分が横軸(x軸)、第2成分が縦軸(y軸)です。

 

オプションとして品種の情報を与えることで、品種ごとに色分けしてくれます。

 

データフレームに含まれるすべての変数について、散布図、相関図の組み合わせを並べた図(散布図行列、相関図行列)を描きましょう。

「@df データフレーム corrplot(cols(列の指定))」です。

図の左下側が相関図(correlation plot)、対角成分が1次元のヒストグラム、右上側が2次元のヒストグラムです。

相関図では、相関係数が1に近いときは青、0に近いときは黄色、-1に近いときは赤で表示されています。また、相関図に書かれている直線は、データを近似する回帰直線(regression line)です。

 

特に、花弁の長さ(PetalLength)と花弁の幅(PetalWidth)では強い正の相関があることが読み取れます。

がく片の幅(SepalWidth)と花弁の幅(PetalWidth)・花弁の長さ(PetalLength)では、負の相関を示す色が出て、回帰直線の傾きも負です。しかし、これは散布図を見る限り、データとマッチするとは言い難いことに注意しましょう。

 

相関図行列でも、品種ごとにプロットできます。

各品種ごとに回帰直線が引かれています。SepalWidthについては、品種ごとにはPetalWidth・PetalLengthと弱い正の相関がありそうですね。

 

相関係数を求める方法

「@df データフレーム cor(変数名1, 変数名2)」で、(ピアソンの積率)相関係数(correlation coefficient)が求められます。

相関係数の定義は次の通り。

\[ \begin{aligned}\mathrm{cor}(x,y) = \frac{\mathrm{cov}(x,y)}{\mathrm{std}(x)\mathrm{std}(y)}\end{aligned} \]

\[ \begin{aligned}\mathrm{cov}(x,y) = \frac{1}{n-1}\sum _{i=1}^n (x_i -\mathrm{mean}(x))(y_i – \mathrm{mean}(y))\end{aligned} \]

平均と標準偏差について:Juliaでデータのヒストグラム、箱ひげ図を描き、平均、中央値、分散を求める方法

 

同様に、「cov」で(不偏)共分散(covariance)が計算できます。

 

相関係数、共分散、標準偏差の関係を検算してみると、確かにほぼ一致していることがわかります。

 

特定の変数だけでなく、すべての変数についてまとめて相関、共分散、分散を計算できます。それぞれ相関行列(correlation matrix)、分散・共分散行列(variance-covariance matrix)と呼ばれるものです。

 

 

最後に、各品種ごとに相関図を描き、相関行列を求めてみましょう。

 

 

 

いずれの品種でも、すべての変数について、弱い相関~強い相関がありそうなことが、散布図と相関係数からわかりますね。

品種全体を扱った最初の結果は、線形的な相関関係では必ずしも測れないものだった、ということがこの例から読み取れます。がく片の幅という変数の違いより、品種の違いの方が大きく影響して、関係が読み取りづらかったわけです。

 

以上、Juliaで散布図を描き、相関係数を求める方法を紹介してきました。

相関係数を計算するのは簡単ですが、データと散布図を見て、変数間にどんな関係性があるのか・ないのか予想することは大事です。必ず散布図を描いて、その考察に相関係数を利用すると良いでしょう。

木村すらいむ(@kimu3_slime)でした。ではでは。

 

1から始める Juliaプログラミング
進藤 裕之(著), 佐藤 建太(著)
コロナ社 (2020-03-26T00:00:01Z)
5つ星のうち4.5
¥7,353 (コレクター商品)

 

こちらもおすすめ

Juliaでデータのヒストグラム、箱ひげ図を描き、平均、中央値、分散を求める方法

Pythonで統計量関数(平均、中央値、分散、相関係数)を作り、可視化しよう