相関係数は、なんでマイナス1からプラス1までなのか?pythonで相関変数プログラムを組んで、考えてみた。
相関係数(Correlation Coefficient)
相関係数(r) = XYの共分散 / (Xの標準偏差×Yの標準偏差)
数学xと理科yの点数に関係性があるか、相関係数を計算してみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
import numpy as np import math # 10点満点 x = [3,8,9,7,4,5,8,10,9,7] # 数学のテスト y = [4,6,8,4,5,4,7, 9,7,6] # 理科のテスト # これだと、r=0.5になる # x = [1,2,3] # y = [5,4,6] print(x) print(y) # それぞれの平均点を求める x_mean = np.mean(x) y_mean = np.mean(y) print('x_mean =', x_mean) print('y_mean =', y_mean) # 偏差を算出 x_deviation = [] y_deviation = [] for i in range(len(x)): x_deviation.append(x[i] - x_mean) y_deviation.append(y[i] - y_mean) print('x_deviation =',x_deviation) print('y_deviation =',y_deviation) # 偏差を二乗して、全部足して、個数で割ると分散。 x_temp = 0 y_temp = 0 for i in range(len(x)): x_temp += pow(x_deviation[i],2) y_temp += pow(y_deviation[i],2) x_variance = x_temp / len(x) y_variance = y_temp / len(y) print('x_variance =',x_variance) print('y_variance =',y_variance) # ルートを取ると標準偏差 x_sd = math.sqrt(x_variance) y_sd = math.sqrt(y_variance) print('x_sd =',x_sd) print('y_sd =',y_sd) #共分散は、それぞれのxの偏差×yの偏差を計算して、総和を個数で割る cov = 0 for i in range(len(x)): cov += x_deviation[i] * y_deviation[i] cov /= len(x) print('cov =',cov) # 相関係数(r) r = cov / (x_sd * y_sd) print('r =',r) |
分子 = Xのバラツキ×Yのバラツキ(共分散)
分母 = Xのバラツキ×Yのバラツキ(標準偏差x*y)
って、感じだから、何も考えないと相関係数って、常に1/1 = 1になりそう。
分母がベースになるから、XYのバラケ具合を100%と考えて、
分子の要素ごとのバラケ具合の平均を、パーセンテージで出すイメージ?
なんで100%を超えないのだろうか?
x^2 >= x*y
って事?
// xyデータが1個ずつ
x = 10
y = 10
xyの共分散 10*10/1 = 100
// 分散・標準偏差は二乗しているので、必ずプラス
xの分散 10^2/1 = 100
xの標準偏差 √100 = 10
yの分散 10^2/1 = 100
yの標準偏差 √100 = 10
// 相関係数 = 共分散 / (x標準偏差×y標準偏差)
100/10*10 = 1
共分散は、片方がマイナスだと結果もマイナスになるから、相関係数が-1になるのか…。
完全な正比例じゃなくても
比例関係ならプラス1
反比例関係ならマイナス1
になるんだ、なんで?
計算方法は分かったけど、どうしてこうなるのか分からない。パラメータを変化させた時に、計算結果の予想が出来ない!