PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Формулата на коефициента на корелация на Пиърсън в SQL

Формулата на коефициента на корелация на Pearson в SQL

Както обсъдихме на нашата страница „Използване на корелационната функция на PostgreSQL“, използването на корелацията може да ви покаже как са свързани две серии от числа. Или тяхната сила като положителна корелация, или силата им като отрицателна корелация и всякаква сила между тях, включително никаква корелация.

За да обобщим малко коефициента на корелация:

Коефициентът на корелация е широко използван метод за определяне на силата на връзката между две числа или два набора от числа. Този коефициент се изчислява като число между -1 и 1. 1 е възможно най-силната положителна корелация, а -1 е възможно най-силната отрицателна корелация.

Положителната корелация означава, че с увеличаване на едно число, второто число също ще се увеличава.

Отрицателна корелация означава, че с увеличаване на едно число, второто число намалява.

Тук не се определя дали резултатът от второто число е ПРИЧИНЕН или не от първото, просто резултатите от двете числа се случват съвместно един с друг.

Ако формулата върне 0, тогава няма абсолютно НИКАКВА корелация между двата набора от числа.

Формулата на Пиърсън изглежда така:

Както беше очертано, има начини за изчисляване на формулата на Пиърсън за набор от числа в 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

Това, което ще видим от тази заявка, е точно това, което ще видим с помощта на функцията corr() в PostgreSQL:


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. clojure.java.jdbc мързелива заявка

  2. JPA имена на таблици с главни букви

  3. Как да автоматизирате PostgreSQL 12 репликация и отказ с repmgr – част 2

  4. В PostgreSQL, как да вмъкна данни с команда COPY?

  5. Незадължителен израз INSERT във веригата на транзакции, използвайки NodeJS и Postgres