PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wzór na współczynnik korelacji Pearsona w SQL

Wzór na współczynnik korelacji Pearsona w SQL

Jak omówiliśmy na naszej stronie „Używanie funkcji korelacji PostgreSQL”, użycie korelacji może pokazać, jak dwie serie liczb są powiązane. Albo ich siła jako korelacja dodatnia, albo siła jako korelacja ujemna i dowolna siła pomiędzy nimi, w tym brak korelacji w ogóle.

Podsumowując współczynnik korelacji:

Współczynnik korelacji to szeroko stosowana metoda określania siły związku między dwiema liczbami lub dwoma zestawami liczb. Współczynnik ten jest obliczany jako liczba od -1 do 1,1 oznacza najsilniejszą możliwą korelację dodatnią, a -1 oznacza najsilniejszą możliwą korelację ujemną.

Dodatnia korelacja oznacza, że ​​wraz ze wzrostem jednej liczby, druga liczba również wzrośnie.

Ujemna korelacja oznacza, że ​​wraz ze wzrostem jednej liczby druga liczba maleje.

To, czy wynik drugiej liczby jest SPOWODOWANY przez pierwszą, nie jest tutaj określane, po prostu wyniki dwóch liczb są ze sobą zgodne.

Jeśli formuła zwraca 0, to nie ma absolutnie ŻADNEJ korelacji między dwoma zestawami liczb.

Formuła Pearsona wygląda tak:

Jak już wspomniano, istnieją sposoby na obliczenie wzoru Pearsona dla zestawu liczb w SQL.

Zrobiliśmy to tutaj na zestawie liczbowym z naszego źródła danych demonstracyjnych, które jest dostępne bezpłatnie wraz z wersją próbną.

Ta formuła w SQL wygląda tak:

((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)))

I używane w całym zapytaniu, tak jak to:

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

To, co zobaczylibyśmy z tego zapytania, jest dokładnie tym, co zobaczylibyśmy za pomocą funkcji corr() w 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. PostgreSQL:różnica wydajności NIE W porównaniu z WYJĄTKIEM (edytowane nr 2)

  2. pgpredict – Analiza predykcyjna w PostgreSQL

  3. Ogólne rozwiązanie Ruby dla SQLite3 LIKE czy PostgreSQL ILIKE?

  4. Nie mogę zainstalować pg gem w systemie Windows

  5. Jak zmienić użytkownika na superużytkownika w PostgreSQL?