Data Analysis Mathematics Linear Algebra Statistics
New Version 8.1!

Supports .NET 6.0. Try it for free with our fully functional 60-day trial version. QuickStart Samples

# Continuous Distributions QuickStart Sample (Visual Basic)

Illustrates how to use the classes that represent continuous probability distributions in the Extreme.Statistics.Distributions namespace in Visual Basic.

```Option Infer On

Imports Extreme.DataAnalysis
Imports Extreme.Mathematics.Random
Imports Extreme.Statistics
Imports Extreme.Statistics.Distributions

Namespace Extreme.Numerics.QuickStart.VB
' Demonstrates how to use classes that implement
' continuous probabililty distributions.
Module ContinuousDistributions

Sub Main()
' 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.
Dim weibull As New WeibullDistribution(3, 2, 3)

'
' Basic statistics
'

' The Mean property returns the mean of the distribution:
Console.WriteLine("Mean:                 {0:F5}", weibull.Mean)

' The Variance and StandardDeviation are also available:
Console.WriteLine("Variance:             {0:F5}", weibull.Variance)
Console.WriteLine("Standard deviation:   {0:F5}", weibull.StandardDeviation)
' The inter-quartile range is another measure of scale:
Console.WriteLine("Inter-quartile range: {0:F5}", weibull.InterQuartileRange)

' As are the skewness:
Console.WriteLine("Skewness:             {0:F5}", weibull.Skewness)

' The Kurtosis property returns the kurtosis supplement.
' The Kurtosis property for the normal distribution returns zero.
Console.WriteLine("Kurtosis:             {0:F5}", weibull.Kurtosis)
Console.WriteLine()

'
' Distribution functions
'

' The (cumulative) distribution function (CDF) is implemented by the
' DistributionFunction method:
Console.WriteLine("CDF(4.5) =            {0:F5}", weibull.DistributionFunction(4.5))

' Its complement is the survivor function:
Console.WriteLine("SDF(4.5) =            {0:F5}", weibull.SurvivorDistributionFunction(4.5))

' While its inverse is given by the InverseDistributionFunction method:
Console.WriteLine("Inverse CDF(0.4) =    {0:F5}", weibull.InverseDistributionFunction(0.4))

' The probability density function (PDF) is also available:
Console.WriteLine("PDF(4.5) =            {0:F5}", weibull.ProbabilityDensityFunction(4.5))

' The Probability method returns the probability that a variate lies between two values:
Console.WriteLine("Probability(4.5, 5.5) = {0:F5}", weibull.Probability(4.5, 5.5))
Console.WriteLine()

'
' Random variates
'

' The Sample method returns a single random variate
' using the specified random number generator:
Dim rng As New MersenneTwister
Dim x As Double = weibull.Sample(rng)
' The Sample method fills an array or vector with
' random variates. It has several overloads:
Dim xArray As Double() = New Double(100) {}
' 1. Fill all values:
weibull.SampleInto(rng, xArray)
' 2. Fill only a range (start index and length are supplied)
weibull.SampleInto(rng, xArray, 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:
Dim h = weibull.GetExpectedHistogram(3.0, 10.0, 5, 100)
Dim bins = CType(h.Index, IntervalIndex(Of Double))
Console.WriteLine("Expected distribution of 100 samples:")
For i = 0 To h.Length - 1
Console.WriteLine("Between {0} and {1} -> {2}",
bins(i).LowerBound, bins(i).UpperBound, h(i))
Next
Console.WriteLine()

' or by supplying an array of boundaries:
h = weibull.GetExpectedHistogram(New Double() {3.0, 5.2, 7.4, 9.6, 11.8}, 100)
bins = CType(h.Index, IntervalIndex(Of Double))
Console.WriteLine("Expected distribution of 100 samples:")
For i = 0 To h.Length - 1
Console.WriteLine("Between {0} and {1} -> {2}",
bins(i).LowerBound, bins(i).UpperBound, h(i))
Next

Console.WriteLine("Press Enter key to continue.")