Up

相関係数の検定

 

帰無仮説「相関係数=0」の検定を行うためのPythonスクリプトをリスト1のように作成した。ファイルは、まとめて圧縮ファイルtest_corr_files.zipとしている。圧縮ファイルtest_corr_files.zipには、Jupyter Notebook用のファイルも含まれている。

リスト1の使用例を示すために、2教科、科目Aと科目B、のスコアが表1のようである仮想データを作成した。

1 2教科[科目A, 科目B]のスコア

[79, 72]    [77, 70]    [74, 75]    [53, 44]    [76, 52]

[68, 60]    [96, 96]    [85, 71]    [74, 49]    [93, 80]

[54, 55]    [86, 70]    [89, 96]    [87, 87]    [81, 81]

[84, 85]    [78, 64]    [76, 53]    [54, 57]    [75, 60]

 

1の2教科のスコアの相関係数の検定を行う。

リスト1のスクリプトを実行すると、入力データファイルの名前の設定が求められる。

 

File Name(*.csv) =

 

入力データファイルは、CSV形式のファイルとして用意する。図1のファイルは、表1のデータをCSV形式のファイルSampleData.csvとして用意したものである。

図1

 

1行目に変量名を書き、その下にデータ値を設定している。Excelなどの表計算ソフトで用意したデータをCSV形式のファイルに変換する方法は、このウェブサイトで説明しているが、ファイルに保存するときにファイル拡張子として「.csv」を選ぶだけである。

例として、図1のデータファイルを設定する。

 

File Name(*.csv) = SampleData.csv

 

上の設定は、データファイルがスクリプトファイルと同じフォルダ内に置かれている場合の設定である。異なるフォルダにあるときは、フォルダの指定が必要になる。

入力データファイル名を設定すると、ファイルが読み込まれて、変量の選択が求められる。

 

File Name(*.csv) = SampleData.csv

['科目A' '科目B']

X =

 

変量名のリストが「'」で挟まれて表示されている。「'」を外した形で設定する。

1番目の変量(Xで表されている)を設定すると、2番目の変量(Yで表されている)の設定が求められる。

 

['科目A' '科目B']

X = 科目A

Y = 科目B

 

2番目の変量の名前を設定すると、計算が始まり、計算が終了すると散布図が表示される(図2)。

図2

 

図2のWindowを閉じると、スクリプトの実行が終了する。

端末には、以下の出力が表示されている。

 

r = 0.77719

two-sided p-value = 0.00006

95% CI = [0.51010, 0.90757]

 

 

 

 

 

リスト1 相関係数の検定

 

import pandas as pd

import matplotlib.pyplot as plt

import japanize_matplotlib

import scipy.stats as ss

 

fin_nm = input('File Name(*.csv) = ')

data_fm = pd.read_csv(fin_nm, encoding='shift_jis')

print(data_fm.keys().values)

Var_A = input('X = ')

Var_B = input('Y = ')

A = data_fm[Var_A].values

B = data_fm[Var_B].values

 

results = ss.pearsonr(A, B)

print(f'r = {results.statistic:.5f}')

print(f'two-sided p-value = {results.pvalue:.5f}')

low, high = results.confidence_interval(0.95)

print(f'95% CI = [{low:.5f}, {high:.5f}]')

 

plt.figure(figsize=(6, 6))

plt.title(f'r = {results.statistic:.3f},' +

          f'   p-value = {results.pvalue:.5f}' +

          f'\n95% CI = [{low:.5f}, {high:.5f}]',

          fontsize=16)

for x, y in zip(A, B):

    plt.plot(x, y, 'o', color='k', markersize=10, fillstyle='none')

plt.xticks(fontsize=14)

plt.yticks(fontsize=14)

plt.xlabel(Var_A, fontsize=16)

plt.ylabel(Var_B, fontsize=16)

plt.tight_layout()

plt.show()

 

 

 

参考資料

岡本安晴(2019)いまさら聞けないPythonでデータ分析.丸善出版

 

 

Up