Я использую MySQL & PHP для расчета R Пирсона, измеряющего соотношение между политическими пожертвованиями и тендерами, полученными конкретным бизнесом в течение ряда лет.
У меня возникли проблемы с запросом MySQL, который вводит значения в алгоритм. Сам алгоритм в порядке и оценивает правильно. Проблема в запросе, используемом для получения данных.
Формула, которую я использую для R Пирсона: http://www.statisticshowto.com/how-to-compute-pearsons-correlation-coefficients/
Вот основной запрос MySQL, который выплевывает значения для каждого года:
SELECT count( distinct year) as count,name,sum(donations), sum(tenders), sum(donations * tenders) as xy,(sum(donations)*sum(donations)) as x2, (sum(tenders)*sum(tenders)) as y2 from money_by_year where name='$name' group by name,year
Вот запрос WITH ROLLUP, чтобы получить только окончательные значения:
SELECT count( distinct year) as count,name,sum(donations), sum(tenders), sum(donations * tenders) as xy,(sum(donations)*sum(donations)) as x2, (sum(tenders)*sum(tenders)) as y2 from money_by_year where name='$name' group by name with rollup LIMIT 1
Проблема в том, что суммы из второго запроса неверны в сумме xy, x2 & y2. Это вызвано самим запросом, возможно, ROLLUP, и я хотел бы знать, что с ним происходит.
Вы можете увидеть рабочие примеры кода со значениями, полученными как из приведенных выше запросов, так и из алгоритма на https://openaus.net.au/follow_the_money.php?name=KPMG
Я пробовал различные изменения в сумме (пожертвования * тендеры) как xy, например, реализуя его как сумму (пожертвования) * сумма (тендеры), как в:
SELECT count( distinct year) as count,name,sum(donations), sum(tenders), sum(donations) * sum(tenders) as xy,(sum(donations)*sum(donations)) as x2, (sum(tenders)*sum(tenders)) as y2 from money_by_year where name='KPMG' group by name with rollup LIMIT 1
однако итоги ROLLUP неверны, они намного больше, чем должны быть. Значения, которые я хочу, могут быть невозможны с помощью одного запроса MySQL, однако я был бы признателен, если бы знал, почему это так, что ROLLUP делает с цифрами и почему.
Задача ещё не решена.
Других решений пока нет …