pythonで
結果を
相関係数とは
以下、
統計学入門 - 東京大学出版会 の
相関係数とは
相関の 程度を 示す 指標であり、 多くの 定義が あるが、 もっともよく 用いられるのは、 ピアソンの 積率相関係数 product-moment correlation coeffient であり、 単に 相関係数と いう ときには 通常これを さしている。
相関係数とスピアマンの<wbr>順位相関係数
、ケンドールの<wbr>順位相関係数
が
Python で 相関係数の 計算が 可能な ライブラリ
以下で
ピアソンの 積立相関係数
pandas.DataFrame.corr — pandas 0.23.4 documentation
method パラメータにpearson を 指定する。
スピアマンの 順位相関係数
pandas.DataFrame.corr — pandas 0.23.4 documentation
method パラメータにspearman を 指定する。
ケンドールの 順位相関係数
pandas.DataFrame.corr — pandas 0.23.4 documentation
method パラメータにkendall を 指定する。
実際に 計算する
ピアソンの 積立相関係数
- numpy.corrcoef を
使う
corrcoef には、相関係数を 求めたい 2値を ndarray で 渡します。
戻り値は、 ndarray で 返ります。
2値以上の値も 渡すことができ、 その 場合、 戻り値の 次元数が 増えます。
# iris の pandas データセットを作成 import pandas as pd import requests import io response_text = requests.get("https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/data/iris.csv").text df = pd.read_csv(io.StringIO(response_text)) # 抽出 arrays = df.loc[:,['SepalLength', 'PetalLength']].values # 相関係数の計算 import numpy as np results = np.corrcoef(arrays.T) print("相関係数を出力") print(results)
相関係数を出力 [[ 1. 0.87175416] [ 0.87175416 1. ]]
- scipy.stats.pearsonr を
使う
x軸の値、 y軸の 値を 配列で 渡すと、 相関係数、 p値が Taple形式で 返ります。
# iris の pandas データセットを作成 import pandas as pd import requests import io response_text = requests.get("https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/data/iris.csv").text df = pd.read_csv(io.StringIO(response_text)) # 抽出 x = df.loc[:,['SepalLength']].values.T y = df.loc[:,['PetalLength']].values.T # 相関係数の計算 from scipy.stats import pearsonr # ndarray を 1次元配列に変換して渡す a, b = pearsonr(np.ravel(x), np.ravel(y)) print("相関係数:", a) print("p値:", b)
相関係数: 0.871754157305 p値: 1.03845406279e-47
- pandas.DataFrame.corrを
使う
# iris の pandas データセットを作成 import pandas as pd import requests import io response_text = requests.get("https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/data/iris.csv").text df = pd.read_csv(io.StringIO(response_text)) # 相関係数の計算 df.corr(method="pearson") でも結果は同様 デフォルト動作 df.corr()
SepalLength | SepalWidth | PetalLength | PetalWidth | |
---|---|---|---|---|
SepalLength | 1.000000 | -0.109369 | 0.871754 | 0.817954 |
SepalWidth | -0.109369 | 1.000000 | -0.420516 | -0.356544 |
PetalLength | 0.871754 | -0.420516 | 1.000000 | 0.962757 |
PetalWidth | 0.817954 | -0.356544 | 0.962757 | 1.000000 |
スピアマンの 順位相関係数
- scipy.stats.spearmanr を
使う
from scipy.stats import spearmanr # 統計学入門 - 東京大学出版会 p55 表3.9 を参考に作成 x = [1,2,3,4,5,6,7,8] y = [3,1,2,5,4,7,6,8] correlation, pvalue = spearmanr(x,y) print("相関係数", correlation) print("p値",pvalue)
相関係数 0.880952380952 p値 0.00385032046373
- pandas.DataFrame.corrを
使う
pandas.DataFrame.corr の引数に method=”spearman” を 指定して 求めます。
import pandas as pd # 統計学入門 - 東京大学出版会 p55 表3.9 を参考に作成 x = [1,2,3,4,5,6,7,8] y = [3,1,2,5,4,7,6,8] df = pd.DataFrame({'x': x,'y': y}) df.corr(method="spearman")
x | y | |
---|---|---|
x | 1.000000 | 0.880952 |
y | 0.880952 | 1.000000 |
ケンドールの 順位相関係数
- scipy.stats.kendalltau を
使う
使用方法は、scipy.stats.spearmanr と 同様です。
from scipy.stats import kendalltau # 統計学入門 - 東京大学出版会 p55 表3.9 を参考に作成 x = [1,2,3,4,5,6,7,8] y = [3,1,2,5,4,7,6,8] correlation, pvalue = kendalltau(x,y) print("相関係数", correlation) print("p値",pvalue)
相関係数 0.714285714286 p値 0.0133475759268
参考
以下、
- 【Python】
ピアソンの 相関係数を いろいろな 方法で 計算する 方法まとめ(SciPy / Numpy / Pandas) - St_Hakky’s blog - スピアマン順位相関係数の
計算 - スピアマンの
順位相関係数 - Wikipedia - ケンドールの
順位相関係数 - Wikipedia - IBM 2変量の
相関分析 Pearsonと Spearmanの 違いに ついて - Japan - scipy.stats.kendalltau — SciPy v0.14.0 Reference Guide
- scipy.stats.spearmanr — SciPy v1.1.0 Reference Guide
以上です。
コメント