internal void CheckGetQuantile(CanGetQuantile canGetQuantile, CanGetProbLessThan canGetProbLessThan, int minPercent = 0, int maxPercent = 100) { for (int i = minPercent; i < maxPercent; i++) { // probability = 1.0 is excluded double probability = i / 100.0; double x = canGetQuantile.GetQuantile(probability); double probLessThanX = canGetProbLessThan.GetProbLessThan(x); Assert.True(probLessThanX <= probability); double next = MMath.NextDouble(x); double probLessThanNext = canGetProbLessThan.GetProbLessThan(next); Assert.True(probLessThanNext > probability); } }
private void CheckProbLessThan(CanGetProbLessThan canGetProbLessThan, List <double> x, double maximumError) { x.Sort(); var sortedData = new OuterQuantiles(x.ToArray()); // check that quantiles match within the desired accuracy var min = MMath.Min(x); var max = MMath.Max(x); var range = max - min; var margin = range * 0.01; var testPoints = EpTests.linspace(min - margin, max + margin, 100); double maxError = 0; foreach (var testPoint in testPoints) { var trueRank = sortedData.GetProbLessThan(testPoint); var estRank = canGetProbLessThan.GetProbLessThan(testPoint); var error = System.Math.Abs(trueRank - estRank); maxError = System.Math.Max(maxError, error); } Console.WriteLine($"max rank error = {maxError}"); Assert.True(maxError <= maximumError); }
public static double ProbLessThan <T>(CanGetProbLessThan <T> canGetProbLessThan, T upperBound) { return(canGetProbLessThan.GetProbLessThan(upperBound)); }
/// <include file='FactorDocs.xml' path='factor_docs/message_op_class[@name="RatioGaussianOp"]/message_doc[@name="ProbabilityAverageConditional(Gaussian, CanGetQuantile{double}, Gaussian)"]/*'/> public static Gaussian ProbabilityAverageConditional(double quantile, CanGetQuantile <double> canGetQuantile) { CanGetProbLessThan <double> canGetProbLessThan = (CanGetProbLessThan <double>)canGetQuantile; return(Gaussian.PointMass(canGetProbLessThan.GetProbLessThan(quantile))); }