public void ConstructorTest4()
{
// Create a multivariate Gaussian distribution
var dist = new MultivariateNormalDistribution
(
// mean vector mu
mean: new double[] { 4, 2 },
// covariance matrix sigma
covariance: new double[,]
{
{ 0.3, 0.1 },
{ 0.1, 0.7 }
}
);
// Common measures
double[] mean = dist.Mean; // { 4, 2 }
double[] median = dist.Median; // { 4, 2 }
double[] mode = dist.Mode; // { 4, 2 }
double[,] cov = dist.Covariance; // { { 0.3, 0.1 }, { 0.1, 0.7 } }
double[] var = dist.Variance; // { 0.3, 0.7 } (diagonal from cov)
int dimensions = dist.Dimension; // 2
// Probability density functions
double pdf1 = dist.ProbabilityDensityFunction(2, 5); // 0.000000018917884164743237
double pdf2 = dist.ProbabilityDensityFunction(4, 2); // 0.35588127170858852
double pdf3 = dist.ProbabilityDensityFunction(3, 7); // 0.000000000036520107734505265
double lpdf = dist.LogProbabilityDensityFunction(3, 7); // -24.033158110192296
// Cumulative distribution function (for up to two dimensions)
double cdf = dist.DistributionFunction(3, 5); // 0.033944035782101534
double ccdf = dist.ComplementaryDistributionFunction(3, 5); // 0.00016755510356109232
// compared against R package mnormt: install.packages("mnormt")
// pmnorm(c(3,5), mean=c(4,2), varcov=matrix(c(0.3,0.1,0.1,0.7), 2,2))
Assert.AreEqual(4, mean[0]);
Assert.AreEqual(2, mean[1]);
Assert.AreEqual(4, mode[0]);
Assert.AreEqual(2, mode[1]);
Assert.AreEqual(4, median[0]);
Assert.AreEqual(2, median[1]);
Assert.AreEqual(0.3, var[0]);
Assert.AreEqual(0.7, var[1]);
Assert.AreEqual(0.3, cov[0, 0]);
Assert.AreEqual(0.1, cov[0, 1]);
Assert.AreEqual(0.1, cov[1, 0]);
Assert.AreEqual(0.7, cov[1, 1]);
Assert.AreEqual(0.000000018917884164743237, pdf1, 1e-10);
Assert.AreEqual(0.35588127170858852, pdf2, 1e-10);
Assert.AreEqual(0.000000000036520107734505265, pdf3, 1e-10);
Assert.AreEqual(-24.033158110192296, lpdf, 1e-10);
Assert.AreEqual(0.033944035782101534, cdf, 1e-10);
}