Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        /// <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));
        }
Exemple #4
0
        /// <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)));
        }
Exemple #5
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)));
        }
Exemple #6
0
        /// <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);
        }
Exemple #7
0
        /// <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)));
        }