Probability Distributions

Binder Notebook

Summary: this tutorial shows how to use the various types of probability distributions in FSharp.Stats.

Table of contents

FSharp.Stats provides a wide range of probability distributions. Given the distribution parameters they can be used to investigate their statistical properties or to sample non-uniform random numbers.

For every distribution the probability density function (PDF) and cumulative probability function (CDF) can be accessed. By using the PDF you can access the probability for exactly X=k success states. The CDF is used when the cumulative probabilities of X<=k is required.

Continuous

Normal distribution

The normal or Gaussian distribution is a very common continuous probability distribution. Due to the central limit theorem, randomly sampled means of a random and independent distribution tend to approximate a normal distribution It describes the probability, that under a given mean and a given dispersion (standard deviation) an event occurs exactly k times.

It is defined by two parameters N(mu,tau):

  • mu = mean
  • tau = standard deviation

Example: The distribution of bread weights of a local manufacturer follows a normal distribution with mean 500 g and a standard deviation of 20 g.

NormA: What is the probability of bread weights to be lower than 470 g?

NormB: What is the probability of bread weights to be higher than 505 g?

NormC: Sample independently 10 values from the normal distribution and calculate their mean.

open FSharp.Stats
open FSharp.Stats.Distributions

// Creates a normal distribution with µ = 500 and tau = 20 
let normal = Continuous.Normal.Init 500. 20.

// NormA: What is the probability of bread weights to be equal or lower than 470 g?
let normA = normal.CDF 470.
// Output: 0.06681 = 6.68 %

// NormB: What is the probability of bread weights to be higher than 505 g?
let normB = 1. - (normal.CDF 505.)
// Output: 0.401294 = 40.13 %

// NormC: Sample independently 10 values from the normal distribution and calculate their mean.
let normC = 
    Seq.init 10 (fun _ -> normal.Sample())
    |> Seq.mean
500.2734598
// Set a seed so that sampling is reproducible
let seed = 1

Random.SetSampleGenerator(Random.RandThreadSafe(seed))   
List.init 3 (fun _ -> normal.Sample())
[494.0130671; 496.2549818; 538.0814408]
Random.SetSampleGenerator(Random.RandThreadSafe(seed))   
List.init 3 (fun _ -> normal.Sample())
[494.0130671; 496.2549818; 538.0814408]
// Get back to unseeded sampling
Random.SetSampleGenerator(Random.RandThreadSafe())   
List.init 3 (fun _ -> normal.Sample())
[486.9647716; 499.1231583; 467.8681566]
open Plotly.NET

let plotNormal =
    [400. .. 600.]
    |> List.map (fun x -> x,normal.PDF x)
    |> Chart.Area
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withTitle "N(500,20) PDF"
let plotNormalCDF =

    [400. .. 600.]
    |> List.map (fun x -> x,normal.CDF x)
    |> Chart.Area
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withTitle "N(500,20) CDF"

Multivariate normal distribution

Multivariate normal distributions are initialized with a mean vector and a covariance matrix.

let mvn = Continuous.MultivariateNormal.Init (vector [-1.;5.]) (matrix [[0.5;1.];[0.25;1.2]])
let axisXRange = [-5. .. 0.2 .. 5.]
let axisYRange = [ 0. .. 0.2 .. 10.]

// probability density function 
let mvnPdfs =
    axisYRange |> List.map (fun y -> 
        axisXRange
        |> List.map (fun x -> 
            mvn.PDF (vector [x;y])
            )
        )

let mvnSamples = 
    Array.init 1000 (fun _ -> mvn.Sample())

let surface = Chart.Surface(mvnPdfs,axisXRange,axisYRange)

let samples = 
    mvnSamples
    |> Array.map (fun t -> t.[0],t.[1])
    |> Array.unzip
    |> fun (x,y) -> Chart.Scatter3D(x,y,Array.init x.Length (fun _ -> Random.rndgen.NextFloat() / 3.),StyleParam.Mode.Markers)

let mvnChart = 
    [surface;samples]
    |> Chart.combine
    |> Chart.withTitle "Bivariate normal distribution with sampling"

Students t distribution

let studentTParams = [(0.,1.,1.);(0.,1.,2.);(0.,1.,5.);]
let xStudentT = [-10. ..0.1.. 10.]

let pdfStudentT mu tau dof = 
    xStudentT 
    |> List.map (Continuous.StudentT.PDF mu tau dof)
    |> List.zip xStudentT


let cdfStudentT mu tau dof = 
    xStudentT 
    |> List.map (Continuous.StudentT.CDF  mu tau dof)
    |> List.zip xStudentT


let v =
    studentTParams
    |> List.map (fun (mu,tau,dof) -> Chart.Spline(pdfStudentT mu tau dof,Name=sprintf "mu=%.1f tau=%.1f dof=%.1f" mu tau dof,ShowMarkers=false))
    |> Chart.combine
    |> Chart.withTemplate ChartTemplates.lightMirrored

F distribution

The F distribution or Fisher distribution, also known as Fisher-Snedecor distribution, is a continuous probability distribution. An F-distributed random variable results from the quotient of two Chi-square-distributed random variables each divided by the associated number of degrees of freedom. The F-distribution has two independent degrees of freedom(dof) as parameters, and thus forms a two-parameter distribution family.

Generally speaking, the F-tests and the resulting F-Distribution is utilized for comparing multiple levels of independent variables with multiple groups. In practice, it is most commonly used to compare the variances within a group to the variance between different groups, as seen in the Analysis of varaince.

let fParams = [(2.,1.);(5.,2.);(10.,1.);(100.,100.)]
let xF = [0. .. 1. .. 5.]

let pdfF a b = 
    xF 
    |> List.map (Continuous.F.PDF a b)
    |> List.zip xF

let fPDFs =
    fParams
    |> List.map (fun (a,b) -> Chart.Line(pdfF a b,Name=sprintf "dof1=%.1f dof2=%.1f" a b,LineWidth=3.) )
    |> Chart.combine
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withTitle "Different F-Distributions PDFs, x=[0,5]"
let cdfF a b = 
    xF 
    |> List.map (Continuous.F.CDF a b)
    |> List.zip xF

let fCDFs =
    fParams
    |> List.map (fun (a,b) -> Chart.Line(cdfF a b,Name=sprintf "dof1=%.1f dof2=%.1f" a b,LineWidth=3.) )
    |> Chart.combine
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withTitle "Different F-Distributions CDFs, x=[0,5]"

Discrete

Bernoulli distribution

A Bernoulli distribution is a (..) random experiment that has only two outcomes (usually called a "Success" or a "Failure"). For example, the probability of getting a heads (a "success") while flipping a coin is 0.5. The probability of "failure" is 1 – P (1 minus the probability of success, which also equals 0.5 for a coin toss). It is a special case of the binomial distribution for n = 1. In other words, it is a binomial distribution with a single trial (e.g. a single coin toss).
~ by statisticshowto

Mathematically, "success" and "failure" are represented as 1.0 and 0.0, respectively.

It is defined by one parameter B(p):

  • p = probability of success

Example: A weighted coin with a probability of 0.6 to land on tails. Most bernoulli distribution calculations are rather intuitive:

BernA: What is the mean of a bernoulli distribution with the weighted coin?

BernB: What is the probability to land on heads?

open FSharp.Stats
open FSharp.Stats.Distributions

// Assumes "tails" to be success
let bernoulli = Discrete.Bernoulli.Init 0.6

// BernA: What is the mean of a bernoulli distribution with the weighted coin?
let bernA = bernoulli.Mean
// Output: 0.6
// Altough the bernoulli distribution can never return 0.6 (only 0.0 or 1.0) on average it will return heads at the same probability it has to land on heads.

// BernB: What is the probability to land on heads?
let bernB = bernoulli.PMF 0
// Output: 0.4
// Again: Heads = 0.0 = failure and tails = 1.0 = success. 

let plotBernoulli =
    [0; 1]
    |> List.map (fun x -> x, bernoulli.PMF x)
    |> Chart.Column
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withTitle "B(0.6)"

Binomial distribution

The binomial distribution describes the probability, that under a given success probability and a given number of draws an event occurs exactly k times (with replacement).

It is defined by two parameters B(n,p):

  • n = number of draws
  • p = probability of success

Example: The school bus is late with a probability of 0.10.

BinoA: What is the probability of running late exactly 5 times during a 30 day month?

BinoB: What is the probability of running late for a maximum of 5 times?

BinoC: What is the probability of running late for at least 5 times?

open FSharp.Stats
open FSharp.Stats.Distributions

// Creates a binomial distribution with n=30 and p=0.90 
let binomial = Discrete.Binomial.Init 0.1 30

// BinoA: What is the probability of running late exactly 5 times during a 30 day month?
let binoA = binomial.PMF 5
// Output: 0.1023 = 10.23 %

// BinoB: What is the probability of running late for a maximum of 5 times?
let binoB = binomial.CDF 5.
// Output: 0.9268 = 92.68 %

// BinoC: What is the probability of running late for at least 5 times?
let binoC = 1. - (binomial.CDF 4.)
// Output: 0.1755 = 17.55 %

let plotBinomial =
    [0..30]
    |> List.map (fun x -> x,binomial.PMF x)
    |> Chart.Column
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withTitle "B(30,0.1)"

Hypergerometric distribution

The hypergeometric distribution describes the probability, that under a given number of success and failure events and a given number of draws an event occurs exactly k times (without replacement).

It is defined by three parameters:

  • N = finite population representing the total number of events.
  • K = number of success events in this population.
  • n = number of draws from the population.

Example: You participate in a lottery, where you have to choose 6 numbers out of 49. The lottery queen draws 6 numbers randomly, where the order does not matter.

HypA: What is the probability that your 6 numbers are right?

HypB: How to simulate artificial draws from the distribution?

HypC: What is the probability that you have at least 3 right ones?

HypD: What is the probability that you have a maximum of 3 right ones?

// Creates a hypergeometric distribution with N=49, K=6, n=6.
let hyper = Discrete.Hypergeometric.Init 49 6 6

// HypA: What is the probability that your 6 numbers are right?
let hypA = hyper.PMF 6
// Output: 7.15-08

// HypB: How to simulate artificial draws from the distribution?
let hypB = hyper.Sample()
// Output: Number of success events randomly sampled from the distribution.

// HypC: What is the probability that you have at least 3 right ones?
// CDF is implemented to calculate P(X <= k)
let hypC = 1. - hyper.CDF 2
// Output: 0.01864 = 1.86 %

// HypD: What is the probability that you have a maximum of 3 right ones? 
let hypD = hyper.CDF 3
// Output: 0.99901 = 99.90 %

Poisson distribution

The poisson distribution describes what the probability for a number of events is, occurring in a certain time, area, or volume.

It is defined by just one parameters Po(lambda) where lambda is the average rate.

Example: During a year, a forest is struck by a lightning 5.5 times.

PoA: What is the probability that the lightning strikes exactly 3 times?

PoB: What is the probability that the lightning strikes less than 2 times?

PoC: What is the probability that the lightning strikes more than 7 times?

// Creates a poisson distribution with lambda=  .
let poisson = Discrete.Poisson.Init 5.5
// PoA: What is the probability that the lightning strikes exactly 3 times?
let poA = poisson.PMF 3
// Output: 0.11332 = 11.33 %

// PoB: What is the probability that the lightning strikes less or equal to 2 times?
let poB = 
    // CDF not implemented yet
    //poisson.CDF 2.
    [0 .. 2] |> List.sumBy poisson.PMF
    // Output: 0.088376 = 8.84 %
    
// PoC: What is the probability that the lightning strikes more than 7 times?
let poC = 1. -  poisson.CDF 6.
// Output: Not implemented yet. Manual addition necessary
let plotPo =
    [0..20]
    |> List.map (fun x -> x,poisson.PMF x)
    |> Chart.Column
    |> Chart.withTemplate ChartTemplates.lightMirrored
    //|> Chart.withSize(600.,400.)
    |> Chart.withTitle "Po(5.5)"

Gamma distribution

let gammaParams = [(1.,2.);(2.,2.);(3.,2.);(5.,1.);(9.0,0.5);(7.5,1.);(0.5,1.);]
let xgamma = [0. ..0.1.. 20.]

let pdfGamma a b = 
    xgamma 
    |> List.map (Continuous.Gamma.PDF a b)
    |> List.zip xgamma

let gammaPlot =
    gammaParams
    |> List.map (fun (a,b) -> Chart.Point(pdfGamma a b,Name=sprintf "a=%.1f b=%.1f" a b) )//,ShowMarkers=false))
    |> Chart.combine
    |> Chart.withTemplate ChartTemplates.lightMirrored
let cdfGamma a b = 
    xgamma 
    |> List.map (Continuous.Gamma.CDF a b)
    |> List.zip xgamma

let gammaCDFPlot=
    gammaParams
    |> List.map (fun (a,b) -> Chart.Spline(cdfGamma a b,Name=sprintf "a=%.1f b=%.1f" a b) )//,ShowMarkers=false))
    |> Chart.combine
    |> Chart.withTemplate ChartTemplates.lightMirrored

Negative binomial distribution

Note: There is no unique definition of the negative binomial distribution. In definition A the random variable x is the number of trials, while in definition B the random variable x is the number of failures. The definition of r (number of successes) and p (probability of each bernoulli trial) is the same for both definitions.

In FSharp.Stats both definitions are implemented. The number of trials (A) can be modelled with negativeBinomial_trials, while the number of failures can be modelled with negativeBinomial_failures. For further discussion about this issue check out #256.

A - Negative binomial distribution (trials)

The distribution models the number of trials needed (x) to get the rth success in repeated independent Bernoulli trials. Until the (x-1)th trial, (r-1) successes must be accomplished, which matches the standard binomial distribution. Therefore, to get the rth success in the xth trial, you have to multiply Binom(p,x-1,r-1) by p.

B - Negative binomial distribution (faiures)

The distribution models the number of failures (k) prior to the rth success in repeated independent Bernoulli trials. Until the (k+r-1)th trial, (r-1) successes must be accomplished, which matches the standard binomial distribution. Therefore, to get the rth success after kth failures, you have to multiply Binom(p,k+r-1,r-1) by p.

The PDF and CDF of both distributions can be converted into each other by:

(negativeBinomial_trials   r p).PMF x = (negativeBinomial_failures r p).PMF (x-r)
(negativeBinomial_failures r p).PMF k = (negativeBinomial_trials   r p).PMF (k+r)

(negativeBinomial_trials   r p).CDF x = (negativeBinomial_failures r p).CDF (x-r)
(negativeBinomial_failures r p).CDF k = (negativeBinomial_trials   r p).CDF (k+r)

Task1: What is the probability of obtaining the third success on the 10 trial. The individual success probability is 0.09.

//number of trials
let x = 10

//probability of the independent bernoulli trials
let p = 0.09

//number of successes
let r = 3

// number of failures 
let k = x - 3

//Solution A:
let negB_A = Discrete.NegativeBinomial_trials.PMF r p x
//returns 0.01356187619

//Solution B:
let negB_B = Discrete.NegativeBinomial_failures.PMF r p k
//returns 0.01356187619

Comparison of PMF

let negBinom_trials =
    Distributions.Discrete.NegativeBinomial_trials.Init 3 0.3

let negBinom_failures = 
    Distributions.Discrete.NegativeBinomial_failures.Init 3 0.3

negBinom_trials.CDF 1


let pmfComparison = 
    let pmfs_trials   = [0..30] |> List.map (fun x -> x,negBinom_trials.PMF x)
    let pmfs_failures = [0..30] |> List.map (fun x -> x,negBinom_failures.PMF x)
    [
         Chart.Column (pmfs_trials, Opacity=0.5, Name= "trials (x)")
         Chart.Column (pmfs_failures, Opacity=0.5, Name= "failures (k)")
    ]
    |> Chart.combine
    |> Chart.withLayoutStyle(BarMode=StyleParam.BarMode.Overlay)
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withTitle "PMF"
    |> Chart.withXAxisStyle "x or k"
    |> Chart.withYAxisStyle "P(X=x) or P(X=k)"

You can clearly see, that the PMF distributions are shifted according to the number of successes because: \(failures (k) = trials (x) - successes (r)\).

Comparison of CDF

let cdfComparison = 
    let cdfs_trials   = [0..30] |> List.map (fun x -> x,negBinom_trials.CDF x)
    let cdfs_failures = [0..30] |> List.map (fun x -> x,negBinom_failures.CDF x)
    [
         Chart.Column (cdfs_trials, Opacity=0.5, Name= "trials (x)")
         Chart.Column (cdfs_failures, Opacity=0.5, Name= "failures (k)")
    ]
    |> Chart.combine
    |> Chart.withLayoutStyle(BarMode=StyleParam.BarMode.Overlay)
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withTitle "CDF"
    |> Chart.withXAxisStyle "x or k"
    |> Chart.withYAxisStyle "P(X=x) or P(X=k)"

You can clearly see, that the CDF distributions are shifted according to the number of successes because: \(failures (k) = trials (x) - successes (r)\).

Multinomial distribution

The multinomial distribution is a generic version of the binomial distribution. While for binomial, the probabilities for a single success state is of interest, the multinomial distribution deals with multiple exact success events.

Example: There are people from 3 different towns: 3 from town A, 7 from town B, and 20 from town C. When 5 people are randomly chosen, what is the probability, to obtain exactly 1 from town A, 1 from town B, and 3 from town C? The individual success probabilities can be easily accessed p(A)=5/30, p(B)=7/30, and p(C)=20/30.

// probabilities for all individual success states 
let multiNomProb = vector [(3./30.); (7./30.); (20./30.)]

// the success combination that is of interest
let multiNomKs   = Vector.Generic.ofList [1; 1; 3]

// gives the probability of obtaining exactly the pattern 1,1,3
let mNom = Discrete.Multinomial.PMF multiNomProb multiNomKs
The probability to chose 1 person from town A, 1 from B, and 3 from C is: 0.1383

Relation to binomial distribution

Input vectors of length 2 correspond to the binomial distribution. The following examples are identical. While for binomial it is required to input the total number (n), for the multinomial distribution you have to give the corresponding anto-probability:

let mNom_bin_A = (Discrete.Binomial.PMF 0.123 200 20)
let mNom_bin_B = Discrete.Multinomial.PMF (vector [|0.123; 0.877|]) (Vector.Generic.ofArray [|20; 180|])

mNom_bin_A //0.0556956956889893
mNom_bin_B //0.0556956956889898

A cumulative density function (CDF) is not defined properly, as you do not know which success statement is of interest. If you want to investigate how probable it is to see at least 3 people of town C you would have to calculate the sum all possible combinations that result in this constellation:

Discrete.Multinomial.PMF multiNomProb [1;1;3]
Discrete.Multinomial.PMF multiNomProb [2;0;3]
Discrete.Multinomial.PMF multiNomProb [0;2;3]
Discrete.Multinomial.PMF multiNomProb [1;0;4]
Discrete.Multinomial.PMF multiNomProb [0;1;4]
Discrete.Multinomial.PMF multiNomProb [0;0;5]

The cumulative probability is 0.7901234.

It may be that in future, a dedicated CDF functionality is added that requests the index of the success state of interest and sums up all possible combination probabilities.

Empirical

You can create empirically derived distributions and sample randomly from these. In this example 100,000 random samples from a student t distribution are drawn and visualized

// Randomly taken samples; in this case from a gaussian normal distribution.
let sampleDistribution = 
    let template = Continuous.Normal.Init 5. 2.
    Seq.init 100000 (fun _ -> template.Sample())

//creates an empirical distribution with bandwidth 0.1
let empiricalDistribution = 
    EmpiricalDistribution.create 0.1 sampleDistribution

Categorical data

You also can create probability mass functions (PMF) from categorical (nominal) data. You can check for just the elements present in your input sequence, or include elements of a predefined set.

let myText = 
    "Hello World, I am a test Text with all kind of Characters!112"

// Define your set of characters that should be checked for
// Any character that is not present in these sets is neglected
let mySmallAlphabet = "abcdefghijklmnopqrstuvwxyz" |> Set.ofSeq
let myAlphabet      = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" |> Set.ofSeq
let myAlphabetNum   = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" |> Set.ofSeq

These alphabets can be used to create the probability maps.

// takes the characters and determines their probabilities without considering non-existing characters
let myFrequencies0 = EmpiricalDistribution.createNominal() myText

// takes upper and lower case characters and determines their probability
let myFrequencies1 = EmpiricalDistribution.createNominal(Template=myAlphabet) myText

// takes upper and lower case characters and numbers and determines their probability
let myFrequencies2 = EmpiricalDistribution.createNominal(Template=myAlphabetNum) myText

// takes only lower case characters and determines their probability
// The big M is neglected because it is not present in the template alphabet.
let myFrequencies3 = EmpiricalDistribution.createNominal(Template=mySmallAlphabet) myText

An additional field for transforming the input sequence may be beneficial if it does not matter if an character is lower case or upper case:

// converts all characters to lower case characters and determines their probability
let myFrequencies4 = EmpiricalDistribution.createNominal(Template=mySmallAlphabet,Transform=System.Char.ToLower) myText

With a template set, you can access the probability of 'z' even if it is not in your original input sequence.

myFrequencies3.['z'] //results in 0.0

Visualization of the PMF

let categoricalDistribution = 
    [
    Chart.Column(myFrequencies0 |> Map.toArray,"0_noTemplate")    |> Chart.withYAxisStyle "probability"
    Chart.Column(myFrequencies1 |> Map.toArray,"1_bigAlphabet")   |> Chart.withYAxisStyle "probability"
    Chart.Column(myFrequencies2 |> Map.toArray,"2_numAlphabet")   |> Chart.withYAxisStyle "probability"
    Chart.Column(myFrequencies3 |> Map.toArray,"3_smallAlphabet") |> Chart.withYAxisStyle "probability"
    Chart.Column(myFrequencies4 |> Map.toArray,"4_toLower + smallAlphabet") |> Chart.withYAxisStyle "probability"
    ]
    |> Chart.Grid(4,1)
    |> Chart.withTemplate ChartTemplates.lightMirrored

Distribution merging

You can merge two distributions by using Empirical.merge, subroutines like Empirical.add, or the generic function Empirical.mergeBy.

Merging two distributions leads to a combined distribution. If keys are present in both distributions the value at distA is superseded with the value at distB.

Please note, that when handling continuous data, the binning of both input distributions must be identical! When using categorical data, the binning does not matter and the parameter can be set to true.

let a =
    [("k1",1);("k2",3)]
    |> Map.ofList

let b =
    [("k2",2);("k3",4)]
    |> Map.ofList

let mergedDist = Empirical.merge true a b
mergeDist = map [("k1", 1); ("k2", 2); ("k3", 4)]

Adding two distributions leads to a combined distribution. If keys are present in both distributions the values at distA and distB are added.

let addedDist = Empirical.add true a b
addedDist = map [("k1", 1); ("k2", 5); ("k3", 4)]

A custom merging function can be defined:

let customDist = Empirical.mergeBy true (fun valueA valueB -> valueA * valueB) a b
customDist = map [("k1", 1); ("k2", 6); ("k3", 4)]

Density estimation

let nv = Array.init 1000 (fun _ -> Distributions.Continuous.Normal.Sample 5. 2.)

let xy = KernelDensity.estimate KernelDensity.Kernel.gaussian 1.0 nv

let kernelChart = 
    Chart.SplineArea xy
    |> Chart.withTemplate ChartTemplates.lightMirrored
 

Distance

In this example we will calculate the Wasserstein Metric between 3 distributions. One can imagine this metric as the amount of work needed to move the area (pile of dirt) of one distribution to the area of the other. That's why it's also called Earth Movers Distance.

Be aware that this distance measure is dependent on the actual absolute values of the distributions.

let distribution1 = 
    let normal = Continuous.Normal.Init 300. 15.
    Array.init 1000 (fun _ -> normal.Sample())
let distribution2 =
    let normal = Continuous.Normal.Init 350. 20.
    Array.init 500 (fun _ -> normal.Sample())
let distribution3 =
    let normal = Continuous.Normal.Init 500. 20.
    Array.init 1000 (fun _ -> normal.Sample())

let pilesOfDirt =
    [
    Chart.Histogram(distribution1,Name = "Distribution1")
    Chart.Histogram(distribution2,Name = "Distribution2")
    Chart.Histogram(distribution3,Name = "Distribution3")
    ]
    |> Chart.combine
let distance1and2 = Distance.OneDimensional.wassersteinDistance distribution1 distribution2
49.56468837
let distance1and3 = Distance.OneDimensional.wassersteinDistance distribution1 distribution3
199.0156561

As expected the distance between Distribution 1 and 2 is the lowest:

let distributions = 
    [|distribution1;distribution2;distribution3|]

let mapColor min max value = 
    let proportionR = 
        ((255. - 200.) * (value - min) / (max - min))
        |> int
        |> fun x -> 255 - x
    let proportionG = 
        ((255. - 200.) * (value - min) / (max - min))
        |> int
        |> fun x -> 255 - x
    let proportionB = 
        ((255. - 200.) * (value - min) / (max - min))
        |> int
        |> fun x -> 255 - x
    Color.fromARGB 1 proportionR proportionG proportionB

let distancesTable =
    let headerColors = ["white";"#1f77b4";"#ff7f0e";"#2ca02c"] |> List.map Color.fromString |> Color.fromColors
    let distances = 
        distributions
        |> Array.map (fun x ->
            distributions
            |> Array.map (fun y ->
                Distance.OneDimensional.wassersteinDistance x y
                |> (sprintf "%.2f")
            )
        )
        |> Array.transpose 
        |> Array.append [|[|"Distribution1";"Distribution2";"Distribution3"|]|]
        |> Array.transpose 
    let cellColors = 
        distances
        |> Array.mapi (fun i a ->
            a
            |> Array.mapi (fun j v -> 
                if j = 0 then 
                    if i = 0 then Color.fromHex "#1f77b4"
                    elif i = 1 then Color.fromHex "#ff7f0e"
                    else Color.fromHex "#2ca02c"
                else 
                    mapColor 0. 200. (float v)
            )
        )
        |> Array.transpose
        |> Seq.map Color.fromColors
        |> Color.fromColors
 
    Chart.Table(
        ["";"Distribution1";"Distribution2";"Distribution3"],         
        distances,
        HeaderFillColor = headerColors,
        CellsFillColor = cellColors)
namespace Plotly
namespace Plotly.NET
module Defaults from Plotly.NET
<summary> Contains mutable global default values. Changing these values will apply the default values to all consecutive Chart generations. </summary>
val mutable DefaultDisplayOptions: DisplayOptions
Multiple items
type DisplayOptions = inherit DynamicObj new: unit -> DisplayOptions static member addAdditionalHeadTags: additionalHeadTags: XmlNode list -> (DisplayOptions -> DisplayOptions) static member addDescription: description: XmlNode list -> (DisplayOptions -> DisplayOptions) static member combine: first: DisplayOptions -> second: DisplayOptions -> DisplayOptions static member getAdditionalHeadTags: displayOpts: DisplayOptions -> XmlNode list static member getDescription: displayOpts: DisplayOptions -> XmlNode list static member getPlotlyReference: displayOpts: DisplayOptions -> PlotlyJSReference static member init: ?AdditionalHeadTags: XmlNode list * ?Description: XmlNode list * ?PlotlyJSReference: PlotlyJSReference -> DisplayOptions static member initCDNOnly: unit -> DisplayOptions ...

--------------------
new: unit -> DisplayOptions
static member DisplayOptions.init: ?AdditionalHeadTags: Giraffe.ViewEngine.HtmlElements.XmlNode list * ?Description: Giraffe.ViewEngine.HtmlElements.XmlNode list * ?PlotlyJSReference: PlotlyJSReference -> DisplayOptions
type PlotlyJSReference = | CDN of string | Full | Require of string | NoReference
<summary> Sets how plotly is referenced in the head of html docs. </summary>
union case PlotlyJSReference.NoReference: PlotlyJSReference
Multiple items
namespace FSharp

--------------------
namespace Microsoft.FSharp
namespace FSharp.Stats
namespace FSharp.Stats.Distributions
val normal: ContinuousDistribution<float,float>
namespace FSharp.Stats.Distributions.Continuous
type Normal = static member CDF: mu: float -> sigma: float -> x: float -> float static member CheckParam: mu: float -> sigma: float -> unit static member Estimate: samples: seq<float> -> ContinuousDistribution<float,float> static member Init: mu: float -> sigma: float -> ContinuousDistribution<float,float> static member InvCDF: mu: float -> sigma: float -> p: float -> float static member Mean: mu: float -> sigma: float -> float static member Mode: mu: float -> sigma: float -> float static member PDF: mu: float -> sigma: float -> x: float -> float static member Sample: mu: float -> sigma: float -> float static member SampleUnchecked: mu: float -> sigma: float -> float ...
<summary> Normal distribution. </summary>
static member Continuous.Normal.Init: mu: float -> sigma: float -> ContinuousDistribution<float,float>
val normA: float
abstract Distribution.CDF: 'a -> float
val normB: float
val normC: float
Multiple items
module Seq from FSharp.Stats
<summary> Module to compute common statistical measure </summary>

--------------------
module Seq from Microsoft.FSharp.Collections
<summary>Contains operations for working with values of type <see cref="T:Microsoft.FSharp.Collections.seq`1" />.</summary>

--------------------
type Seq = new: unit -> Seq static member geomspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> seq<float> static member linspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> seq<float>

--------------------
new: unit -> Seq
val init: count: int -> initializer: (int -> 'T) -> seq<'T>
<summary>Generates a new sequence which, when iterated, will return successive elements by calling the given function, up to the given count. Each element is saved after its initialization. The function is passed the index of the item being generated.</summary>
<remarks>The returned sequence may be passed between threads safely. However, individual IEnumerator values generated from the returned sequence should not be accessed concurrently.</remarks>
<param name="count">The maximum number of items to generate for the sequence.</param>
<param name="initializer">A function that generates an item in the sequence from a given index.</param>
<returns>The result sequence.</returns>
<exception cref="T:System.ArgumentException">Thrown when count is negative.</exception>
<example id="init-1"><code lang="fsharp"> Seq.init 4 (fun v -&gt; v + 5) </code> Evaluates to a sequence yielding the same results as <c>seq { 5; 6; 7; 8 }</c></example>
<example id="init-2"><code lang="fsharp"> Seq.init -5 (fun v -&gt; v + 5) </code> Throws <c>ArgumentException</c></example>
abstract ContinuousDistribution.Sample: unit -> 'b
val mean: items: seq<'T> -> 'U (requires member (+) and member get_Zero and member DivideByInt and member (/))
<summary> Computes the population mean (Normalized by N) </summary>
<param name="items">The input sequence.</param>
<remarks>Returns default value if data is empty or if any entry is NaN.</remarks>
<returns>population mean (Normalized by N)</returns>
val seed: int
module Random from FSharp.Stats
<summary> Uniform random number generators </summary>
val SetSampleGenerator: rg: Random.IRandom -> unit
<summary>Sets the random number generator used for sampling.</summary>
<remarks></remarks>
<param name="rg"></param>
<returns></returns>
<example><code></code></example>
Multiple items
type RandThreadSafe = interface IRandom new: unit -> RandThreadSafe + 1 overload val mutable rnd: ThreadLocal<Random>

--------------------
new: unit -> Random.RandThreadSafe
new: n: int -> Random.RandThreadSafe
Multiple items
module List from FSharp.Stats
<summary> Module to compute common statistical measure on list </summary>

--------------------
module List from Microsoft.FSharp.Collections
<summary>Contains operations for working with values of type <see cref="T:Microsoft.FSharp.Collections.list`1" />.</summary>
<namespacedoc><summary>Operations for collections such as lists, arrays, sets, maps and sequences. See also <a href="https://docs.microsoft.com/dotnet/fsharp/language-reference/fsharp-collection-types">F# Collection Types</a> in the F# Language Guide. </summary></namespacedoc>


--------------------
type List = new: unit -> List static member geomspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float list static member linspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float list

--------------------
type List<'T> = | op_Nil | op_ColonColon of Head: 'T * Tail: 'T list interface IReadOnlyList<'T> interface IReadOnlyCollection<'T> interface IEnumerable interface IEnumerable<'T> member GetReverseIndex: rank: int * offset: int -> int member GetSlice: startIndex: int option * endIndex: int option -> 'T list static member Cons: head: 'T * tail: 'T list -> 'T list member Head: 'T member IsEmpty: bool member Item: index: int -> 'T with get ...
<summary>The type of immutable singly-linked lists.</summary>
<remarks>Use the constructors <c>[]</c> and <c>::</c> (infix) to create values of this type, or the notation <c>[1;2;3]</c>. Use the values in the <c>List</c> module to manipulate values of this type, or pattern match against the values directly. </remarks>
<exclude />


--------------------
new: unit -> List
val init: length: int -> initializer: (int -> 'T) -> 'T list
<summary>Creates a list by calling the given generator on each index.</summary>
<param name="length">The length of the list to generate.</param>
<param name="initializer">The function to generate an element from an index.</param>
<exception cref="T:System.ArgumentException">Thrown when the input length is negative.</exception>
<returns>The list of generated elements.</returns>
<example id="init-1"><code lang="fsharp"> List.init 4 (fun v -&gt; v + 5) </code> Evaluates to <c>[5; 6; 7; 8]</c></example>
<example id="init-2"><code lang="fsharp"> List.init -5 (fun v -&gt; v + 5) </code> Throws <c>ArgumentException</c></example>
val plotNormal: GenericChart.GenericChart
val map: mapping: ('T -> 'U) -> list: 'T list -> 'U list
<summary>Builds a new collection whose elements are the results of applying the given function to each of the elements of the collection.</summary>
<param name="mapping">The function to transform elements from the input list.</param>
<param name="list">The input list.</param>
<returns>The list of transformed elements.</returns>
<example id="map-1"><code lang="fsharp"> let inputs = [ "a"; "bbb"; "cc" ] inputs |&gt; List.map (fun x -&gt; x.Length) </code> Evaluates to <c>[ 1; 3; 2 ]</c></example>
val x: float
abstract ContinuousDistribution.PDF: 'b -> float
type Chart = static member AnnotatedHeatmap: zData: seq<#seq<'a1>> * annotationText: seq<#seq<string>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?X: seq<'a3> * ?MultiX: seq<seq<'a3>> * ?XGap: int * ?Y: seq<'a4> * ?MultiY: seq<seq<'a4>> * ?YGap: int * ?Text: 'a5 * ?MultiText: seq<'a5> * ?ColorBar: ColorBar * ?ColorScale: Colorscale * ?ShowScale: bool * ?ReverseScale: bool * ?ZSmooth: SmoothAlg * ?Transpose: bool * ?UseWebGL: bool * ?ReverseYAxis: bool * ?UseDefaults: bool -> GenericChart (requires 'a1 :> IConvertible and 'a3 :> IConvertible and 'a4 :> IConvertible and 'a5 :> IConvertible) + 1 overload static member Area: x: seq<#IConvertible> * y: seq<#IConvertible> * ?ShowMarkers: bool * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: MarkerSymbol * ?MultiMarkerSymbol: seq<MarkerSymbol> * ?Marker: Marker * ?LineColor: Color * ?LineColorScale: Colorscale * ?LineWidth: float * ?LineDash: DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: Orientation * ?GroupNorm: GroupNorm * ?FillColor: Color * ?FillPatternShape: PatternShape * ?FillPattern: Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart (requires 'a2 :> IConvertible) + 1 overload static member Bar: values: seq<#IConvertible> * ?Keys: seq<'a1> * ?MultiKeys: seq<seq<'a1>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerPatternShape: PatternShape * ?MultiMarkerPatternShape: seq<PatternShape> * ?MarkerPattern: Pattern * ?Marker: Marker * ?Base: #IConvertible * ?Width: 'a4 * ?MultiWidth: seq<'a4> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?UseDefaults: bool -> GenericChart (requires 'a1 :> IConvertible and 'a2 :> IConvertible and 'a4 :> IConvertible) + 1 overload static member BoxPlot: ?X: seq<'a0> * ?MultiX: seq<seq<'a0>> * ?Y: seq<'a1> * ?MultiY: seq<seq<'a1>> * ?Name: string * ?ShowLegend: bool * ?Text: 'a2 * ?MultiText: seq<'a2> * ?FillColor: Color * ?MarkerColor: Color * ?Marker: Marker * ?Opacity: float * ?WhiskerWidth: float * ?BoxPoints: BoxPoints * ?BoxMean: BoxMean * ?Jitter: float * ?PointPos: float * ?Orientation: Orientation * ?OutlineColor: Color * ?OutlineWidth: float * ?Outline: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?Notched: bool * ?NotchWidth: float * ?QuartileMethod: QuartileMethod * ?UseDefaults: bool -> GenericChart (requires 'a0 :> IConvertible and 'a1 :> IConvertible and 'a2 :> IConvertible) + 2 overloads static member Bubble: x: seq<#IConvertible> * y: seq<#IConvertible> * sizes: seq<int> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: MarkerSymbol * ?MultiMarkerSymbol: seq<MarkerSymbol> * ?Marker: Marker * ?LineColor: Color * ?LineColorScale: Colorscale * ?LineWidth: float * ?LineDash: DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: Orientation * ?GroupNorm: GroupNorm * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart (requires 'a2 :> IConvertible) + 1 overload static member Candlestick: ``open`` : seq<#IConvertible> * high: seq<#IConvertible> * low: seq<#IConvertible> * close: seq<#IConvertible> * ?X: seq<'a4> * ?MultiX: seq<seq<'a4>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?Text: 'a5 * ?MultiText: seq<'a5> * ?Line: Line * ?IncreasingColor: Color * ?Increasing: FinanceMarker * ?DecreasingColor: Color * ?Decreasing: FinanceMarker * ?WhiskerWidth: float * ?ShowXAxisRangeSlider: bool * ?UseDefaults: bool -> GenericChart (requires 'a4 :> IConvertible and 'a5 :> IConvertible) + 2 overloads static member Column: values: seq<#IConvertible> * ?Keys: seq<'a1> * ?MultiKeys: seq<seq<'a1>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerPatternShape: PatternShape * ?MultiMarkerPatternShape: seq<PatternShape> * ?MarkerPattern: Pattern * ?Marker: Marker * ?Base: #IConvertible * ?Width: 'a4 * ?MultiWidth: seq<'a4> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?UseDefaults: bool -> GenericChart (requires 'a1 :> IConvertible and 'a2 :> IConvertible and 'a4 :> IConvertible) + 1 overload static member Contour: zData: seq<#seq<'a1>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?X: seq<'a2> * ?MultiX: seq<seq<'a2>> * ?Y: seq<'a3> * ?MultiY: seq<seq<'a3>> * ?Text: 'a4 * ?MultiText: seq<'a4> * ?ColorBar: ColorBar * ?ColorScale: Colorscale * ?ShowScale: bool * ?ReverseScale: bool * ?Transpose: bool * ?ContourLineColor: Color * ?ContourLineDash: DrawingStyle * ?ContourLineSmoothing: float * ?ContourLine: Line * ?ContoursColoring: ContourColoring * ?ContoursOperation: ConstraintOperation * ?ContoursType: ContourType * ?ShowContourLabels: bool * ?ContourLabelFont: Font * ?Contours: Contours * ?FillColor: Color * ?NContours: int * ?UseDefaults: bool -> GenericChart (requires 'a1 :> IConvertible and 'a2 :> IConvertible and 'a3 :> IConvertible and 'a4 :> IConvertible) static member Funnel: x: seq<#IConvertible> * y: seq<#IConvertible> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?Width: float * ?Offset: float * ?Text: 'a2 * ?MultiText: seq<'a2> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?Orientation: Orientation * ?AlignmentGroup: string * ?OffsetGroup: string * ?MarkerColor: Color * ?MarkerOutline: Line * ?Marker: Marker * ?TextInfo: TextInfo * ?ConnectorLineColor: Color * ?ConnectorLineStyle: DrawingStyle * ?ConnectorFillColor: Color * ?ConnectorLine: Line * ?Connector: FunnelConnector * ?InsideTextFont: Font * ?OutsideTextFont: Font * ?UseDefaults: bool -> GenericChart (requires 'a2 :> IConvertible) static member Heatmap: zData: seq<#seq<'a1>> * ?X: seq<'a2> * ?MultiX: seq<seq<'a2>> * ?Y: seq<'a3> * ?MultiY: seq<seq<'a3>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?XGap: int * ?YGap: int * ?Text: 'a4 * ?MultiText: seq<'a4> * ?ColorBar: ColorBar * ?ColorScale: Colorscale * ?ShowScale: bool * ?ReverseScale: bool * ?ZSmooth: SmoothAlg * ?Transpose: bool * ?UseWebGL: bool * ?ReverseYAxis: bool * ?UseDefaults: bool -> GenericChart (requires 'a1 :> IConvertible and 'a2 :> IConvertible and 'a3 :> IConvertible and 'a4 :> IConvertible) + 1 overload ...
static member Chart.Area: xy: seq<#System.IConvertible * #System.IConvertible> * ?ShowMarkers: bool * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'c * ?MultiText: seq<'c> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: StyleParam.MarkerSymbol * ?MultiMarkerSymbol: seq<StyleParam.MarkerSymbol> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: StyleParam.Colorscale * ?LineWidth: float * ?LineDash: StyleParam.DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: StyleParam.Orientation * ?GroupNorm: StyleParam.GroupNorm * ?FillColor: Color * ?FillPatternShape: StyleParam.PatternShape * ?FillPattern: TraceObjects.Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible)
static member Chart.Area: x: seq<#System.IConvertible> * y: seq<#System.IConvertible> * ?ShowMarkers: bool * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: StyleParam.MarkerSymbol * ?MultiMarkerSymbol: seq<StyleParam.MarkerSymbol> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: StyleParam.Colorscale * ?LineWidth: float * ?LineDash: StyleParam.DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: StyleParam.Orientation * ?GroupNorm: StyleParam.GroupNorm * ?FillColor: Color * ?FillPatternShape: StyleParam.PatternShape * ?FillPattern: TraceObjects.Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'a2 :> System.IConvertible)
static member Chart.withTemplate: template: Template -> (GenericChart.GenericChart -> GenericChart.GenericChart)
module ChartTemplates from Plotly.NET
val lightMirrored: Template
static member Chart.withTitle: title: Title -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.withTitle: title: string * ?TitleFont: Font -> (GenericChart.GenericChart -> GenericChart.GenericChart)
module GenericChart from Plotly.NET
<summary> Module to represent a GenericChart </summary>
val toChartHTML: gChart: GenericChart.GenericChart -> string
val plotNormalCDF: GenericChart.GenericChart
val mvn: ContinuousDistribution<vector,vector>
type MultivariateNormal = static member CDF: mu: vector -> sigma: matrix -> x: vector -> 'a0 static member CheckParam: mu: vector -> sigma: matrix -> unit static member Init: mu: vector -> sigma: matrix -> ContinuousDistribution<vector,vector> static member InvCDF: mu: vector -> sigma: matrix -> x: vector -> 'a0 static member Mean: mu: vector -> sigma: matrix -> vector static member PDF: mu: vector -> sigma: matrix -> x: vector -> float static member Sample: mu: vector -> sigma: matrix -> Vector<float> static member StandardDeviation: mu: vector -> sigma: matrix -> 'a0 static member Variance: mu: vector -> sigma: matrix -> 'a0
<summary> multivariate normal distribution. </summary>
static member Continuous.MultivariateNormal.Init: mu: vector -> sigma: matrix -> ContinuousDistribution<vector,vector>
Multiple items
val vector: l: seq<float> -> Vector<float>

--------------------
type vector = Vector<float>
Multiple items
val matrix: ll: seq<#seq<float>> -> Matrix<float>

--------------------
type matrix = Matrix<float>
val axisXRange: float list
val axisYRange: float list
val mvnPdfs: float list list
val y: float
val mvnSamples: vector[]
Multiple items
module Array from FSharp.Stats
<summary> Module to compute common statistical measure on array </summary>

--------------------
module Array from Microsoft.FSharp.Collections
<summary>Contains operations for working with arrays.</summary>
<remarks> See also <a href="https://docs.microsoft.com/dotnet/fsharp/language-reference/arrays">F# Language Guide - Arrays</a>. </remarks>


--------------------
type Array = new: unit -> Array static member geomspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float array static member linspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float[]

--------------------
new: unit -> Array
val init: count: int -> initializer: (int -> 'T) -> 'T[]
<summary>Creates an array given the dimension and a generator function to compute the elements.</summary>
<param name="count">The number of elements to initialize.</param>
<param name="initializer">The function to generate the initial values for each index.</param>
<returns>The created array.</returns>
<exception cref="T:System.ArgumentException">Thrown when count is negative.</exception>
<example id="init-1"><code lang="fsharp"> Array.init 4 (fun v -&gt; v + 5) </code> Evaluates to <c>[| 5; 6; 7; 8 |]</c></example>
<example id="init-2"><code lang="fsharp"> Array.init -5 (fun v -&gt; v + 5) </code> Throws <c>ArgumentException</c></example>
val surface: GenericChart.GenericChart
static member Chart.Surface: zData: seq<#seq<'b>> * ?X: seq<#System.IConvertible> * ?Y: seq<#System.IConvertible> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?Text: 'e * ?MultiText: seq<'e> * ?Contours: TraceObjects.Contours * ?ColorScale: StyleParam.Colorscale * ?ShowScale: bool * ?CameraProjectionType: StyleParam.CameraProjectionType * ?Camera: LayoutObjects.Camera * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'b :> System.IConvertible and 'e :> System.IConvertible)
val samples: GenericChart.GenericChart
val map: mapping: ('T -> 'U) -> array: 'T[] -> 'U[]
<summary>Builds a new array whose elements are the results of applying the given function to each of the elements of the array.</summary>
<param name="mapping">The function to transform elements of the array.</param>
<param name="array">The input array.</param>
<returns>The array of transformed elements.</returns>
<exception cref="T:System.ArgumentNullException">Thrown when the input array is null.</exception>
<example id="map-1"><code lang="fsharp"> let inputs = [| "a"; "bbb"; "cc" |] inputs |&gt; Array.map (fun x -&gt; x.Length) </code> Evaluates to <c>[| 1; 3; 2 |]</c></example>
val t: vector
val unzip: array: ('T1 * 'T2)[] -> 'T1[] * 'T2[]
<summary>Splits an array of pairs into two arrays.</summary>
<param name="array">The input array.</param>
<returns>The two arrays.</returns>
<exception cref="T:System.ArgumentNullException">Thrown when the input array is null.</exception>
<example id="unzip-1"><code lang="fsharp"> let inputs = [| (1, "one"); (2, "two") |] let numbers, names = inputs |&gt; Array.unzip </code> Evaluates <c>numbers</c> to <c>[|1; 2|]</c> and <c>names</c> to <c>[|"one"; "two"|]</c>. </example>
val x: float[]
val y: float[]
static member Chart.Scatter3D: xyz: seq<#System.IConvertible * #System.IConvertible * #System.IConvertible> * mode: StyleParam.Mode * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a3 * ?MultiText: seq<'a3> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: StyleParam.MarkerSymbol3D * ?MultiMarkerSymbol: seq<StyleParam.MarkerSymbol3D> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: StyleParam.Colorscale * ?LineWidth: float * ?LineDash: StyleParam.DrawingStyle * ?Line: Line * ?CameraProjectionType: StyleParam.CameraProjectionType * ?Camera: LayoutObjects.Camera * ?Projection: TraceObjects.Projection * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'a3 :> System.IConvertible)
static member Chart.Scatter3D: x: seq<#System.IConvertible> * y: seq<#System.IConvertible> * z: seq<#System.IConvertible> * mode: StyleParam.Mode * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'd * ?MultiText: seq<'d> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: StyleParam.MarkerSymbol3D * ?MultiMarkerSymbol: seq<StyleParam.MarkerSymbol3D> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: StyleParam.Colorscale * ?LineWidth: float * ?LineDash: StyleParam.DrawingStyle * ?Line: Line * ?CameraProjectionType: StyleParam.CameraProjectionType * ?Camera: LayoutObjects.Camera * ?Projection: TraceObjects.Projection * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'd :> System.IConvertible)
property System.Array.Length: int with get
<summary>Gets the total number of elements in all the dimensions of the <see cref="T:System.Array" />.</summary>
<exception cref="T:System.OverflowException">The array is multidimensional and contains more than <see cref="F:System.Int32.MaxValue" /> elements.</exception>
<returns>The total number of elements in all the dimensions of the <see cref="T:System.Array" />; zero if there are no elements in the array.</returns>
val mutable rndgen: Random.IRandom
<summary>The uniform random source used for sampling functions.</summary>
<remarks></remarks>
<param name="rndgen"></param>
<returns></returns>
<example><code></code></example>
module StyleParam from Plotly.NET
type Mode = | None | Lines | Lines_Markers | Lines_Text | Lines_Markers_Text | Markers | Markers_Text | Text member Convert: unit -> obj override ToString: unit -> string static member convert: (Mode -> obj) static member toString: (Mode -> string)
union case StyleParam.Mode.Markers: StyleParam.Mode
val mvnChart: GenericChart.GenericChart
static member Chart.combine: gCharts: seq<GenericChart.GenericChart> -> GenericChart.GenericChart
val studentTParams: (float * float * float) list
val xStudentT: float list
val pdfStudentT: mu: float -> tau: float -> dof: float -> (float * float) list
val mu: float
val tau: float
val dof: float
type StudentT = static member CDF: mu: float -> tau: float -> dof: float -> x: float -> float static member CheckParam: mu: float -> tau: float -> dof: float -> unit static member Init: mu: float -> tau: float -> dof: float -> ContinuousDistribution<float,float> static member InvCDF: mu: float -> tau: float -> dof: float -> x: 'a0 -> 'a1 static member Mean: mu: float -> tau: float -> dof: float -> float static member Mode: mu: float -> tau: float -> dof: float -> float static member PDF: mu: float -> tau: float -> dof: float -> x: float -> float static member Sample: mu: float -> tau: float -> dof: float -> float static member StandardDeviation: mu: float -> tau: float -> dof: float -> float static member Support: mu: float -> tau: float -> dof: float -> Interval<float> ...
<summary> Student's T-distribution </summary>
static member Continuous.StudentT.PDF: mu: float -> tau: float -> dof: float -> x: float -> float
val zip: list1: 'T1 list -> list2: 'T2 list -> ('T1 * 'T2) list
<summary>Combines the two lists into a list of pairs. The two lists must have equal lengths.</summary>
<param name="list1">The first input list.</param>
<param name="list2">The second input list.</param>
<returns>A single list containing pairs of matching elements from the input lists.</returns>
<example id="zip-1"><code lang="fsharp"> let numbers = [1; 2] let names = ["one"; "two"] List.zip numbers names </code> Evaluates to <c>[(1, "one"); (2, "two")]</c>. </example>
val cdfStudentT: mu: float -> tau: float -> dof: float -> (float * float) list
static member Continuous.StudentT.CDF: mu: float -> tau: float -> dof: float -> x: float -> float
val v: GenericChart.GenericChart
static member Chart.Spline: xy: seq<#System.IConvertible * #System.IConvertible> * ?ShowMarkers: bool * ?Smoothing: float * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'c * ?MultiText: seq<'c> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: StyleParam.MarkerSymbol * ?MultiMarkerSymbol: seq<StyleParam.MarkerSymbol> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: StyleParam.Colorscale * ?LineWidth: float * ?LineDash: StyleParam.DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: StyleParam.Orientation * ?GroupNorm: StyleParam.GroupNorm * ?Fill: StyleParam.Fill * ?FillColor: Color * ?FillPattern: TraceObjects.Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible)
static member Chart.Spline: x: seq<#System.IConvertible> * y: seq<#System.IConvertible> * ?ShowMarkers: bool * ?Smoothing: float * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: StyleParam.MarkerSymbol * ?MultiMarkerSymbol: seq<StyleParam.MarkerSymbol> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: StyleParam.Colorscale * ?LineWidth: float * ?LineDash: StyleParam.DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: StyleParam.Orientation * ?GroupNorm: StyleParam.GroupNorm * ?Fill: StyleParam.Fill * ?FillColor: Color * ?FillPattern: TraceObjects.Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'a2 :> System.IConvertible)
val sprintf: format: Printf.StringFormat<'T> -> 'T
<summary>Print to a string using the given format.</summary>
<param name="format">The formatter.</param>
<returns>The formatted result.</returns>
<example>See <c>Printf.sprintf</c> (link: <see cref="M:Microsoft.FSharp.Core.PrintfModule.PrintFormatToStringThen``1" />) for examples.</example>
val fParams: (float * float) list
val xF: float list
val pdfF: a: float -> b: float -> (float * float) list
val a: float
val b: float
type F = static member CDF: dof1: float -> dof2: float -> x: float -> float static member CheckParam: dof1: float -> dof2: float -> unit static member Init: dof1: float -> dof2: float -> ContinuousDistribution<float,float> static member InvCDF: dof1: float -> dof2: float -> x: float -> 'a0 static member Mean: dof1: float -> dof2: float -> float static member Mode: dof1: float -> dof2: float -> float static member PDF: dof1: float -> dof2: float -> x: float -> float static member Sample: dof1: float -> dof2: float -> float static member StandardDeviation: dof1: float -> dof2: float -> float static member Support: dof1: float -> Interval<float> ...
<summary> F-distribution </summary>
static member Continuous.F.PDF: dof1: float -> dof2: float -> x: float -> float
val fPDFs: GenericChart.GenericChart
static member Chart.Line: xy: seq<#System.IConvertible * #System.IConvertible> * ?ShowMarkers: bool * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'c * ?MultiText: seq<'c> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: StyleParam.MarkerSymbol * ?MultiMarkerSymbol: seq<StyleParam.MarkerSymbol> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: StyleParam.Colorscale * ?LineWidth: float * ?LineDash: StyleParam.DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: StyleParam.Orientation * ?GroupNorm: StyleParam.GroupNorm * ?Fill: StyleParam.Fill * ?FillColor: Color * ?FillPattern: TraceObjects.Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible)
static member Chart.Line: x: seq<#System.IConvertible> * y: seq<#System.IConvertible> * ?ShowMarkers: bool * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: StyleParam.MarkerSymbol * ?MultiMarkerSymbol: seq<StyleParam.MarkerSymbol> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: StyleParam.Colorscale * ?LineWidth: float * ?LineDash: StyleParam.DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: StyleParam.Orientation * ?GroupNorm: StyleParam.GroupNorm * ?Fill: StyleParam.Fill * ?FillColor: Color * ?FillPattern: TraceObjects.Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'a2 :> System.IConvertible)
val cdfF: a: float -> b: float -> (float * float) list
static member Continuous.F.CDF: dof1: float -> dof2: float -> x: float -> float
val fCDFs: GenericChart.GenericChart
val bernoulli: DiscreteDistribution<float,int>
namespace FSharp.Stats.Distributions.Discrete
type Bernoulli = static member CDF: p: float -> x: float -> float static member CheckParam: p: float -> unit static member Estimate: observations: float[] * ?weights: float[] -> DiscreteDistribution<float,int> static member Fit: observations: float[] * ?weights: float[] -> float static member Init: p: float -> DiscreteDistribution<float,int> static member InvCDF: p: float -> x: 'a0 -> 'a1 static member Mean: p: float -> float static member Mode: p: float -> int static member PMF: p: float -> x: int -> float static member Sample: p: float -> int ...
<summary> Bernoulli distribution. </summary>
static member Discrete.Bernoulli.Init: p: float -> DiscreteDistribution<float,int>
val bernA: float
property Distribution.Mean: float with get
val bernB: float
abstract DiscreteDistribution.PMF: 'b -> float
val plotBernoulli: GenericChart.GenericChart
val x: int
static member Chart.Column: keysValues: seq<#System.IConvertible * #System.IConvertible> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'c * ?MultiText: seq<'c> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerPatternShape: StyleParam.PatternShape * ?MultiMarkerPatternShape: seq<StyleParam.PatternShape> * ?MarkerPattern: TraceObjects.Pattern * ?Marker: TraceObjects.Marker * ?Base: #System.IConvertible * ?Width: 'e * ?MultiWidth: seq<'e> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible and 'e :> System.IConvertible)
static member Chart.Column: values: seq<#System.IConvertible> * ?Keys: seq<'a1> * ?MultiKeys: seq<seq<'a1>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerPatternShape: StyleParam.PatternShape * ?MultiMarkerPatternShape: seq<StyleParam.PatternShape> * ?MarkerPattern: TraceObjects.Pattern * ?Marker: TraceObjects.Marker * ?Base: #System.IConvertible * ?Width: 'a4 * ?MultiWidth: seq<'a4> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'a1 :> System.IConvertible and 'a2 :> System.IConvertible and 'a4 :> System.IConvertible)
val binomial: DiscreteDistribution<float,int>
type Binomial = static member CDF: p: float -> n: int -> x: float -> float static member CheckParam: p: float -> n: int -> unit static member Estimate: n: int -> observations: float[] -> DiscreteDistribution<float,int> static member Fit: n: int -> observations: float[] -> float static member Init: p: float -> n: int -> DiscreteDistribution<float,int> static member InvCDF: p: float -> n: int -> x: float -> 'a0 static member Mean: p: float -> n: int -> float static member Mode: p: float -> n: int -> int static member PMF: p: float -> n: int -> k: int -> float static member Sample: p: float -> n: int -> int ...
<summary> Binomial distribution </summary>
static member Discrete.Binomial.Init: p: float -> n: int -> DiscreteDistribution<float,int>
val binoA: float
val binoB: float
val binoC: float
val plotBinomial: GenericChart.GenericChart
val hyper: DiscreteDistribution<float,int>
type Hypergeometric = static member CDF: N: int -> K: int -> n: int -> x: float -> float static member CheckParam: N: int -> K: int -> n: int -> unit static member CheckParam_k: N: int -> K: int -> n: int -> k: int -> unit static member Init: N: int -> K: int -> n: int -> DiscreteDistribution<float,int> static member InvCDF: dof1: 'a0 -> dof2: 'a1 -> p: 'a2 -> 'a3 static member Mean: N: int -> K: int -> n: int -> float static member Mode: N: int -> K: int -> n: int -> int static member PMF: N: int -> K: int -> n: int -> k: int -> float static member Sample: N: int -> K: int -> n: int -> int static member StandardDeviation: N: int -> K: int -> n: int -> float ...
<summary> Hypergeometric distribution </summary>
static member Discrete.Hypergeometric.Init: N: int -> K: int -> n: int -> DiscreteDistribution<float,int>
val hypA: float
val hypB: int
abstract DiscreteDistribution.Sample: unit -> 'b
val hypC: float
val hypD: float
val plotHyper: GenericChart.GenericChart
val poisson: DiscreteDistribution<float,int>
type Poisson = static member CDF: lambda: float -> k: float -> float static member CheckParam: lambda: float -> unit static member Entropy: lambda: float -> float static member Estimate: observations: float[] * ?weights: float[] -> DiscreteDistribution<float,int> static member Fit: observations: float[] * ?weights: float[] -> float static member Init: lambda: float -> DiscreteDistribution<float,int> static member InvCDF: lambda: float -> k: 'a0 -> 'a1 static member Mean: lambda: float -> float static member Mode: lambda: float -> int static member PMF: lambda: float -> k: int -> float ...
<summary> Poisson distribution </summary>
static member Discrete.Poisson.Init: lambda: float -> DiscreteDistribution<float,int>
val poA: float
val poB: float
val sumBy: projection: ('T -> 'U) -> list: 'T list -> 'U (requires member (+) and member get_Zero)
<summary>Returns the sum of the results generated by applying the function to each element of the list.</summary>
<param name="projection">The function to transform the list elements into the type to be summed.</param>
<param name="list">The input list.</param>
<returns>The resulting sum.</returns>
<example id="sumby-1"><code lang="fsharp"> let input = [ "aa"; "bbb"; "cc" ] input |&gt; List.sumBy (fun s -&gt; s.Length) </code> Evaluates to <c>7</c>. </example>
val poC: float
val plotPo: GenericChart.GenericChart
val gammaParams: (float * float) list
val xgamma: float list
val pdfGamma: a: float -> b: float -> (float * float) list
type Gamma = static member CDF: alpha: float -> beta: float -> x: float -> float static member CheckParam: alpha: float -> beta: float -> unit static member Estimate: observations: float[] * ?maxIter: int * ?tolerance: float -> ContinuousDistribution<float,float> static member Fit: observations: float[] * ?maxIter: int * ?tolerance: float -> float * float static member FromMean: alpha: float -> mean: float -> ContinuousDistribution<float,float> static member FromRate: shape: float -> rate: float -> ContinuousDistribution<float,float> static member Init: alpha: float -> beta: float -> ContinuousDistribution<float,float> static member InvCDF: alpha: float -> beta: float -> x: 'a0 -> 'a1 static member Mean: alpha: float -> beta: float -> float static member Mode: alpha: float -> beta: float -> float ...
<summary> Gamma distribution Sampling implementation based on: "A Simple Method for Generating Gamma Variables" - Marsaglia &amp; Tsang ACM Transactions on Mathematical Software, Vol. 26, No. 3, September 2000, Pages 363-372. alpha = shape (k) beta = scale || 1 / rate (θ) </summary>
static member Continuous.Gamma.PDF: alpha: float -> beta: float -> x: float -> float
val gammaPlot: GenericChart.GenericChart
static member Chart.Point: xy: seq<#System.IConvertible * #System.IConvertible> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'c * ?MultiText: seq<'c> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: StyleParam.MarkerSymbol * ?MultiMarkerSymbol: seq<StyleParam.MarkerSymbol> * ?Marker: TraceObjects.Marker * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: StyleParam.Orientation * ?GroupNorm: StyleParam.GroupNorm * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible)
static member Chart.Point: x: seq<#System.IConvertible> * y: seq<#System.IConvertible> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: StyleParam.MarkerSymbol * ?MultiMarkerSymbol: seq<StyleParam.MarkerSymbol> * ?Marker: TraceObjects.Marker * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: StyleParam.Orientation * ?GroupNorm: StyleParam.GroupNorm * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'a2 :> System.IConvertible)
val cdfGamma: a: float -> b: float -> (float * float) list
static member Continuous.Gamma.CDF: alpha: float -> beta: float -> x: float -> float
val gammaCDFPlot: GenericChart.GenericChart
val p: float
val r: int
val k: int
val negB_A: float
type NegativeBinomial_trials = static member CDF: r: int -> p: float -> x: float -> float static member CheckParam: r: int -> p: float -> unit static member Init: r: int -> p: float -> DiscreteDistribution<float,int> static member InvCDF: r: int -> p: float -> x: 'a0 -> 'a1 static member Mean: r: int -> p: float -> float static member Mode: r: int -> p: float -> int static member PMF: r: int -> p: float -> x: int -> float static member PMFLn: r: int -> p: float -> x: int -> float static member Sample: r: int -> p: float -> 'a0 static member SampleUnchecked: r: 'a0 -> p: 'a1 -> 'a2 ...
<summary> The distribution of the number of trials needed (x) to get the rth success in repeated independent bernoulli trials with individual probability p. </summary>
static member Discrete.NegativeBinomial_trials.PMF: r: int -> p: float -> x: int -> float
val negB_B: float
type NegativeBinomial_failures = static member CDF: r: int -> p: float -> k: float -> float static member CheckParam: r: int -> p: float -> unit static member Init: r: int -> p: float -> DiscreteDistribution<float,int> static member InvCDF: r: int -> p: float -> k: 'a0 -> 'a1 static member Mean: r: int -> p: float -> float static member Mode: r: int -> p: float -> int static member PMF: r: int -> p: float -> k: int -> float static member PMFLn: r: int -> p: float -> k: int -> float static member Sample: r: int -> p: float -> 'a0 static member SampleUnchecked: r: 'a0 -> p: 'a1 -> 'a2 ...
<summary> The distribution of the number of failures (k) before the rth success in repeated independent bernoulli trials with individual probability p. </summary>
static member Discrete.NegativeBinomial_failures.PMF: r: int -> p: float -> k: int -> float
val negBinom_trials: DiscreteDistribution<float,int>
static member Discrete.NegativeBinomial_trials.Init: r: int -> p: float -> DiscreteDistribution<float,int>
val negBinom_failures: DiscreteDistribution<float,int>
static member Discrete.NegativeBinomial_failures.Init: r: int -> p: float -> DiscreteDistribution<float,int>
val pmfComparison: GenericChart.GenericChart
val pmfs_trials: (int * float) list
val pmfs_failures: (int * float) list
static member Chart.withLayoutStyle: ?Title: Title * ?ShowLegend: bool * ?Legend: LayoutObjects.Legend * ?Margin: LayoutObjects.Margin * ?AutoSize: bool * ?Width: int * ?Height: int * ?Font: Font * ?UniformText: LayoutObjects.UniformText * ?Separators: string * ?PaperBGColor: Color * ?PlotBGColor: Color * ?AutoTypeNumbers: StyleParam.AutoTypeNumbers * ?Colorscale: LayoutObjects.DefaultColorScales * ?Colorway: Color * ?ModeBar: LayoutObjects.ModeBar * ?HoverMode: StyleParam.HoverMode * ?ClickMode: StyleParam.ClickMode * ?DragMode: StyleParam.DragMode * ?SelectDirection: StyleParam.SelectDirection * ?ActiveSelection: LayoutObjects.ActiveSelection * ?NewSelection: LayoutObjects.NewSelection * ?HoverDistance: int * ?SpikeDistance: int * ?Hoverlabel: LayoutObjects.Hoverlabel * ?Transition: LayoutObjects.Transition * ?DataRevision: string * ?UIRevision: string * ?EditRevision: string * ?SelectRevision: string * ?Template: DynamicObj.DynamicObj * ?Meta: string * ?Computed: string * ?Grid: LayoutObjects.LayoutGrid * ?Calendar: StyleParam.Calendar * ?MinReducedHeight: int * ?MinReducedWidth: int * ?NewShape: LayoutObjects.NewShape * ?ActiveShape: LayoutObjects.ActiveShape * ?HideSources: bool * ?ScatterGap: float * ?ScatterMode: StyleParam.ScatterMode * ?BarGap: float * ?BarGroupGap: float * ?BarMode: StyleParam.BarMode * ?BarNorm: StyleParam.BarNorm * ?ExtendPieColors: bool * ?HiddenLabels: seq<#System.IConvertible> * ?PieColorWay: Color * ?BoxGap: float * ?BoxGroupGap: float * ?BoxMode: StyleParam.BoxMode * ?ViolinGap: float * ?ViolinGroupGap: float * ?ViolinMode: StyleParam.ViolinMode * ?WaterfallGap: float * ?WaterfallGroupGap: float * ?WaterfallMode: StyleParam.WaterfallMode * ?FunnelGap: float * ?FunnelGroupGap: float * ?FunnelMode: StyleParam.FunnelMode * ?ExtendFunnelAreaColors: bool * ?FunnelAreaColorWay: Color * ?ExtendSunBurstColors: bool * ?SunBurstColorWay: Color * ?ExtendTreeMapColors: bool * ?TreeMapColorWay: Color * ?ExtendIcicleColors: bool * ?IcicleColorWay: Color * ?Annotations: seq<LayoutObjects.Annotation> * ?Shapes: seq<LayoutObjects.Shape> * ?Selections: seq<LayoutObjects.Selection> * ?Images: seq<LayoutObjects.LayoutImage> * ?Sliders: seq<LayoutObjects.Slider> * ?UpdateMenus: seq<LayoutObjects.UpdateMenu> -> (GenericChart.GenericChart -> GenericChart.GenericChart)
type BarMode = | Stack | Group | Overlay | Relative member Convert: unit -> obj override ToString: unit -> string static member convert: (BarMode -> obj) static member toString: (BarMode -> string)
<summary> For bar and histogram plots only. This sets how multiple bar objects are plotted together. In other words, this defines how bars at the same location appear on the plot. If set to 'stack' the bars are stacked on top of one another. If set to 'group', the bars are plotted next to one another, centered around the shared location. If set to 'overlay', the bars are simply plotted over one another, you may need to set the opacity to see this. </summary>
union case StyleParam.BarMode.Overlay: StyleParam.BarMode
static member Chart.withXAxisStyle: ?TitleText: string * ?TitleFont: Font * ?TitleStandoff: int * ?Title: Title * ?Color: Color * ?AxisType: StyleParam.AxisType * ?MinMax: (#System.IConvertible * #System.IConvertible) * ?Mirror: StyleParam.Mirror * ?ShowSpikes: bool * ?SpikeColor: Color * ?SpikeThickness: int * ?ShowLine: bool * ?LineColor: Color * ?ShowGrid: bool * ?GridColor: Color * ?GridDash: StyleParam.DrawingStyle * ?ZeroLine: bool * ?ZeroLineColor: Color * ?Anchor: StyleParam.LinearAxisId * ?Side: StyleParam.Side * ?Overlaying: StyleParam.LinearAxisId * ?Domain: (float * float) * ?Position: float * ?CategoryOrder: StyleParam.CategoryOrder * ?CategoryArray: seq<#System.IConvertible> * ?RangeSlider: LayoutObjects.RangeSlider * ?RangeSelector: LayoutObjects.RangeSelector * ?BackgroundColor: Color * ?ShowBackground: bool * ?Id: StyleParam.SubPlotId -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.withYAxisStyle: ?TitleText: string * ?TitleFont: Font * ?TitleStandoff: int * ?Title: Title * ?Color: Color * ?AxisType: StyleParam.AxisType * ?MinMax: (#System.IConvertible * #System.IConvertible) * ?Mirror: StyleParam.Mirror * ?ShowSpikes: bool * ?SpikeColor: Color * ?SpikeThickness: int * ?ShowLine: bool * ?LineColor: Color * ?ShowGrid: bool * ?GridColor: Color * ?GridDash: StyleParam.DrawingStyle * ?ZeroLine: bool * ?ZeroLineColor: Color * ?Anchor: StyleParam.LinearAxisId * ?Side: StyleParam.Side * ?Overlaying: StyleParam.LinearAxisId * ?AutoShift: bool * ?Shift: int * ?Domain: (float * float) * ?Position: float * ?CategoryOrder: StyleParam.CategoryOrder * ?CategoryArray: seq<#System.IConvertible> * ?RangeSlider: LayoutObjects.RangeSlider * ?RangeSelector: LayoutObjects.RangeSelector * ?BackgroundColor: Color * ?ShowBackground: bool * ?Id: StyleParam.SubPlotId -> (GenericChart.GenericChart -> GenericChart.GenericChart)
val cdfComparison: GenericChart.GenericChart
val cdfs_trials: (int * float) list
val cdfs_failures: (int * float) list
val multiNomProb: Vector<float>
val multiNomKs: Vector<int>
Multiple items
module Vector from FSharp.Stats

--------------------
type Vector<'T> = interface IEnumerable interface IEnumerable<'T> interface IStructuralEquatable interface IStructuralComparable interface IComparable new: opsV: INumeric<'T> option * arrV: 'T array -> Vector<'T> override Equals: yobj: obj -> bool override GetHashCode: unit -> int member GetSlice: start: int option * finish: int option -> Vector<'T> member Permute: p: permutation -> Vector<'T> ...

--------------------
new: opsV: INumeric<'T> option * arrV: 'T array -> Vector<'T>
module Generic from FSharp.Stats.VectorModule
val ofList: list: 'a list -> Vector<'a>
<summary>Creates vector from list xss</summary>
<remarks></remarks>
<param name="list"></param>
<returns></returns>
<example><code></code></example>
val mNom: float
type Multinomial = static member CDF: p: vector -> n: int -> x: float -> 'a0 static member CheckParam: p: vector -> n: int -> unit static member Mean: p: vector -> n: int -> Vector<float> static member PMF: p: vector -> x: Vector<int> -> float static member PMF_Unchecked: p: vector -> x: Vector<int> -> float static member Sample: p: vector -> n: int -> 'a0 static member StandardDeviation: p: vector -> n: int -> Vector<float> static member Support: p: vector -> n: int -> Vector<Interval<int>> static member ToString: p: vector -> n: int -> string static member Variance: p: vector -> n: int -> Vector<float>
static member Discrete.Multinomial.PMF: p: vector -> x: Vector<int> -> float
val mNom_bin_A: float
static member Discrete.Binomial.PMF: p: float -> n: int -> k: int -> float
val mNom_bin_B: float
val ofArray: array: 'a[] -> Vector<'a>
val sampleDistribution: seq<float>
val template: ContinuousDistribution<float,float>
val empiricalDistribution: Map<float,float>
Multiple items
type EmpiricalDistribution = new: unit -> EmpiricalDistribution static member create: bandwidth: float -> (seq<float> -> Map<float,float>) static member createNominal: ?Template: Set<'a> * ?Transform: ('a -> 'a) -> (seq<'a> -> Map<'a,float>) (requires comparison)

--------------------
new: unit -> EmpiricalDistribution
static member EmpiricalDistribution.create: bandwidth: float -> (seq<float> -> Map<float,float>)
val plotEmpirical: GenericChart.GenericChart
module Empirical from FSharp.Stats.Distributions
<summary> Represents a probability mass function (map from values to probabilities). </summary>
val getZip: pmf: Map<'a,float> -> seq<'a * float> (requires comparison)
<summary>Returns: tuple of (sorted value sequence, probability sequence)</summary>
<remarks></remarks>
<param name="pmf"></param>
<returns></returns>
<example><code></code></example>
val myText: string
val mySmallAlphabet: Set<char>
Multiple items
module Set from Microsoft.FSharp.Collections
<summary>Contains operations for working with values of type <see cref="T:Microsoft.FSharp.Collections.FSharpSet`1" />.</summary>

--------------------
type Set<'T (requires comparison)> = interface IReadOnlyCollection<'T> interface IComparable interface IEnumerable interface IEnumerable<'T> interface ICollection<'T> new: elements: seq<'T> -> Set<'T> member Add: value: 'T -> Set<'T> member Contains: value: 'T -> bool override Equals: obj -> bool member IsProperSubsetOf: otherSet: Set<'T> -> bool ...
<summary>Immutable sets based on binary trees, where elements are ordered by F# generic comparison. By default comparison is the F# structural comparison function or uses implementations of the IComparable interface on element values.</summary>
<remarks>See the <see cref="T:Microsoft.FSharp.Collections.SetModule" /> module for further operations on sets. All members of this class are thread-safe and may be used concurrently from multiple threads.</remarks>


--------------------
new: elements: seq<'T> -> Set<'T>
val ofSeq: elements: seq<'T> -> Set<'T> (requires comparison)
<summary>Builds a new collection from the given enumerable object.</summary>
<param name="elements">The input sequence.</param>
<returns>The set containing <c>elements</c>.</returns>
<example id="set-ofseq"><code lang="fsharp"> let set = Set.ofSeq [1, 2, 3] printfn $"The set is {set} and type is {set.GetType().Name}" </code> The sample evaluates to the following output: <c>The set is set [(1, 2, 3)] and type is "FSharpSet`1"</c></example>
val myAlphabet: Set<char>
val myAlphabetNum: Set<char>
val myFrequencies0: Map<char,float>
static member EmpiricalDistribution.createNominal: ?Template: Set<'a> * ?Transform: ('a -> 'a) -> (seq<'a> -> Map<'a,float>) (requires comparison)
val myFrequencies1: Map<char,float>
Multiple items
type Template = inherit DynamicObj new: unit -> Template static member init: layoutTemplate: Layout * ?TraceTemplates: seq<#Trace> -> Template static member mapLayoutTemplate: styleF: (Layout -> Layout) -> template: Template -> Template static member mapTraceTemplates: styleF: (#Trace[] -> #Trace[]) -> template: Template -> Template static member style: layoutTemplate: Layout * ?TraceTemplates: seq<#Trace> -> (Template -> Template) static member withColorWay: colorway: Color -> template: Template -> Template

--------------------
new: unit -> Template
val myFrequencies2: Map<char,float>
val myFrequencies3: Map<char,float>
val myFrequencies4: Map<char,float>
namespace System
[<Struct>] type Char = member CompareTo: value: char -> int + 1 overload member Equals: obj: char -> bool + 1 overload member GetHashCode: unit -> int member GetTypeCode: unit -> TypeCode member ToString: unit -> string + 2 overloads static member ConvertFromUtf32: utf32: int -> string static member ConvertToUtf32: highSurrogate: char * lowSurrogate: char -> int + 1 overload static member GetNumericValue: c: char -> float + 1 overload static member GetUnicodeCategory: c: char -> UnicodeCategory + 1 overload static member IsAscii: c: char -> bool ...
<summary>Represents a character as a UTF-16 code unit.</summary>
System.Char.ToLower(c: char) : char
System.Char.ToLower(c: char, culture: System.Globalization.CultureInfo) : char
val categoricalDistribution: GenericChart.GenericChart
Multiple items
module Map from FSharp.Stats
<summary> Module to strore specialised computations on maps </summary>

--------------------
module Map from Microsoft.FSharp.Collections
<summary>Contains operations for working with values of type <see cref="T:Microsoft.FSharp.Collections.FSharpMap`2" />.</summary>

--------------------
type Map<'Key,'Value (requires comparison)> = interface IReadOnlyDictionary<'Key,'Value> interface IReadOnlyCollection<KeyValuePair<'Key,'Value>> interface IEnumerable interface IComparable interface IEnumerable<KeyValuePair<'Key,'Value>> interface ICollection<KeyValuePair<'Key,'Value>> interface IDictionary<'Key,'Value> new: elements: seq<'Key * 'Value> -> Map<'Key,'Value> member Add: key: 'Key * value: 'Value -> Map<'Key,'Value> member Change: key: 'Key * f: ('Value option -> 'Value option) -> Map<'Key,'Value> ...
<summary>Immutable maps based on binary trees, where keys are ordered by F# generic comparison. By default comparison is the F# structural comparison function or uses implementations of the IComparable interface on key values.</summary>
<remarks>See the <see cref="T:Microsoft.FSharp.Collections.MapModule" /> module for further operations on maps. All members of this class are thread-safe and may be used concurrently from multiple threads.</remarks>


--------------------
new: elements: seq<'Key * 'Value> -> Map<'Key,'Value>
val toArray: table: Map<'Key,'T> -> ('Key * 'T)[] (requires comparison)
<summary>Returns an array of all key-value pairs in the mapping. The array will be ordered by the keys of the map.</summary>
<param name="table">The input map.</param>
<returns>The array of key/value pairs.</returns>
<example id="toarray-1"><code lang="fsharp"> let input = Map [ (1, "a"); (2, "b") ] input |&gt; Map.toArray // evaluates to [|(1, "a"); (2, "b")|] </code></example>
static member Chart.Grid: ?SubPlots: (StyleParam.LinearAxisId * StyleParam.LinearAxisId)[][] * ?XAxes: StyleParam.LinearAxisId[] * ?YAxes: StyleParam.LinearAxisId[] * ?RowOrder: StyleParam.LayoutGridRowOrder * ?Pattern: StyleParam.LayoutGridPattern * ?XGap: float * ?YGap: float * ?Domain: LayoutObjects.Domain * ?XSide: StyleParam.LayoutGridXSide * ?YSide: StyleParam.LayoutGridYSide -> (#seq<'a1> -> GenericChart.GenericChart) (requires 'a1 :> seq<GenericChart.GenericChart>)
static member Chart.Grid: nRows: int * nCols: int * ?SubPlots: (StyleParam.LinearAxisId * StyleParam.LinearAxisId)[][] * ?XAxes: StyleParam.LinearAxisId[] * ?YAxes: StyleParam.LinearAxisId[] * ?RowOrder: StyleParam.LayoutGridRowOrder * ?Pattern: StyleParam.LayoutGridPattern * ?XGap: float * ?YGap: float * ?Domain: LayoutObjects.Domain * ?XSide: StyleParam.LayoutGridXSide * ?YSide: StyleParam.LayoutGridYSide -> (#seq<GenericChart.GenericChart> -> GenericChart.GenericChart)
val a: Map<string,int>
val ofList: elements: ('Key * 'T) list -> Map<'Key,'T> (requires comparison)
<summary>Returns a new map made from the given bindings.</summary>
<param name="elements">The input list of key/value pairs.</param>
<returns>The resulting map.</returns>
<example id="oflist-1"><code lang="fsharp"> let input = [ (1, "a"); (2, "b") ] input |&gt; Map.ofList // evaluates to map [(1, "a"); (2, "b")] </code></example>
val b: Map<string,int>
val mergedDist: Map<string,int>
val merge: equalBandwidthOrNominal: bool -> histA: Map<'a,'value> -> histB: Map<'a,'value> -> Map<'a,'value> (requires comparison)
<summary>Merges two maps into a single map. If a key exists in both maps, the value in histA is superseded by the value in histB.</summary>
<param name="equalBandwidthOrNominal">Is the binwidth equal for both distributions? For nominal data set to true.</param>
<param name="histA">Empirical distribution A</param>
<param name="histB">Empirical distribution B</param>
<remarks>When applied to continuous data the bandwidths must be equal!</remarks>
<remarks>This function is not commutative! (merge a b) is not equal to (merge b a)</remarks>
<returns>New frequency map that results from merged maps histA and histB.</returns>
val addedDist: Map<string,int>
val add: equalBandwidthOrNominal: bool -> histA: Map<'a,'value> -> histB: Map<'a,'value> -> Map<'a,'value> (requires comparison and member (+))
<summary>Merges two maps into a single map. If a key exists in both maps, the value from mapB is added to the value of mapA.</summary>
<param name="equalBandwidthOrNominal">Is the binwidth equal for both distributions? For nominal data set to true.</param>
<param name="histA">Empirical distribution A</param>
<param name="histB">Empirical distribution B</param>
<remarks>When applied to continuous data the bandwidths must be equal!</remarks>
<remarks>This function is not commutative! (add a b) is not equal to (add b a)</remarks>
<returns>New frequency map that results from merged maps histA and histB. Values from keys that are present in both maps are handled by f</returns>
val customDist: Map<string,int>
val mergeBy: equalBandwidthOrNominal: bool -> f: ('value -> 'value -> 'value) -> histA: Map<'a,'value> -> histB: Map<'a,'value> -> Map<'a,'value> (requires comparison)
<summary>Merges two maps into a single map. If a key exists in both maps, the value is determined by f with the first value being from mapA and the second originating from mapB.</summary>
<param name="equalBandwidthOrNominal">Is the binwidth equal for both distributions? For nominal data set to true.</param>
<param name="f">Function to transform values if key is present in both histograms. `histA-value → histB-value → newValue`</param>
<param name="mapA">Empirical distribution A</param>
<param name="mapB">Empirical distribution B</param>
<remarks>When applied to continuous data the bandwidths must be equal!</remarks>
<remarks>This function is not commutative! (mergeBy f a b) is not equal to (mergeBy f b a)</remarks>
<returns>New frequency map that results from merged maps mapA and mapB. Values from keys that are present in both maps are handled by f</returns>
val valueA: int
val valueB: int
val nv: float[]
static member Continuous.Normal.Sample: mu: float -> sigma: float -> float
val xy: (float * float)[]
module KernelDensity from FSharp.Stats.Distributions
<summary> Module to perform Kernel density estimation </summary>
val estimate: kernel: KernelDensity.DensityKernel -> bandwidth: float -> data: float array -> (float * float)[]
module Kernel from FSharp.Stats.Distributions.KernelDensity
val gaussian: bw: float -> x: float -> float
<summary>Gausian kernel</summary>
<remarks></remarks>
<param name="bw"></param>
<param name="x"></param>
<returns></returns>
<example><code></code></example>
val kernelChart: GenericChart.GenericChart
static member Chart.SplineArea: xy: seq<#System.IConvertible * #System.IConvertible> * ?ShowMarkers: bool * ?Smoothing: float * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'c * ?MultiText: seq<'c> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: StyleParam.MarkerSymbol * ?MultiMarkerSymbol: seq<StyleParam.MarkerSymbol> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: StyleParam.Colorscale * ?LineWidth: float * ?LineDash: StyleParam.DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: StyleParam.Orientation * ?GroupNorm: StyleParam.GroupNorm * ?FillColor: Color * ?FillPatternShape: StyleParam.PatternShape * ?FillPattern: TraceObjects.Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible)
static member Chart.SplineArea: x: seq<#System.IConvertible> * y: seq<#System.IConvertible> * ?ShowMarkers: bool * ?Smoothing: float * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?TextPosition: StyleParam.TextPosition * ?MultiTextPosition: seq<StyleParam.TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: StyleParam.MarkerSymbol * ?MultiMarkerSymbol: seq<StyleParam.MarkerSymbol> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: StyleParam.Colorscale * ?LineWidth: float * ?LineDash: StyleParam.DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: StyleParam.Orientation * ?GroupNorm: StyleParam.GroupNorm * ?FillColor: Color * ?FillPatternShape: StyleParam.PatternShape * ?FillPattern: TraceObjects.Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'a2 :> System.IConvertible)
val distribution1: float[]
val distribution2: float[]
val distribution3: float[]
val pilesOfDirt: GenericChart.GenericChart
static member Chart.Histogram: data: seq<#System.IConvertible> * orientation: StyleParam.Orientation * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?Text: 'a1 * ?MultiText: seq<'a1> * ?HistFunc: StyleParam.HistFunc * ?HistNorm: StyleParam.HistNorm * ?AlignmentGroup: string * ?OffsetGroup: string * ?NBinsX: int * ?NBinsY: int * ?BinGroup: string * ?XBins: TraceObjects.Bins * ?YBins: TraceObjects.Bins * ?MarkerColor: Color * ?Marker: TraceObjects.Marker * ?Line: Line * ?XError: TraceObjects.Error * ?YError: TraceObjects.Error * ?Cumulative: TraceObjects.Cumulative * ?HoverLabel: LayoutObjects.Hoverlabel * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'a1 :> System.IConvertible)
static member Chart.Histogram: ?X: seq<'a> * ?MultiX: seq<seq<'a>> * ?Y: seq<'b> * ?MultiY: seq<seq<'b>> * ?Orientation: StyleParam.Orientation * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?Text: 'c * ?MultiText: seq<'c> * ?TextPosition: StyleParam.TextPosition * ?HistFunc: StyleParam.HistFunc * ?HistNorm: StyleParam.HistNorm * ?AlignmentGroup: string * ?OffsetGroup: string * ?NBinsX: int * ?NBinsY: int * ?BinGroup: string * ?XBins: TraceObjects.Bins * ?YBins: TraceObjects.Bins * ?MarkerColor: Color * ?MarkerColorScale: StyleParam.Colorscale * ?MarkerOutline: Line * ?MarkerPatternShape: StyleParam.PatternShape * ?MultiMarkerPatternShape: seq<StyleParam.PatternShape> * ?MarkerPattern: TraceObjects.Pattern * ?Marker: TraceObjects.Marker * ?Line: Line * ?XError: TraceObjects.Error * ?YError: TraceObjects.Error * ?Cumulative: TraceObjects.Cumulative * ?HoverLabel: LayoutObjects.Hoverlabel * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'a :> System.IConvertible and 'b :> System.IConvertible and 'c :> System.IConvertible)
val distance1and2: float
module Distance from FSharp.Stats.Distributions
<summary> Module to compute Distances between Distributions </summary>
module OneDimensional from FSharp.Stats.Distributions.Distance
<summary> Module to compute Distances between 1D Distributions </summary>
val wassersteinDistance: xs: float[] -> ys: float[] -> float
<summary>Wasserstein distance between two 1D distributions</summary>
<remarks></remarks>
<param name="xs"></param>
<param name="ys"></param>
<returns></returns>
<example><code></code></example>
val distance1and3: float
val distributions: float[][]
val mapColor: min: float -> max: float -> value: float -> Color
val min: float
val max: float
val value: float
val proportionR: int
Multiple items
val int: value: 'T -> int (requires member op_Explicit)
<summary>Converts the argument to signed 32-bit integer. This is a direct conversion for all primitive numeric types. For strings, the input is converted using <c>Int32.Parse()</c> with InvariantCulture settings. Otherwise the operation requires an appropriate static conversion method on the input type.</summary>
<param name="value">The input value.</param>
<returns>The converted int</returns>
<example id="int-example"><code lang="fsharp"></code></example>


--------------------
[<Struct>] type int = int32
<summary>An abbreviation for the CLI type <see cref="T:System.Int32" />.</summary>
<category>Basic Types</category>


--------------------
type int<'Measure> = int
<summary>The type of 32-bit signed integer numbers, annotated with a unit of measure. The unit of measure is erased in compiled code and when values of this type are analyzed using reflection. The type is representationally equivalent to <see cref="T:System.Int32" />.</summary>
<category>Basic Types with Units of Measure</category>
val proportionG: int
val proportionB: int
type Color = override Equals: other: obj -> bool override GetHashCode: unit -> int static member fromARGB: a: int -> r: int -> g: int -> b: int -> Color static member fromColorScaleValues: c: seq<#IConvertible> -> Color static member fromColors: c: seq<Color> -> Color static member fromHex: s: string -> Color static member fromKeyword: c: ColorKeyword -> Color static member fromRGB: r: int -> g: int -> b: int -> Color static member fromString: c: string -> Color member Value: obj
<summary> Plotly color can be a single color, a sequence of colors, or a sequence of numeric values referencing the color of the colorscale obj </summary>
static member Color.fromARGB: a: int -> r: int -> g: int -> b: int -> Color
val distancesTable: GenericChart.GenericChart
val headerColors: Color
static member Color.fromString: c: string -> Color
static member Color.fromColors: c: seq<Color> -> Color
val distances: string[][]
val transpose: arrays: seq<'T[]> -> 'T[][]
<summary>Returns the transpose of the given sequence of arrays.</summary>
<param name="arrays">The input sequence of arrays.</param>
<returns>The transposed array.</returns>
<exception cref="T:System.ArgumentNullException">Thrown when the input sequence is null.</exception>
<exception cref="T:System.ArgumentException">Thrown when the input arrays differ in length.</exception>
<example id="transpose-1"><code lang="fsharp"> let inputs = [| [| 10; 20; 30 |] [| 11; 21; 31 |] |] inputs |&gt; Array.transpose </code> Evaluates to <c>[|[|10; 11|]; [|20; 21|]; [|30; 31|]|]</c>. </example>
val append: array1: 'T[] -> array2: 'T[] -> 'T[]
<summary>Builds a new array that contains the elements of the first array followed by the elements of the second array.</summary>
<param name="array1">The first input array.</param>
<param name="array2">The second input array.</param>
<returns>The resulting array.</returns>
<exception cref="T:System.ArgumentNullException">Thrown when either of the input arrays is null.</exception>
<example id="append-1"><code lang="fsharp"> Array.append [| 1; 2 |] [| 3; 4 |] </code> Evaluates to <c>[| 1; 2; 3; 4 |]</c>. </example>
val cellColors: Color
val mapi: mapping: (int -> 'T -> 'U) -> array: 'T[] -> 'U[]
<summary>Builds a new array whose elements are the results of applying the given function to each of the elements of the array. The integer index passed to the function indicates the index of element being transformed, starting at zero.</summary>
<param name="mapping">The function to transform elements and their indices.</param>
<param name="array">The input array.</param>
<returns>The array of transformed elements.</returns>
<exception cref="T:System.ArgumentNullException">Thrown when the input array is null.</exception>
<example id="mapi-1"><code lang="fsharp"> let inputs = [| 10; 10; 10 |] inputs |&gt; Array.mapi (fun i x -&gt; i + x) </code> Evaluates to <c>[| 10; 11; 12 |]</c></example>
val i: int
val a: string[]
val j: int
val v: string
static member Color.fromHex: s: string -> Color
Multiple items
val float: value: 'T -> float (requires member op_Explicit)
<summary>Converts the argument to 64-bit float. This is a direct conversion for all primitive numeric types. For strings, the input is converted using <c>Double.Parse()</c> with InvariantCulture settings. Otherwise the operation requires an appropriate static conversion method on the input type.</summary>
<param name="value">The input value.</param>
<returns>The converted float</returns>
<example id="float-example"><code lang="fsharp"></code></example>


--------------------
[<Struct>] type float = System.Double
<summary>An abbreviation for the CLI type <see cref="T:System.Double" />.</summary>
<category>Basic Types</category>


--------------------
type float<'Measure> = float
<summary>The type of double-precision floating point numbers, annotated with a unit of measure. The unit of measure is erased in compiled code and when values of this type are analyzed using reflection. The type is representationally equivalent to <see cref="T:System.Double" />.</summary>
<category index="6">Basic Types with Units of Measure</category>
val map: mapping: ('T -> 'U) -> source: seq<'T> -> seq<'U>
<summary>Builds a new collection whose elements are the results of applying the given function to each of the elements of the collection. The given function will be applied as elements are demanded using the <c>MoveNext</c> method on enumerators retrieved from the object.</summary>
<remarks>The returned sequence may be passed between threads safely. However, individual IEnumerator values generated from the returned sequence should not be accessed concurrently.</remarks>
<param name="mapping">A function to transform items from the input sequence.</param>
<param name="source">The input sequence.</param>
<returns>The result sequence.</returns>
<exception cref="T:System.ArgumentNullException">Thrown when the input sequence is null.</exception>
<example id="item-1"><code lang="fsharp"> let inputs = ["a"; "bbb"; "cc"] inputs |&gt; Seq.map (fun x -&gt; x.Length) </code> Evaluates to a sequence yielding the same results as <c>seq { 1; 3; 2 }</c></example>
static member Chart.Table: header: TraceObjects.TableHeader * cells: TraceObjects.TableCells * ?Name: string * ?ColumnOrder: seq<int> * ?ColumnWidth: float * ?MultiColumnWidth: seq<float> * ?UseDefaults: bool -> GenericChart.GenericChart
static member Chart.Table: headerValues: seq<#seq<'b>> * cellsValues: seq<#seq<'d>> * ?TransposeCells: bool * ?HeaderAlign: StyleParam.HorizontalAlign * ?HeaderMultiAlign: seq<StyleParam.HorizontalAlign> * ?HeaderFillColor: Color * ?HeaderHeight: int * ?HeaderOutlineColor: Color * ?HeaderOutlineWidth: float * ?HeaderOutlineMultiWidth: seq<float> * ?HeaderOutline: Line * ?CellsAlign: StyleParam.HorizontalAlign * ?CellsMultiAlign: seq<StyleParam.HorizontalAlign> * ?CellsFillColor: Color * ?CellsHeight: int * ?CellsOutlineColor: Color * ?CellsOutlineWidth: float * ?CellsOutlineMultiWidth: seq<float> * ?CellsOutline: Line * ?Name: string * ?ColumnOrder: seq<int> * ?ColumnWidth: float * ?MultiColumnWidth: seq<float> * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'b :> System.IConvertible and 'd :> System.IConvertible)