MySQL Math - Можно ли рассчитать корреляцию в запросе - PullRequest
8 голосов
/ 16 марта 2010

В таблице базы данных MySQL (5.1) есть данные, которые представляют:

  • сколько времени пользователю требуется для выполнения задачи и
  • сколько элементов пользователь обработал во время выполнения задания.

Будет ли MySQL поддерживать корреляцию данных или мне нужно использовать PHP / C # для расчета?

Где найти хорошую формулу для расчета корреляции (с тех пор, как я это делал в последний раз)?

Ответы [ 2 ]

15 голосов
/ 17 марта 2010

Вот примерная реализация выборочного коэффициента корреляции, как описано в:

Википедия - Корреляция и зависимость

create table sample( x float not null, y float not null );
insert into sample values (1, 10), (2, 4), (3, 5), (6,17);

select @ax := avg(x), 
       @ay := avg(y), 
       @div := (stddev_samp(x) * stddev_samp(y))
from sample;

select sum( ( x - @ax ) * (y - @ay) ) / ((count(x) -1) * @div) from sample;
+---------------------------------------------------------+
| sum( ( x - @ax ) * (y - @ay) ) / ((count(x) -1) * @div) |
+---------------------------------------------------------+
|                                       0.700885077729073 |
+---------------------------------------------------------+
3 голосов
/ 03 мая 2017

Однопроходное решение

Существует два варианта коэффициента корреляции Пирсона: один для выборки и один для всего населения. Это однопроходные и, я думаю, правильные формулы для обоих:

-- Methods for calculating the two Pearson correlation coefficients
SELECT  
        -- For Population
        (avg(x * y) - avg(x) * avg(y)) / 
        (sqrt(avg(x * x) - avg(x) * avg(x)) * sqrt(avg(y * y) - avg(y) * avg(y))) 
        AS correlation_coefficient_population,
        -- For Sample
        (count(*) * sum(x * y) - sum(x) * sum(y)) / 
        (sqrt(count(*) * sum(x * x) - sum(x) * sum(x)) * sqrt(count(*) * sum(y * y) - sum(y) * sum(y))) 
        AS correlation_coefficient_sample
    FROM your_table;

Я разработал и протестировал это как T-SQL. Код, который генерировал тестовые данные, не переводился в MySQL, но формулы должны. Убедитесь, что ваши x и y являются десятичными значениями; целочисленная математика может значительно повлиять на эти вычисления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...