例えば、ある月の気温の集合と、同一月のアイスクリームの売り上げの集合があるとして、気温とアイスクリームの売り上げという集合が、どの程度相関しているかを示すのに使われたりします。
相関係数は-1〜1までの範囲で取得でき、-1、または1に近いほど2つの集合が相関していることを示しています。
ただし、相関係数が-1、または1に近いからといって必ず相関しているわけではなく、一応の目安程度のものとなっています。
例えば上の例で言うと、アイスクリームの売り上げが高かった月と同じ月に殺人事件が多かったとしたら、相関係数は多分1に近くなるかもしれませんが、殺人事件とアイスクリームの売り上げが関係しているとはどう考えても思えません。
相関係数は、以下の式で求められます。
2つの集合の要素数:N(2つの集合の要素数は同じである必要があります。)
集合X:x
集合Y:y
NΣxy - ΣxΣy
------------------------------------
√(NΣx2-(Σx)2)(NΣy2-(Σy)2)
def correlation(x, y):
''' 2つの集合の分散係数を求める
x:集合x
y:集合y
集合xと集合yの要素数は同一であること '''
mulsum = 0
sum_squared_x = 0
sum_squared_y = 0
for xi, yi in zip(x, y):
# x, yの積和
mulsum = mulsum + xi * yi
# xの二乗和
sum_squared_x = sum_squared_x + xi ** 2
# yの二乗和
sum_squared_y = sum_squared_y + yi ** 2
# xの和
sum_x = sum(x)
# yの和
sum_y = sum(y)
# xの和の二乗
squared_sum_x = sum_x**2
# yの和の二乗
squared_sum_y = sum_y**2
N = len(x)
# 分子
numerator = N * mulsum - sum_x * sum_y
# 分母
denominator = ((N * sum_squared_x - squared_sum_x)
* (N * sum_squared_y - squared_sum_y)) ** 0.5
return numerator / denominator
x = [1, 2, 3, 4, 5, 6]
y = [10, 11, 12, 13, 14, 15]
c = correlation(x, y)
print('correlation of x, y is ', c)
0 件のコメント:
コメントを投稿