Exemple #1
0
        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);
        }
Exemple #3
0
            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);
            }