Простая функция, которая считает коэффициент корреляции двух наборов данных: X и Y.
Примечание: размерность набора данных X должна быть равна размерности набора данных Y!
Код на D:
import std.math;
// среднее арифметическое
float mean(float[] var)
{
float sum = 0.0; // переменная-накопитель под сумму
for (uint i = 0; i < var.length; i++)
{
sum += var[i];
}
return sum / var.length;
}
// корреляция по Пирсону
float pearsonCorrelation(float[] X, float[] Y)
{
// средние значения для наборов данных
float xmean = mean(X), ymean = mean(Y);
// cov - это нечто иное, как ковариация
float cov = 0.0, a = 0.0, b = 0.0;
for (uint i = 0; i < X.length; i++)
{
cov += (X[i] - xmean) * (Y[i] - ymean);
a += (X[i] - xmean) ^^ 2;
b += (Y[i] - ymean) ^^ 2;
}
return cov / sqrt(a * b);
}