public static Tuple <int[], int[]> RandomSamplingUsingProbabilityDistribution(int distributionlength, int sampleCount, int seed) { double[] distribution = CreateInverseProbabilityDistribution(distributionlength); //double[] distribution = Statistics.CreateQuadraticProbabilityDistribution(distributionlength); // double sum = distribution.Sum(); // Console.WriteLine("post-sum = {0:f3}", sum); distribution = DataTools.ConvertProbabilityDistribution2CummulativeProbabilites(distribution); // sum = distribution.Sum(); // Console.WriteLine("cumm-sum = {0:f3}", sum); // Console.WriteLine("cumm-sum = {0:f3}", distribution[length-1]); // double refValue = 0.65; // int lowerIndex = 0; // int upperIndex = 99; // int location = DataTools.WhichSideOfCentre(distribution, refValue, lowerIndex, upperIndex); // Console.WriteLine("location = " + location); int[] samples = DataTools.SampleArrayRandomlyWithoutReplacementUsingProbabilityDistribution(distribution, sampleCount, seed); //for (int i = 0; i < sampleCount; i++) Console.WriteLine("s"+i+ " " + samples[i]); Tuple <int[], int[]> tuple = DataTools.SortArray(samples); int[] sortedSamples = tuple.Item2; return(Tuple.Create(samples, sortedSamples)); }
public static int GetNthPercentileBin(int[] distribution, int percentile) { int length = distribution.Length; double threshold = percentile / 100D; double[] probs = DataTools.NormaliseArea(distribution); double[] cumProb = DataTools.ConvertProbabilityDistribution2CummulativeProbabilites(probs); int percentileBin = 0; for (int i = 0; i < length; i++) { if (cumProb[i] >= threshold) { percentileBin = i; break; } } return(percentileBin); }
public double GetValueOfNthPercentile(int percentile) { int length = this.Distribution.Length; double threshold = percentile / 100D; double[] probs = DataTools.NormaliseArea(this.Distribution); double[] cumProb = DataTools.ConvertProbabilityDistribution2CummulativeProbabilites(probs); int percentileBin = 0; for (int i = 0; i < length - 1; i++) { if (cumProb[i] >= threshold) { percentileBin = i; break; } } this.UpperPercentileBin = percentileBin; double binWidth = (this.Maximum - this.Minimum) / length; double value = this.Minimum + (binWidth * percentileBin); return(value); }