Quantcast
Channel: Math.NET Numerics
Viewing all articles
Browse latest Browse all 971

New Post: Percentile obsolete, how to use quantile?

$
0
0
Below is the sample code and results using both percentile and quantile. One question: is there a preferred collection, other than List<double>, in which I should be accumulating values from the Monte Carlo simulation to pass to the statistics?

Dick
Code

           // grab 10000 normal variables
          var normalDist = new Normal(10.0, 20.0);
          List<double> sampleValues = new List<double>();
          // simulate Monte Carlo by adding one variable at a time
          for (int i = 0; i < 10000; i++)
               sampleValues.Add(normalDist.Sample());

          sampleValues.Sort();

          
          var statistics = new DescriptiveStatistics(sampleValues);
          Console.WriteLine(@"Descriptive Statistics Mean {0}", statistics.Mean);
          var percentile = new Percentile(sampleValues);
          var percentile25 = percentile.Compute(0.25);
          Console.WriteLine(@"25th Percentile via Percentile {0}", percentile25);
          IEnumerable<double> tester = new[] { 0.0, .25, .5, .75, 1.0 };
          var percentiles = percentile.Compute(tester); //new[] { 0.0, .25, .5, .75, 1.0 });
          Console.WriteLine("Using percentile:");
          foreach (var item in tester.Zip(percentiles, (a1, b1) => new { a1, b1 }))
            {
                Console.WriteLine("Tau {0:0.00} \t\t Result {1,15:#0.00000000000}", item.a1, item.b1);

            }
          Console.WriteLine("Using quantiles:");
          double test1 = SortedArrayStatistics.Quantile(sampleValues.ToArray(), .25); // R8-quantile
          Console.WriteLine(@"SortedArrayStatistics.Quantile(sampleValues.ToArray(), .25) {0}", test1);

          double test2 = SortedArrayStatistics.QuantileCustom(sampleValues.ToArray(), .25, QuantileDefinition.Nist); // R6/Nist-quantile
          Console.WriteLine(@"sampleValues.ToArray(), .25, QuantileDefinition.Nist  {0}", test2);
         
          var quantile = Statistics.QuantileFunc(sampleValues); // can be an unsorted IEnumerable
          double test4=quantile(0.25); // evaluate for a single tau
          Console.WriteLine(@"quantile=Statistics.QuantileFunc(sampleValues)  quantile(0.25) {0}", test4);
          IEnumerable<double> results; 
           
          results=tester.Select(quantile);
          foreach (var item in tester.Zip(results, (a, b) => new { a, b }))
            {
                 Console.WriteLine("Tau {0:0.00} \t\t Result {1,15:#0.00000000000}",item.a,item.b);
         
            }
     


Results
Descriptive Statistics Mean 9.73486414629633
25th Percentile via Percentile -3.78866441056619
Using percentile:
Tau 0.00         Result -70.39610167743
Tau 0.25         Result  -3.78866441057
Tau 0.50         Result   9.80521165941
Tau 0.75         Result  23.49979823217
Tau 1.00         Result  75.69263872325
Using quantiles:
SortedArrayStatistics.Quantile(sampleValues.ToArray(), .25) -3.78843245134223
sampleValues.ToArray(), .25, QuantileDefinition.Nist  -3.78866441056619
quantile=Statistics.QuantileFunc(sampleValues)  quantile(0.25) -3.78843245134223
Tau 0.00         Result -70.39610167743
Tau 0.25         Result  -3.78843245134
Tau 0.50         Result   9.80521165941
Tau 0.75         Result  23.49827683832
Tau 1.00         Result  75.69263872325





Viewing all articles
Browse latest Browse all 971

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>