SQLのピアソン相関係数式
「PostgreSQL相関関数の使用」ページで説明したように、相関を使用すると、2つの一連の数値がどのように関連しているかを示すことができます。正の相関としての強度または負の相関としての強度のいずれか、および相関がまったくないことを含む、その間の任意の量の強度。
相関係数について少し要約すると:
相関係数は、2つの数値または2つの数値のセット間の関係の強さを決定するために広く使用されている方法です。この係数は、-1から1.1までの数値として計算されます。1は可能な限り強い正の相関であり、-1は可能な限り強い負の相関です。
正の相関は、1つの数値が増加すると、2番目の数値も増加することを意味します。
負の相関は、1つの数値が増加すると、2番目の数値が減少することを意味します。
2番目の数値の結果が最初の数値によって引き起こされているかどうかはここでは決定されていません。2つの数値の結果が互いに協調して発生しているだけです。
数式が0を返す場合、2つの数値セットの間に相関関係はまったくありません。
ピアソンの公式は次のようになります:
概説したように、SQLで一連の数値のピアソン式を計算する方法があります。
ここでは、試用版が無料で提供されるデモデータソースからの番号セットでそれを行いました。
SQLの式は次のようになります:
((tot_sum - (amt_sum * act_sum / _count)) / sqrt((amt_sum_sq - pow(amt_sum, 2.0) / _count) * (act_sum_sq - pow(act_sum, 2.0) / _count)))
そして、次のようなクエリ全体で使用されます:
SELECT
((tot_sum - (amt_sum * act_sum / _count)) / sqrt((amt_sum_sq - pow(amt_sum, 2.0) / _count) * (act_sum_sq - pow(act_sum, 2.0) / _count))) AS "Corr Coef Using Pearson"
FROM(
SELECT
sum("Amount") AS amt_sum,
sum("Activities") AS act_sum,
sum("Amount" * "Amount") AS amt_sum_sq,
sum("Activities" * "Activities") AS act_sum_sq,
sum("Amount" * "Activities") AS tot_sum,
count(*) as _count
FROM(
SELECT
DATE_TRUNC('day', p.payment_date)::DATE AS "Day",
SUM(p.amount) AS "Amount",
COUNT(DISTINCT a.activity_id) AS "Activities"
FROM
public.payments p
INNER JOIN public.subscriptions s ON p.subscription_id = s.subscription_id
INNER JOIN public.users u ON s.user_id = u.user_id
INNER JOIN public.activity a ON a.user_id = u.user_id
GROUP BY 1) as a
) as b
GROUP BY tot_sum, amt_sum, act_sum, _count, amt_sum_sq, act_sum_sq
このクエリからわかるのは、PostgreSQLでcorr()関数を使用した場合とまったく同じです。