/// <summary>
        /// See <see cref="IDistribution.CreateDistribution(List{double})"/>.
        /// </summary>
        public Dictionary <double, double> CreateDistribution(List <double> allBuckets)
        {
            Dictionary <double, double> result = new Dictionary <double, double>();

            double previousResultCache = 0;

            for (int i = 0; i < allBuckets.Count; i++)
            {
                double currentResult = 1 - Math.Pow(1 - PROBABILITY, i + 1);
                result[allBuckets[i]] = currentResult - previousResultCache;
                previousResultCache   = currentResult;
            }

            return(DistributionUtils.AdjustToOne(result));
        }
示例#2
0
        /// <summary>
        /// Creates the distribution by using the given mean and deviation value.
        /// </summary>
        /// <param name="allBuckets">All buckets.</param>
        /// <param name="mean">The mean for the normal distribution.</param>
        /// <param name="deviation">The standard deviation for the normal distribution.</param>
        public virtual Dictionary <double, double> CreateDistribution(List <double> allBuckets, double mean, double deviation)
        {
            Dictionary <double, double> result = new Dictionary <double, double>();

            double previousResultCache = 0;

            for (int i = 0; i < allBuckets.Count; i++)
            {
                double currentResult = Normal.CDF(mean, deviation, allBuckets[i]);
                result[allBuckets[i]] = currentResult - previousResultCache;
                previousResultCache   = currentResult;
            }

            return(DistributionUtils.AdjustToOne(result));
        }
        /// <summary>
        /// See <see cref="IDistribution.CreateDistribution(List{double})"/>.
        /// </summary>
        public Dictionary <double, double> CreateDistribution(List <double> allBuckets)
        {
            GeometricDistribution       geometricDistribution = new GeometricDistribution();
            Dictionary <double, double> original = geometricDistribution.CreateDistribution(allBuckets);
            Dictionary <double, double> result   = new Dictionary <double, double>();

            for (int i = 0; i < allBuckets.Count; i++)
            {
                double index        = allBuckets[i];
                double inverseIndex = allBuckets[allBuckets.Count - 1 - i];
                result[index] = original[index] + original[inverseIndex];
            }

            return(DistributionUtils.AdjustToOne(result));
        }
示例#4
0
        /// <summary>
        /// See <see cref="Distribution.CreateDistribution(List{double})"/>.
        /// </summary>
        public Dictionary <double, double> CreateDistribution(List <double> allBuckets)
        {
            Dictionary <double, double> result = new Dictionary <double, double>();

            int numberOfBuckets = allBuckets.Count - 1;


            for (int k = 0; k <= numberOfBuckets; k++)
            {
                double firstPart   = (Factorial(numberOfBuckets) / (Factorial(k) * Factorial(numberOfBuckets - k)));
                double secondPart  = Math.Pow(PROBABILITY, k) * Math.Pow((1 - PROBABILITY), (numberOfBuckets - k));
                double probability = firstPart * secondPart;

                result[allBuckets[k]] = probability;
            }

            // Adjust it to be 1.0 in the sum
            result = DistributionUtils.AdjustToOne(result);

            return(result);
        }