public static double Kurtosis(double[] angles)
{
// Compute mean direction
double theta = Circular.Mean(angles);
// Compute central moments
double rho2 = CentralMoments(angles, 2).Magnitude;
double mu2 = NoncentralMoments(angles, 2).Phase;
// compute skewness
double k = 0;
for (int i = 0; i < angles.Length; i++) // Pewsey, Metrika, 2004
k += Math.Cos(2 * Circular.Distance(angles[i], theta));
k /= angles.Length;
/*
double k0 = 0;
double R4 = (R * R * R * R);
double omR2 = (1 - R) * (1 - R);
for (int i = 0; i < angles.Length; i++) // Fisher, Circular Statistics, p. 34
k0 += (rho2 * Math.Cos(Circular.Distance(mu2, 2 * theta)) - R4) / omR2; // (formula 2.30)
*/
return k;
}