/// <summary> /// Returns the population kurtosis of the elements of an array. /// </summary> /// <param name="v">An array of real numbers.</param> /// <returns>The population kurtosis of the elements of v.</returns> public static double PopulationKurtosis(IEnumerable <double> v) { double mean = Mean(v); int count = 0; double num = 0.0; double sumsq = 0.0; foreach (double item in v) { double c = item - mean; double sq = c * c; num += sq * sq; sumsq += sq; count++; } if (count < 4) { return(double.NaN); } double Stdev4 = ExMath.Pow(sumsq / count, 2); return((num / count) / Stdev4 - 3); }
/// <summary> /// Returns the central moment of a specific order of the elements of an array. /// </summary> /// <param name="v">An array of real numbers.</param> /// <param name="k">The order of the central moment.</param> /// <returns>The central moment of k-order of the elements of v.</returns> /// <exception cref="System.ArgumentException">The value of k less than one.</exception> public static double PopulationCentralMoment(IEnumerable <double> v, int k) { if (k < 1) { throw new ArgumentException("The order of the central moment must be greater than zero."); } if (!v.Any()) { return(double.NaN); } if (k == 1) { return(0.0); } int count = 0; double mean = Mean(v); double sum = 0.0; foreach (double item in v) { sum += ExMath.Pow(item - mean, k); count++; } return(sum / count); }
/// <summary> /// Returns the population skewness of the elements of an array. /// </summary> /// <param name="v">An array of real numbers.</param> /// <returns>The population skewness of the elements of v.</returns> public static double PopulationSkewness(IEnumerable <double> v) { double mean = Mean(v); int count = 0; double sumcube = 0.0; double sumsq = 0.0; foreach (double item in v) { double c = item - mean; double sq = c * c; sumcube += sq * c; sumsq += sq; count++; } if (count < 3) { return(double.NaN); } double stdev = Math.Sqrt(sumsq / count); return((sumcube / count) / ExMath.Pow(stdev, 3)); }
/// <summary> /// Returns the sample kurtosis of the elements of an array. /// </summary> /// <param name="v">An array of real numbers.</param> /// <returns>The sample kurtosis of the elements of v.</returns> public static double SampleKurtosis(IEnumerable <double> v) { double mean = Mean(v); int count = 0; double num = 0.0; double sumsq = 0.0; foreach (double item in v) { double c = item - mean; double sq = c * c; num += sq * sq; sumsq += sq; count++; } if (count < 4) { return(double.NaN); } double Stdev4 = ExMath.Pow(sumsq / (count - 1), 2); return((count * (count + 1.0) / ((count - 1.0) * (count - 2.0) * (count - 3.0))) * (num / Stdev4) - 3 * ((count - 1.0) * (count - 1.0)) / ((count - 2.0) * (count - 3.0))); }
/// <summary> /// Returns the sample skewness of the elements of an array. /// </summary> /// <param name="v">An array of real numbers.</param> /// <returns>The sample skewness of the elements of v.</returns> public static double SampleSkewness(IEnumerable <double> v) { double mean = Mean(v); int count = 0; double sumcube = 0.0; double sumsq = 0.0; foreach (double item in v) { double c = item - mean; double sq = c * c; sumcube += sq * c; sumsq += sq; count++; } if (count < 3) { return(double.NaN); } double Stdev = Math.Sqrt(sumsq / (count - 1)); return((count * sumcube) / ((count - 1.0) * (count - 2.0) * ExMath.Pow(Stdev, 3))); }
/// <summary> /// Returns the population variance of the elements of an array. /// </summary> /// <param name="v">An array of real numbers.</param> /// <returns>The population variance of the elements of v.</returns> public static double PopulationVariance(IEnumerable <double> v) { int count = 0; double sum = 0.0; double mean = Mean(v); foreach (double item in v) { sum += ExMath.Pow(item - mean, 2); count++; } return(sum / count); }
/// <summary> /// Returns the sample variance of the elements of an array. /// </summary> /// <param name="v">An array of real numbers.</param> /// <returns>The sample variance of the elements of v.</returns> public static double SampleVariance(IEnumerable <double> v) { int count = 0; double sum = 0.0; double mean = Mean(v); foreach (double item in v) { sum += ExMath.Pow(item - mean, 2); count++; } if (count == 1) { return(0.0); } return(sum / (count - 1)); }
/// <summary> /// Returns the value of the probability density function for the specified value. /// </summary> /// <param name="x">A real number within the domain of the distribution.</param> /// <returns>The value of the probability density function for x.</returns> public override double ProbabilityDensityFunction(double x) { double var = _stdev * _stdev; return((1.0 / Math.Sqrt(ExMath.TwoPi * var)) * Math.Exp(-ExMath.Pow(x - _mean, 2) / (2 * var))); }