Pythonで相関係数を求めてみた【記述統計】

項目間の関係性を調べる時に、社会心理学でよく用いられるのが相関関係です。相関関係は相関係数の値から推測できます。

目安としては以下のTableのようになります。

相関係数 (絶対値) 相関の強さの目安
0.3未満 相関ほぼ無し
0.3〜0.5 弱い相関がある
0.5〜0.7 相関がある
0.7〜0.9 強い相関がある
0.9以上 非常に強い相関がある

 

では早速Pythonを使って求めていきましょう。

 

相関係数を求める

散布図を図示してみる

まずはデータを取得しておきましょう。

データはアヤメを用います。

# pandasとdatasetsをインポート
import pandas  as pd
from sklearn import datasets

# サンプルデータ(アヤメ)
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns = iris.feature_names)

 

確認のため、0〜9番目までのデータを見てみます。

df.head(10)

 

それでは、petal length (cm) とpetal width (cm) の2変数を対象として、散布図を図示します。

以下のコードを入力しましょう。

import matplotlib.pyplot as plt
plt.scatter(X["petal length (cm)"], X["petal width (cm)"])
plt.show()

 

x軸がpetal length (cm)、y軸がpetal width (cm) となります。

目視する限りでは、なかなかに強い正の相関がありそうですね。

この予測が立ったところで、次は相関係数を求めていきましょう。

 

相関係数を算出する

公式

 

Sxyは共分散、Sxx, Syyは2変数それぞれの分散となります。

 

共分散と相関係数を求める

 

関数を作る形で求めてみます。

共分散は英語でcovariance、相関係数は英語でcorrelationです。関数の名前はそれにあてはめました。

import numpy as np

# 共分散
def covariance(x, y):
    xx = x - np.mean(x)
    yy = y - np.mean(y)
    result = np.sum(xx * yy) / x.shape[0]
    return result

# 相関係数
def correlation(x, y):
    result = covariance(x, y) / np.sqrt(covariance(x, x) * covariance(y, y))
    return result

# petal length (cm) とpetal width (cm) の共分散と相関係数
print(covariance(df["petal length (cm)"], df["petal width (cm)"]))
print(correlation(df["petal length (cm)"], df["petal width (cm)"]))

 

出力:

共分散 = 1.29

相関係数 = 0.96

 

因みに共分散の関数で、covariance(x, y) とあり、これをcovariance(x, x) とすることで変数xの分散を求めることになります。言い換えると、xとxの共分散とも言えたりしますかね。変数yの場合も同様ですね。

ちょっとよくわからないという方は、分散と共分散の公式をよく見比べてみてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です