/* Return the kurtosis of values in datalist.
kurtosis1 implements the formula used by
MINITAB and MS Excel. */
double kurtosis1(double *datalist, size_t listsize)
{
int idx;
double n, mean, sd, t1, t2, t3;
n = (double)listsize;
mean = a_mean(datalist, listsize);
sd = s_stdev(datalist, listsize);
if(n < 4. || dbl_isequal(sd, 0.0))
{
fprintf(stderr, "\nerror: invalid input to kurtosis()\n");
return 0.0;
}
t1 = (n*(n+1))/((n-1)*(n-2)*(n-3));
t2 = 0.0;
for(idx = 0; idx < listsize; idx++)
{
t2 += pow((datalist[idx] - mean)/sd, 4.);
}
t3 = (3.0*((n-1)*(n-1)))/((n-2)*(n-3));
return (t1 * t2) - t3;
}
/* Return the kurtosis of values in datalist.
kurtosis2 implements the formula used by NIST Dataplot. */
double kurtosis2(double *datalist, size_t listsize)
{
int idx;
double mean, sd, sum;
mean = a_mean(datalist, listsize);
sd = s_stdev(datalist, listsize);
sum = 0.0;
for(idx = 0; idx < listsize; idx++)
{
sum += pow(datalist[idx] - mean, 4.0) / (listsize - 1);
}
return sum / pow(sd, 4.0);
}


|