@ -31,6 +31,7 @@
namespace MathNet.Numerics.UnitTests.DistributionTests.Multivariate
{
using System ;
using System.Linq ;
using MbUnit.Framework ;
using Distributions ;
using Statistics ;
@ -103,6 +104,65 @@ namespace MathNet.Numerics.UnitTests.DistributionTests.Multivariate
Assert . AreEqual < string > ( "Multinomial(Dimension = 3, Number of Trails = 4)" , b . ToString ( ) ) ;
}
[Test]
[Row(new[] { 0.3 , 0.7 } , 5 , new [ ] { 0.390360029179413 , - 0.390360029179413 } ) ]
[Row(new[] { 0.1 , 0.3 , 0.6 } , 1 0 , new [ ] { 0.843274042711568 , 0.276026223736942 , - 0.129099444873581 } ) ]
[Row(new[] { 0.15 , 0.35 , 0.3 , 0.2 } , 2 0 , new [ ] { 0.438357003759605 , 0.140642169281549 , 0.195180014589707 , 0.335410196624968 } ) ]
public void ValidateSkewness ( double [ ] p , int n , double [ ] res )
{
var b = new Multinomial ( p , n ) ;
for ( var i = 0 ; i < b . P . Length ; i + + )
{
AssertHelpers . AlmostEqual ( res [ i ] , b . Skewness [ i ] , 1 2 ) ;
}
}
[Test]
[Row(new[] { 0.3 , 0.7 } , 5 , new [ ] { 1.05 , 1.05 } ) ]
[Row(new[] { 0.1 , 0.3 , 0.6 } , 1 0 , new [ ] { 0.9 , 2.1 , 2.4 } ) ]
[Row(new[] { 0.15 , 0.35 , 0.3 , 0.2 } , 2 0 , new [ ] { 2.55 , 4.55 , 4.2 , 3.2 } ) ]
public void ValidateVariance ( double [ ] p , int n , double [ ] res )
{
var b = new Multinomial ( p , n ) ;
for ( var i = 0 ; i < b . P . Length ; i + + )
{
AssertHelpers . AlmostEqual ( res [ i ] , b . Variance [ i ] , 1 2 ) ;
}
}
[Test]
[Row(new[] { 0.3 , 0.7 } , 5 , new [ ] { 1.5 , 3.5 } ) ]
[Row(new[] { 0.1 , 0.3 , 0.6 } , 1 0 , new [ ] { 1.0 , 3.0 , 6.0 } ) ]
[Row(new[] { 0.15 , 0.35 , 0.3 , 0.2 } , 2 0 , new [ ] { 3.0 , 7.0 , 6.0 , 4.0 } ) ]
public void ValidateMean ( double [ ] p , int n , double [ ] res )
{
var b = new Multinomial ( p , n ) ;
for ( var i = 0 ; i < b . P . Length ; i + + )
{
AssertHelpers . AlmostEqual ( res [ i ] , b . Mean [ i ] , 1 2 ) ;
}
}
[Test]
[Row(new[] { 0.3 , 0.7 } , new [ ] { 1 , 9 } , 0.121060821 ) ]
[Row(new[] { 0.1 , 0.3 , 0.6 } , new [ ] { 1 , 3 , 6 } , 0.105815808 ) ]
[Row(new[] { 0.15 , 0.35 , 0.3 , 0.2 } , new [ ] { 1 , 1 , 1 , 7 } , 0.000145152 ) ]
public void ValidateProbability ( double [ ] p , int [ ] x , double res )
{
var b = new Multinomial ( p , x . Sum ( ) ) ;
AssertHelpers . AlmostEqual ( b . Probability ( x ) , res , 1 2 ) ;
}
[Test]
[Row(new[] { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } ) ]
[Row(new[] { 1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 } ) ]
[Row(new[] { 5 , 6 , 7 , 8 , 7 , 6 , 5 , 4 , 3 } ) ]
public void ValidateProbabilityLn ( int [ ] x )
{
var b = new Multinomial ( largeP , x . Sum ( ) ) ;
AssertHelpers . AlmostEqual ( b . ProbabilityLn ( x ) , Math . Log ( b . Probability ( x ) ) , 1 2 ) ;
}
[Test]
public void CanSetProbability ( )
{