Continuous Distributions in IronPython QuickStart Sample
Illustrates how to use the classes that represent continuous probability distributions in the Numerics.NET.Statistics.Distributions namespace in IronPython.
View this sample in: C# Visual Basic F#
```Python import numerics from System import Array from Extreme.Mathematics import * from Extreme.Statistics import * from Extreme.Statistics.Distributions import * # Demonstrates how to use classes that implement # continuous probabililty distributions. # This QuickStart Sample demonstrates the capabilities of # the classes that implement continuous probability distributions. # These classes inherit from the ContinuousDistribution class. # # For an illustration of classes that implement discrete probability # distributions, see the DiscreteDistributions QuickStart Sample. # # We illustrate the properties and methods of continuous distribution # using a Weibull distribution. The same properties and methods # apply to all other continuous distributions. # # Constructing distributions # # Most distributions have one or more parameters with different definitions. # # The location parameter is always related to the mean of the distribution. # When omitted, its default value is zero. # # The scale parameter is always directly related to the standard deviation. # A larger scale parameter means that the distribution is wider. # When omitted, its default value is one. # The Weibull distribution has three constructors. The most complete # constructor takes a location, scale, and shape parameter. weibull = WeibullDistribution(3, 2, 3) # # Basic statistics # # The Mean property returns the mean of the distribution: print "Mean: {0:.5f}".format(weibull.Mean) # The Variance and StandardDeviation are also available: print "Variance: {0:.5f}".format(weibull.Variance) print "Standard deviation: {0:.5f}".format(weibull.StandardDeviation) # The inter-quartile range is another measure of scale: print "Inter-quartile range: {0:.5f}".format(weibull.InterQuartileRange) # As are the skewness: print "Skewness: {0:.5f}".format(weibull.Skewness) # The Kurtosis property returns the kurtosis supplement. # The Kurtosis property for the normal distribution returns zero. print "Kurtosis: {0:.5f}".format(weibull.Kurtosis) print # # Distribution functions # # The (cumulative) distribution function (CDF) is implemented by the # DistributionFunction method: print "CDF(4.5) = {0:.5f}".format(weibull.DistributionFunction(4.5)) # Its complement is the survivor function: print "SDF(4.5) = {0:.5f}".format(weibull.SurvivorDistributionFunction(4.5)) # While its inverse is given by the InverseDistributionFunction method: print "Inverse CDF(0.4) = {0:.5f}".format(weibull.InverseDistributionFunction(0.4)) # The probability density function (PDF) is also available: print "PDF(4.5) = {0:.5f}".format(weibull.ProbabilityDensityFunction(4.5)) # The Probability method returns the probability that a variate lies between two values: print "Probability(4.5, 5.5) = {0:.5f}".format(weibull.Probability(4.5, 5.5)) print # # Random variates # # The Sample method returns a single random variate # using the specified random number generator: rng = Random.MersenneTwister() x = weibull.Sample(rng) # The Sample method fills an array or vector with # random variates. It has several overloads: xVector = Vector.Create(100) # 1. Fill all values: weibull.Sample(rng, xVector) # 2. Fill only a range (start index and length are supplied) weibull.Sample(rng, xVector, 20, 50) # The same two options are available with a DenseVector # instead of a double array. # The GetExpectedHistogram method returns a Histogram that contains the # expected number of samples in each bin, given the total number of samples. # The bins are specified by lower and upper bounds and number of bins: h = weibull.GetExpectedHistogram(3.0, 10.0, 5, 100) print "Expected distribution of 100 samples:" for bin in h.Bins: print "Between {0} and {1} -> {2}".format(bin.LowerBound, bin.UpperBound, bin.Value) print # or by supplying an array of boundaries: h = weibull.GetExpectedHistogram(Array[float]([ 3.0, 5.2, 7.4, 9.6, 11.8 ]), 100) print "Expected distribution of 100 samples:" for bin in h.Bins: print "Between {0} and {1} -> {2}".format(bin.LowerBound, bin.UpperBound, bin.Value) ```