Exemple #1
0
        /// <summary>
        /// Calculate the variance value of array data. Supported data type: double/float/int.
        /// </summary>
        /// <param name="data">The array data to calculate statistic value.</param>
        /// <typeparam name="TDataType">Supported data type: double/float/int.</typeparam>
        /// <returns>The variance value of array data in specific place.</returns>
        /// <exception cref="NotSupportedException">Supported data type: double/float/int.</exception>
        public static double Variance <TDataType>(TDataType[] data)
        {
            double variance = double.NaN;

            if (ReferenceEquals(typeof(TDataType), typeof(double)))
            {
                double[] doubleData = data as double[];
                variance = ArrayStatistics.Variance(doubleData);
            }
            else if (ReferenceEquals(typeof(TDataType), typeof(float)))
            {
                float[] floatData = data as float[];
                variance = ArrayStatistics.Variance(floatData);
            }
            else if (ReferenceEquals(typeof(TDataType), typeof(int)))
            {
                int[] intData = data as int[];
                variance = ArrayStatistics.Variance(intData);
            }
            else
            {
                throw new NotSupportedException("Unsupported data type.");
            }
            return(variance);
        }
        private void GenerarNorm()
        {
            var    observados = Seccionar();
            double acumulador = 0;
            var    frecAbs    = new List <double>();
            var    intervalos = int.Parse(txtInter.Text);
            var    min        = Valores.Min();
            var    max        = Valores.Max();
            var    paso       = (max - min) / intervalos;
            var    mean       = ArrayStatistics.Mean(Valores.ToArray());
            var    desEst     = ArrayStatistics.StandardDeviation(Valores.ToArray());

            for (double i = min; i <= max; i += paso)
            {
                var    sup      = MathNet.Numerics.Distributions.Normal.CDF(mean, desEst, i + paso);
                var    inf      = MathNet.Numerics.Distributions.Normal.CDF(mean, desEst, i);
                double esperado = Valores.Count() * (sup - inf);
                frecAbs.Add(esperado);
            }
            for (int i = 0; i < intervalos - 1; i++)
            {
                acumulador = acumulador + Math.Pow(observados[i] - frecAbs[i], 2) / frecAbs[i];
            }
            txtAcum.Text = acumulador.ToString();
            var gl    = intervalos - 1 - 2;
            var alpha = 0.95;
            var chi   = MathNet.Numerics.Distributions.ChiSquared.InvCDF(gl, alpha);

            txtTabulado.Text = chi.ToString();
        }
        static void Benchmark(object obj, uint iterations, string suffix = null)
        {
            var bench   = new BenchShark(true);
            var result  = bench.EvaluateDecoratedTasks(obj, iterations);
            var results = result.FastestEvaluations.Select(x =>
            {
                var series = x.Iterations.Select(it => (double)it.ElapsedTicks).ToArray();
                Array.Sort(series);
                var summary = SortedArrayStatistics.FiveNumberSummary(series);
                var ms      = ArrayStatistics.MeanStandardDeviation(series);
                return(new { x.Name, Mean = ms.Item1, StdDev = ms.Item2, Min = summary[0], Q1 = summary[1], Median = summary[2], Q3 = summary[3], Max = summary[4] });
            }).ToArray();
            var top     = results[0];
            var managed = results.Single(x => x.Name.StartsWith("Managed"));
            var label   = string.IsNullOrEmpty(suffix) ? obj.GetType().FullName : string.Concat(obj.GetType().FullName, ": ", suffix);

            results.Select(x => new
            {
                x.Name,
                Mean           = Math.Round(x.Mean), StdDev = Math.Round(x.StdDev),
                Min            = Math.Round(x.Min), Q1 = Math.Round(x.Q1), Median = Math.Round(x.Median), Q3 = Math.Round(x.Q3), Max = Math.Round(x.Max),
                TopSlowdown    = Math.Round(x.Median / top.Median, 2),
                ManagedSpeedup = Math.Round(managed.Median / x.Median, 2)
            }).Dump(label);
        }
        private void GenerarEN()
        {
            var    observados = Seccionar();
            var    array      = Valores.ToArray();
            double acumulador = 0;
            var    frecAbs    = new List <double>();
            var    intervalos = int.Parse(txtInter.Text);
            var    min        = Valores.Min();
            var    max        = Valores.Max();
            var    paso       = (max - min) / intervalos;
            var    lambda     = 1 / ArrayStatistics.Mean(array);

            for (double i = min; i <= max; i += paso)
            {
                double esperado = (MathNet.Numerics.Distributions.Exponential.CDF(lambda, i + paso) - MathNet.Numerics.Distributions.Exponential.CDF(lambda, i)) * Valores.Count();
                frecAbs.Add(esperado);
            }
            for (int i = 0; i < intervalos; i++)
            {
                acumulador = acumulador + Math.Pow((observados[i] - frecAbs[i]), 2) / frecAbs[i];
            }
            txtAcum.Text = acumulador.ToString();
            var gl    = intervalos - 1 - 1;
            var alpha = 0.95;
            var chi   = MathNet.Numerics.Distributions.ChiSquared.InvCDF(gl, alpha);

            txtTabulado.Text = chi.ToString();
        }
Exemple #5
0
        /// <summary>
        /// Populate 6 month standard deviation
        /// </summary>
        public static double GetPriceRangeStdDev(this HistoricalData data)
        {
            double[] priceRange = data.High.Select((d, i) => d - data.Low[i]).ToArray();
            double   stdDev     = ArrayStatistics.StandardDeviation(priceRange);

            return(stdDev);
        }
Exemple #6
0
        /// <summary>
        /// Calculate the covariance value of two array data. Supported data type: double/float/int.
        /// </summary>
        /// <param name="data1">The first array data to calculate Covariance value.</param>
        /// <param name="data2">The second array data to calculate Covariance value.</param>
        /// <typeparam name="TDataType">Supported data type: double/float/int.</typeparam>
        /// <returns>The covariance value of two array data in specific place.</returns>
        /// <exception cref="NotSupportedException">Supported data type: double/float/int.</exception>
        public static double Covariance <TDataType>(TDataType[] data1, TDataType[] data2)
        {
            double covariance = double.NaN;

            if (ReferenceEquals(typeof(TDataType), typeof(double)))
            {
                double[] doubleData1 = data1 as double[];
                double[] doubleData2 = data2 as double[];
                covariance = ArrayStatistics.Covariance(doubleData1, doubleData2);
            }
            else if (ReferenceEquals(typeof(TDataType), typeof(float)))
            {
                float[] floatData1 = data1 as float[];
                float[] floatData2 = data2 as float[];
                covariance = ArrayStatistics.Covariance(floatData1, floatData2);
            }
            else if (ReferenceEquals(typeof(TDataType), typeof(int)))
            {
                int[] intData1 = data1 as int[];
                int[] intData2 = data2 as int[];
                covariance = ArrayStatistics.Covariance(intData1, intData2);
            }
            else
            {
                throw new NotSupportedException("Unsupported data type.");
            }
            return(covariance);
        }
Exemple #7
0
        /// <summary>
        /// Calculate the root mean sqaure value of array data. Supported data type: double/float/int.
        /// </summary>
        /// <param name="data">The array data to calculate statistic value.</param>
        /// <typeparam name="TDataType">Supported data type: double/float/int.</typeparam>
        /// <returns>The root mean square value of array data.</returns>
        /// <exception cref="NotSupportedException">Supported data type: double/float/int.</exception>
        public static double RootMeanSqaure <TDataType>(TDataType[] data)
        {
            double rootMeanSqure = double.NaN;

            if (ReferenceEquals(typeof(TDataType), typeof(double)))
            {
                double[] doubleData = data as double[];
                rootMeanSqure = ArrayStatistics.RootMeanSquare(doubleData);
            }
            else if (ReferenceEquals(typeof(TDataType), typeof(float)))
            {
                float[] floatData = data as float[];
                rootMeanSqure = ArrayStatistics.RootMeanSquare(floatData);
            }
            else if (ReferenceEquals(typeof(TDataType), typeof(int)))
            {
                int[] intData = data as int[];
                rootMeanSqure = ArrayStatistics.RootMeanSquare(intData);
            }
            else
            {
                throw new NotSupportedException("Unsupported data type.");
            }
            return(rootMeanSqure);
        }
Exemple #8
0
        /// <summary>
        /// Calculate the harmonic mean value of array data. Supported data type: double/float/int.
        /// </summary>
        /// <param name="data">The array data to calculate statistic value.</param>
        /// <typeparam name="TDataType">Supported data type: double/float/int.</typeparam>
        /// <returns>The harmonic mean value of array data.</returns>
        /// <exception cref="NotSupportedException">Supported data type: double/float/int.</exception>
        public static double HarmonicMean <TDataType>(TDataType[] data)
        {
            double harmonicMean = double.NaN;

            if (ReferenceEquals(typeof(TDataType), typeof(double)))
            {
                double[] doubleData = data as double[];
                harmonicMean = ArrayStatistics.HarmonicMean(doubleData);
            }
            else if (ReferenceEquals(typeof(TDataType), typeof(float)))
            {
                float[] floatData = data as float[];
                harmonicMean = ArrayStatistics.HarmonicMean(floatData);
            }
            else if (ReferenceEquals(typeof(TDataType), typeof(int)))
            {
                int[] intData = data as int[];
                harmonicMean = ArrayStatistics.HarmonicMean(intData);
            }
            else
            {
                throw new NotSupportedException("Unsupported data type.");
            }
            return(harmonicMean);
        }
Exemple #9
0
        public void MeanConsistentWithNistData(string dataSet)
        {
            var data = _data[dataSet];

            AssertHelpers.AlmostEqual(data.Mean, Statistics.Mean(data.Data), 15);
            AssertHelpers.AlmostEqual(data.Mean, ArrayStatistics.Mean(data.Data), 15);
            AssertHelpers.AlmostEqual(data.Mean, StreamingStatistics.Mean(data.Data), 15);
        }
Exemple #10
0
        public void PopulationCovarianceConsistentWithPopulationVariance(string dataSet)
        {
            var data = _data[dataSet];

            AssertHelpers.AlmostEqual(Statistics.PopulationVariance(data.Data), Statistics.PopulationCovariance(data.Data, data.Data), 10);
            AssertHelpers.AlmostEqual(ArrayStatistics.PopulationVariance(data.Data), ArrayStatistics.PopulationCovariance(data.Data, data.Data), 10);
            AssertHelpers.AlmostEqual(StreamingStatistics.PopulationVariance(data.Data), StreamingStatistics.PopulationCovariance(data.Data, data.Data), 10);
        }
Exemple #11
0
        public void StandardDeviationConsistentWithNistData(string dataSet, int digits)
        {
            var data = _data[dataSet];

            AssertHelpers.AlmostEqual(data.StandardDeviation, Statistics.StandardDeviation(data.Data), digits);
            AssertHelpers.AlmostEqual(data.StandardDeviation, ArrayStatistics.StandardDeviation(data.Data), digits);
            AssertHelpers.AlmostEqual(data.StandardDeviation, StreamingStatistics.StandardDeviation(data.Data), digits);
        }
Exemple #12
0
        public void CovarianceConsistentWithVariance(string dataSet)
        {
            var data = _data[dataSet];

            AssertHelpers.AlmostEqualRelative(Statistics.Variance(data.Data), Statistics.Covariance(data.Data, data.Data), 10);
            AssertHelpers.AlmostEqualRelative(ArrayStatistics.Variance(data.Data), ArrayStatistics.Covariance(data.Data, data.Data), 10);
            AssertHelpers.AlmostEqualRelative(StreamingStatistics.Variance(data.Data), StreamingStatistics.Covariance(data.Data, data.Data), 10);
        }
        private static double[] AutoCorrelationFft(double[] x, int kLow, int kHigh)
        {
            if (x == null)
            {
                throw new ArgumentNullException(nameof(x));
            }

            int N = x.Length;    // Sample size

            if (kLow < 0 || kLow >= N)
            {
                throw new ArgumentOutOfRangeException(nameof(kLow), "kMin must be zero or positive and smaller than x.Length");
            }
            if (kHigh < 0 || kHigh >= N)
            {
                throw new ArgumentOutOfRangeException(nameof(kHigh), "kMax must be positive and smaller than x.Length");
            }
            if (N < 1)
            {
                return(new double[0]);
            }

            int nFFT = Euclid.CeilingToPowerOfTwo(N) * 2;

            Complex[] xFFT  = new Complex[nFFT];
            Complex[] xFFT2 = new Complex[nFFT];

            double xDash   = ArrayStatistics.Mean(x);
            double xArrNow = 0.0d;

            // copy values in range and substract mean - all the remaining parts are padded with zero.
            for (int i = 0; i < x.Length; i++)
            {
                xFFT[i] = new Complex(x[i] - xDash, 0.0);    // copy values in range and substract mean
            }

            Fourier.Forward(xFFT, FourierOptions.Matlab);

            // maybe a Vector<Complex> implementation here would be faster
            for (int i = 0; i < xFFT.Length; i++)
            {
                xFFT2[i] = Complex.Multiply(xFFT[i], Complex.Conjugate(xFFT[i]));
            }

            Fourier.Inverse(xFFT2, FourierOptions.Matlab);

            double dc = xFFT2[0].Real;

            double[] result = new double[kHigh - kLow + 1];

            // normalize such that acf[0] would be 1.0
            for (int i = 0; i < (kHigh - kLow + 1); i++)
            {
                result[i] = xFFT2[kLow + i].Real / dc;
            }

            return(result);
        }
Exemple #14
0
 public void MeanOfEmptyMustBeNaN()
 {
     Assert.That(Statistics.Mean(new double[0]), Is.NaN);
     Assert.That(Statistics.Mean(new[] { 2d }), Is.Not.NaN);
     Assert.That(ArrayStatistics.Mean(new double[0]), Is.NaN);
     Assert.That(ArrayStatistics.Mean(new[] { 2d }), Is.Not.NaN);
     Assert.That(StreamingStatistics.Mean(new double[0]), Is.NaN);
     Assert.That(StreamingStatistics.Mean(new[] { 2d }), Is.Not.NaN);
 }
Exemple #15
0
        /// <summary>
        /// Populate 6 month standard deviation
        /// </summary>
        public static double GetPriceRangeStdDevFor6Months(this HistoricalData data)
        {
            DateTime      last6Months = DateTime.UtcNow.AddMonths(-6).Date;
            int           index       = ((IReadOnlyList <DateTime>)data.Date).FirstAndIndex(item => item >= last6Months).Item1;
            List <double> highPrices  = data.High.Skip(index).ToList();
            List <double> lowPrices   = data.Low.Skip(index).ToList();
            double        rangeStdDev = ArrayStatistics.StandardDeviation(highPrices.Select((item, i) => item - lowPrices[i]).ToArray());

            return(rangeStdDev);
        }
Exemple #16
0
        public void ThrowsOnNullData()
        {
            double[] data = null;

            // ReSharper disable InvokeAsExtensionMethod
            Assert.That(() => Statistics.Minimum(data), Throws.Exception);
            Assert.That(() => Statistics.Maximum(data), Throws.Exception);
            Assert.That(() => Statistics.Mean(data), Throws.Exception);
            Assert.That(() => Statistics.Median(data), Throws.Exception);
            Assert.That(() => Statistics.Quantile(data, 0.3), Throws.Exception);
            Assert.That(() => Statistics.Variance(data), Throws.Exception);
            Assert.That(() => Statistics.StandardDeviation(data), Throws.Exception);
            Assert.That(() => Statistics.PopulationVariance(data), Throws.Exception);
            Assert.That(() => Statistics.PopulationStandardDeviation(data), Throws.Exception);
            Assert.That(() => Statistics.Covariance(data, data), Throws.Exception);
            Assert.That(() => Statistics.PopulationCovariance(data, data), Throws.Exception);
            // ReSharper restore InvokeAsExtensionMethod

            Assert.That(() => SortedArrayStatistics.Minimum(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => SortedArrayStatistics.Minimum(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => SortedArrayStatistics.Maximum(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => SortedArrayStatistics.OrderStatistic(data, 1), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => SortedArrayStatistics.Median(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => SortedArrayStatistics.LowerQuartile(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => SortedArrayStatistics.UpperQuartile(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => SortedArrayStatistics.Percentile(data, 30), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => SortedArrayStatistics.Quantile(data, 0.3), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => SortedArrayStatistics.QuantileCustom(data, 0.3, 0, 0, 1, 0), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => SortedArrayStatistics.QuantileCustom(data, 0.3, QuantileDefinition.Nearest), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => SortedArrayStatistics.InterquartileRange(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => SortedArrayStatistics.FiveNumberSummary(data), Throws.Exception.TypeOf <NullReferenceException>());

            Assert.That(() => ArrayStatistics.Minimum(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => ArrayStatistics.Maximum(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => ArrayStatistics.OrderStatisticInplace(data, 1), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => ArrayStatistics.Mean(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => ArrayStatistics.Variance(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => ArrayStatistics.StandardDeviation(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => ArrayStatistics.PopulationVariance(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => ArrayStatistics.PopulationStandardDeviation(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => ArrayStatistics.Covariance(data, data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => ArrayStatistics.PopulationCovariance(data, data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => ArrayStatistics.MedianInplace(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => ArrayStatistics.QuantileInplace(data, 0.3), Throws.Exception.TypeOf <NullReferenceException>());

            Assert.That(() => StreamingStatistics.Minimum(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => StreamingStatistics.Maximum(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => StreamingStatistics.Mean(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => StreamingStatistics.Variance(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => StreamingStatistics.StandardDeviation(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => StreamingStatistics.PopulationVariance(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => StreamingStatistics.PopulationStandardDeviation(data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => StreamingStatistics.Covariance(data, data), Throws.Exception.TypeOf <NullReferenceException>());
            Assert.That(() => StreamingStatistics.PopulationCovariance(data, data), Throws.Exception.TypeOf <NullReferenceException>());
        }
Exemple #17
0
        private static List <StatResult> NumericStat(List <string> data)
        {
            List <StatResult> results = new List <StatResult>();

            try
            {
                var numData = data.Select(x => double.Parse(x)).ToList();

                double min = ArrayStatistics.Minimum(numData.ToArray());
                double max = ArrayStatistics.Maximum(numData.ToArray());

                results.Add(new StatResult
                {
                    Label  = "Moyenne",
                    Result = ArrayStatistics.Mean(numData.ToArray()).ToString(CultureInfo.InvariantCulture)
                });
                results.Add(new StatResult
                {
                    Label  = "Médiane",
                    Result = ArrayStatistics.MedianInplace(numData.ToArray()).ToString(CultureInfo.InvariantCulture)
                });
                results.Add(new StatResult
                {
                    Label  = "Maximum",
                    Result = max.ToString(CultureInfo.InvariantCulture)
                });
                results.Add(new StatResult
                {
                    Label  = "Minimum",
                    Result = min.ToString(CultureInfo.InvariantCulture)
                });
                results.Add(new StatResult
                {
                    Label  = "Étendue",
                    Result = (max - min).ToString(CultureInfo.InvariantCulture)
                });
                results.Add(new StatResult
                {
                    Label  = "Écart-type",
                    Result = ArrayStatistics.StandardDeviation(numData.ToArray()).ToString(CultureInfo.InvariantCulture)
                });
                results.Add(new StatResult
                {
                    Label  = "Variance",
                    Result = ArrayStatistics.Variance(numData.ToArray()).ToString(CultureInfo.InvariantCulture)
                });
            }
            catch (Exception ex)
            {
                Logger.LogError(ex.Message);
            }

            return(results);
        }
Exemple #18
0
        public void MeanConsistentWithNistData(string dataSet)
        {
            var data = _data[dataSet];

            AssertHelpers.AlmostEqualRelative(data.Mean, Statistics.Mean(data.Data), 14);
            AssertHelpers.AlmostEqualRelative(data.Mean, ArrayStatistics.Mean(data.Data), 14);
            AssertHelpers.AlmostEqualRelative(data.Mean, StreamingStatistics.Mean(data.Data), 14);
            AssertHelpers.AlmostEqualRelative(data.Mean, Statistics.MeanVariance(data.Data).Item1, 14);
            AssertHelpers.AlmostEqualRelative(data.Mean, ArrayStatistics.MeanVariance(data.Data).Item1, 14);
            AssertHelpers.AlmostEqualRelative(data.Mean, StreamingStatistics.MeanVariance(data.Data).Item1, 14);
        }
Exemple #19
0
 public void MaximumOfEmptyMustBeNaN()
 {
     Assert.That(Statistics.Maximum(new double[0]), Is.NaN);
     Assert.That(Statistics.Maximum(new[] { 2d }), Is.Not.NaN);
     Assert.That(ArrayStatistics.Maximum(new double[0]), Is.NaN);
     Assert.That(ArrayStatistics.Maximum(new[] { 2d }), Is.Not.NaN);
     Assert.That(SortedArrayStatistics.Maximum(new double[0]), Is.NaN);
     Assert.That(SortedArrayStatistics.Maximum(new[] { 2d }), Is.Not.NaN);
     Assert.That(StreamingStatistics.Maximum(new double[0]), Is.NaN);
     Assert.That(StreamingStatistics.Maximum(new[] { 2d }), Is.Not.NaN);
 }
Exemple #20
0
        public void StandardDeviationConsistentWithNistData(string dataSet, int digits)
        {
            var data = _data[dataSet];

            AssertHelpers.AlmostEqualRelative(data.StandardDeviation, Statistics.StandardDeviation(data.Data), digits);
            AssertHelpers.AlmostEqualRelative(data.StandardDeviation, ArrayStatistics.StandardDeviation(data.Data), digits);
            AssertHelpers.AlmostEqualRelative(data.StandardDeviation, StreamingStatistics.StandardDeviation(data.Data), digits);
            AssertHelpers.AlmostEqualRelative(data.StandardDeviation, Math.Sqrt(Statistics.MeanVariance(data.Data).Item2), digits);
            AssertHelpers.AlmostEqualRelative(data.StandardDeviation, Math.Sqrt(ArrayStatistics.MeanVariance(data.Data).Item2), digits);
            AssertHelpers.AlmostEqualRelative(data.StandardDeviation, Math.Sqrt(StreamingStatistics.MeanVariance(data.Data).Item2), digits);
        }
Exemple #21
0
        public void ArrayStatisticsConsistentWithStreamimgStatistics(string dataSet)
        {
            var data = _data[dataSet];

            AssertHelpers.AlmostEqual(ArrayStatistics.Mean(data.Data), StreamingStatistics.Mean(data.Data), 10);
            AssertHelpers.AlmostEqual(ArrayStatistics.Variance(data.Data), StreamingStatistics.Variance(data.Data), 10);
            AssertHelpers.AlmostEqual(ArrayStatistics.StandardDeviation(data.Data), StreamingStatistics.StandardDeviation(data.Data), 10);
            AssertHelpers.AlmostEqual(ArrayStatistics.PopulationVariance(data.Data), StreamingStatistics.PopulationVariance(data.Data), 10);
            AssertHelpers.AlmostEqual(ArrayStatistics.PopulationStandardDeviation(data.Data), StreamingStatistics.PopulationStandardDeviation(data.Data), 10);
            AssertHelpers.AlmostEqual(ArrayStatistics.Covariance(data.Data, data.Data), StreamingStatistics.Covariance(data.Data, data.Data), 10);
            AssertHelpers.AlmostEqual(ArrayStatistics.PopulationCovariance(data.Data, data.Data), StreamingStatistics.PopulationCovariance(data.Data, data.Data), 10);
        }
Exemple #22
0
        static double[] Rank(IEnumerable <double> series)
        {
            if (series == null)
            {
                return(new double[0]);
            }
            // WARNING: do not try to cast series to an array and use it directly,
            // as we need to sort it (inplace operation)
            var data = series.ToArray();

            return(ArrayStatistics.RanksInplace(data, RankDefinition.Average));
        }
Exemple #23
0
 public void SampleVarianceOfEmptyAndSingleMustBeNaN()
 {
     Assert.That(Statistics.Variance(new double[0]), Is.NaN);
     Assert.That(Statistics.Variance(new[] { 2d }), Is.NaN);
     Assert.That(Statistics.Variance(new[] { 2d, 3d }), Is.Not.NaN);
     Assert.That(ArrayStatistics.Variance(new double[0]), Is.NaN);
     Assert.That(ArrayStatistics.Variance(new[] { 2d }), Is.NaN);
     Assert.That(ArrayStatistics.Variance(new[] { 2d, 3d }), Is.Not.NaN);
     Assert.That(StreamingStatistics.Variance(new double[0]), Is.NaN);
     Assert.That(StreamingStatistics.Variance(new[] { 2d }), Is.NaN);
     Assert.That(StreamingStatistics.Variance(new[] { 2d, 3d }), Is.Not.NaN);
 }
Exemple #24
0
 public void PopulationVarianceOfEmptyMustBeNaN()
 {
     Assert.That(Statistics.PopulationVariance(new double[0]), Is.NaN);
     Assert.That(Statistics.PopulationVariance(new[] { 2d }), Is.Not.NaN);
     Assert.That(Statistics.PopulationVariance(new[] { 2d, 3d }), Is.Not.NaN);
     Assert.That(ArrayStatistics.PopulationVariance(new double[0]), Is.NaN);
     Assert.That(ArrayStatistics.PopulationVariance(new[] { 2d }), Is.Not.NaN);
     Assert.That(ArrayStatistics.PopulationVariance(new[] { 2d, 3d }), Is.Not.NaN);
     Assert.That(StreamingStatistics.PopulationVariance(new double[0]), Is.NaN);
     Assert.That(StreamingStatistics.PopulationVariance(new[] { 2d }), Is.Not.NaN);
     Assert.That(StreamingStatistics.PopulationVariance(new[] { 2d, 3d }), Is.Not.NaN);
 }
Exemple #25
0
        public void ThrowsOnNullData()
        {
            double[] data = null;

            Assert.Throws <ArgumentNullException>(() => Statistics.Minimum(data));
            Assert.Throws <ArgumentNullException>(() => Statistics.Maximum(data));
            Assert.Throws <ArgumentNullException>(() => Statistics.Mean(data));
            Assert.Throws <ArgumentNullException>(() => Statistics.Median(data));
            Assert.Throws <ArgumentNullException>(() => Statistics.Quantile(data, 0.3));
            Assert.Throws <ArgumentNullException>(() => Statistics.Variance(data));
            Assert.Throws <ArgumentNullException>(() => Statistics.StandardDeviation(data));
            Assert.Throws <ArgumentNullException>(() => Statistics.PopulationVariance(data));
            Assert.Throws <ArgumentNullException>(() => Statistics.PopulationStandardDeviation(data));
            Assert.Throws <ArgumentNullException>(() => Statistics.Covariance(data, data));
            Assert.Throws <ArgumentNullException>(() => Statistics.PopulationCovariance(data, data));

            Assert.Throws <ArgumentNullException>(() => SortedArrayStatistics.Minimum(data));
            Assert.Throws <ArgumentNullException>(() => SortedArrayStatistics.Maximum(data));
            Assert.Throws <ArgumentNullException>(() => SortedArrayStatistics.OrderStatistic(data, 1));
            Assert.Throws <ArgumentNullException>(() => SortedArrayStatistics.Median(data));
            Assert.Throws <ArgumentNullException>(() => SortedArrayStatistics.LowerQuartile(data));
            Assert.Throws <ArgumentNullException>(() => SortedArrayStatistics.UpperQuartile(data));
            Assert.Throws <ArgumentNullException>(() => SortedArrayStatistics.Percentile(data, 30));
            Assert.Throws <ArgumentNullException>(() => SortedArrayStatistics.Quantile(data, 0.3));
            Assert.Throws <ArgumentNullException>(() => SortedArrayStatistics.QuantileCustom(data, 0.3, 0, 0, 1, 0));
            Assert.Throws <ArgumentNullException>(() => SortedArrayStatistics.QuantileCustom(data, 0.3, QuantileDefinition.Nearest));
            Assert.Throws <ArgumentNullException>(() => SortedArrayStatistics.InterquartileRange(data));
            Assert.Throws <ArgumentNullException>(() => SortedArrayStatistics.FiveNumberSummary(data));

            Assert.Throws <ArgumentNullException>(() => ArrayStatistics.Minimum(data));
            Assert.Throws <ArgumentNullException>(() => ArrayStatistics.Maximum(data));
            Assert.Throws <ArgumentNullException>(() => ArrayStatistics.OrderStatisticInplace(data, 1));
            Assert.Throws <ArgumentNullException>(() => ArrayStatistics.Mean(data));
            Assert.Throws <ArgumentNullException>(() => ArrayStatistics.Variance(data));
            Assert.Throws <ArgumentNullException>(() => ArrayStatistics.StandardDeviation(data));
            Assert.Throws <ArgumentNullException>(() => ArrayStatistics.PopulationVariance(data));
            Assert.Throws <ArgumentNullException>(() => ArrayStatistics.PopulationStandardDeviation(data));
            Assert.Throws <ArgumentNullException>(() => ArrayStatistics.Covariance(data, data));
            Assert.Throws <ArgumentNullException>(() => ArrayStatistics.PopulationCovariance(data, data));
            Assert.Throws <ArgumentNullException>(() => ArrayStatistics.MedianInplace(data));
            Assert.Throws <ArgumentNullException>(() => ArrayStatistics.QuantileInplace(data, 0.3));

            Assert.Throws <ArgumentNullException>(() => StreamingStatistics.Minimum(data));
            Assert.Throws <ArgumentNullException>(() => StreamingStatistics.Maximum(data));
            Assert.Throws <ArgumentNullException>(() => StreamingStatistics.Mean(data));
            Assert.Throws <ArgumentNullException>(() => StreamingStatistics.Variance(data));
            Assert.Throws <ArgumentNullException>(() => StreamingStatistics.StandardDeviation(data));
            Assert.Throws <ArgumentNullException>(() => StreamingStatistics.PopulationVariance(data));
            Assert.Throws <ArgumentNullException>(() => StreamingStatistics.PopulationStandardDeviation(data));
            Assert.Throws <ArgumentNullException>(() => StreamingStatistics.Covariance(data, data));
            Assert.Throws <ArgumentNullException>(() => StreamingStatistics.PopulationCovariance(data, data));
        }
Exemple #26
0
        public void CovarianceIsSymmetric()
        {
            var dataA = _data["lottery"].Data.Take(200);
            var dataB = _data["lew"].Data.Take(200);

            AssertHelpers.AlmostEqual(Statistics.Covariance(dataA, dataB), Statistics.Covariance(dataB, dataA), 12);
            AssertHelpers.AlmostEqual(StreamingStatistics.Covariance(dataA, dataB), StreamingStatistics.Covariance(dataB, dataA), 12);
            AssertHelpers.AlmostEqual(ArrayStatistics.Covariance(dataA.ToArray(), dataB.ToArray()), ArrayStatistics.Covariance(dataB.ToArray(), dataA.ToArray()), 12);

            AssertHelpers.AlmostEqual(Statistics.PopulationCovariance(dataA, dataB), Statistics.PopulationCovariance(dataB, dataA), 12);
            AssertHelpers.AlmostEqual(StreamingStatistics.PopulationCovariance(dataA, dataB), StreamingStatistics.PopulationCovariance(dataB, dataA), 12);
            AssertHelpers.AlmostEqual(ArrayStatistics.PopulationCovariance(dataA.ToArray(), dataB.ToArray()), ArrayStatistics.PopulationCovariance(dataB.ToArray(), dataA.ToArray()), 12);
        }
Exemple #27
0
        public void Median_CodeplexIssue5667()
        {
            var seq = File.ReadLines("./data/Codeplex-5667.csv").Select(double.Parse);

            Assert.AreEqual(1.0, Statistics.Median(seq));

            var array = seq.ToArray();

            Assert.AreEqual(1.0, ArrayStatistics.MedianInplace(array));

            Array.Sort(array);
            Assert.AreEqual(1.0, SortedArrayStatistics.Median(array));
        }
        private void Initialization()
        {
            //Calculate initialstate and initialstatecovariance
            var M = Matrix <double> .Build;

            initialstate           = M.Dense(4, 1);
            initialstatecovariance = M.DenseDiagonal(4, 4, 0.00);
            var tempyields = new double[maturities.Length];
            var StaticNS4factorCalibration = new StaticNS4FactorModelCalibration();

            StaticNS4factorCalibration.maturities = maturities;
            var tempbeta1 = new double[30];
            var tempbeta2 = new double[30];
            var tempbeta3 = new double[30];
            var tempbeta4 = new double[30];

            Parallel.For(0, 30, i =>
            {
                tempyields = yields[yields.ElementAt(i).Key].Clone() as double[];
                StaticNS4factorCalibration.yields = tempyields;
                var temppara = StaticNS4factorCalibration.Calibration();
                tempbeta1[i] = temppara[0];
                tempbeta2[i] = temppara[1];
                tempbeta3[i] = temppara[2];
                tempbeta4[i] = temppara[3];
            });
            initialstate[0, 0] = ArrayStatistics.Mean(tempbeta1);
            initialstate[1, 0] = ArrayStatistics.Mean(tempbeta2);
            initialstate[2, 0] = ArrayStatistics.Mean(tempbeta3);
            initialstate[3, 0] = ArrayStatistics.Mean(tempbeta4);

            initialstatecovariance[0, 0] = ArrayStatistics.Covariance(tempbeta1, tempbeta1);
            initialstatecovariance[0, 1] = ArrayStatistics.Covariance(tempbeta1, tempbeta2);
            initialstatecovariance[0, 2] = ArrayStatistics.Covariance(tempbeta1, tempbeta3);
            initialstatecovariance[0, 3] = ArrayStatistics.Covariance(tempbeta1, tempbeta4);

            initialstatecovariance[1, 0] = ArrayStatistics.Covariance(tempbeta2, tempbeta1);
            initialstatecovariance[1, 1] = ArrayStatistics.Covariance(tempbeta2, tempbeta2);
            initialstatecovariance[1, 2] = ArrayStatistics.Covariance(tempbeta2, tempbeta3);
            initialstatecovariance[1, 3] = ArrayStatistics.Covariance(tempbeta2, tempbeta4);

            initialstatecovariance[2, 0] = ArrayStatistics.Covariance(tempbeta3, tempbeta1);
            initialstatecovariance[2, 1] = ArrayStatistics.Covariance(tempbeta3, tempbeta2);
            initialstatecovariance[2, 2] = ArrayStatistics.Covariance(tempbeta3, tempbeta3);
            initialstatecovariance[2, 3] = ArrayStatistics.Covariance(tempbeta3, tempbeta4);

            initialstatecovariance[3, 0] = ArrayStatistics.Covariance(tempbeta4, tempbeta1);
            initialstatecovariance[3, 1] = ArrayStatistics.Covariance(tempbeta4, tempbeta2);
            initialstatecovariance[3, 2] = ArrayStatistics.Covariance(tempbeta4, tempbeta3);
            initialstatecovariance[3, 3] = ArrayStatistics.Covariance(tempbeta4, tempbeta4);
        }
Exemple #29
0
        public void MinimumMaximumOnShortSequence()
        {
            var samples = new[] { -1.0, 5, 0, -3, 10, -0.5, 4 };

            Assert.That(Statistics.Minimum(samples), Is.EqualTo(-3), "Min");
            Assert.That(Statistics.Maximum(samples), Is.EqualTo(10), "Max");
            Assert.That(ArrayStatistics.Minimum(samples), Is.EqualTo(-3), "Min");
            Assert.That(ArrayStatistics.Maximum(samples), Is.EqualTo(10), "Max");
            Assert.That(StreamingStatistics.Minimum(samples), Is.EqualTo(-3), "Min");
            Assert.That(StreamingStatistics.Maximum(samples), Is.EqualTo(10), "Max");

            Array.Sort(samples);
            Assert.That(SortedArrayStatistics.Minimum(samples), Is.EqualTo(-3), "Min");
            Assert.That(SortedArrayStatistics.Maximum(samples), Is.EqualTo(10), "Max");
        }
Exemple #30
0
        public void QuantileR2InverseCDFAverageOnShortSequence(double tau, double expected)
        {
            // R: quantile(c(-1,5,0,-3,10,-0.5,4,0.2,1,6),probs=c(0,1,0.5,0.2,0.7,0.01,0.99,0.52,0.325),type=2)
            // Mathematica: Not Supported

            var samples = new[] { -1, 5, 0, -3, 10, -0.5, 4, 0.2, 1, 6 };

            Assert.AreEqual(expected, Statistics.QuantileCustom(samples, tau, QuantileDefinition.R2), 1e-14);
            Assert.AreEqual(expected, Statistics.QuantileCustomFunc(samples, QuantileDefinition.R2)(tau), 1e-14);

            Assert.AreEqual(expected, ArrayStatistics.QuantileCustomInplace(samples, tau, QuantileDefinition.InverseCDFAverage), 1e-14);

            Array.Sort(samples);
            Assert.AreEqual(expected, SortedArrayStatistics.QuantileCustom(samples, tau, QuantileDefinition.InverseCDFAverage), 1e-14);
        }