public void CanCreateInverseWishart(double nu, int order)
        {
            var matrix = Matrix<double>.Build.RandomPositiveDefinite(order, 1);
            var d = new InverseWishart(nu, matrix);

            Assert.AreEqual(nu, d.DegreesOfFreedom);
            for (var i = 0; i < d.Scale.RowCount; i++)
            {
                for (var j = 0; j < d.Scale.ColumnCount; j++)
                {
                    Assert.AreEqual(matrix[i, j], d.Scale[i, j]);
                }
            }
        }
 public void CanSample()
 {
     var d = new InverseWishart(1.0, Matrix<double>.Build.RandomPositiveDefinite(2, 1));
     d.Sample();
 }
        public void ValidateVariance(double nu, int order)
        {
            var d = new InverseWishart(nu, Matrix<double>.Build.RandomPositiveDefinite(order, 1));

            var variance = d.Variance;
            for (var i = 0; i < d.Scale.RowCount; i++)
            {
                for (var j = 0; j < d.Scale.ColumnCount; j++)
                {
                    var num1 = ((nu - d.Scale.RowCount + 1) * d.Scale[i, j] * d.Scale[i, j]) + ((nu - d.Scale.RowCount - 1) * d.Scale[i, i] * d.Scale[j, j]);
                    var num2 = (nu - d.Scale.RowCount) * (nu - d.Scale.RowCount - 1) * (nu - d.Scale.RowCount - 1) * (nu - d.Scale.RowCount - 3);
                    Assert.AreEqual(num1 / num2, variance[i, j]);
                }
            }
        }
        public void ValidateDensity(double nu, double density)
        {
            var matrix = Matrix<double>.Build.Dense(1, 1, 1.0);
            var x = Matrix<double>.Build.Dense(1, 1, 5.0);

            var d = new InverseWishart(nu, matrix);
            AssertHelpers.AlmostEqualRelative(density, d.Density(x), 16);
        }
        public void CanGetS()
        {
            const int Order = 2;
            var matrix = Matrix<double>.Build.RandomPositiveDefinite(Order, 1);
            var d = new InverseWishart(1.0, matrix);

            for (var i = 0; i < Order; i++)
            {
                for (var j = 0; j < Order; j++)
                {
                    Assert.AreEqual(matrix[i, j], d.Scale[i, j]);
                }
            }
        }
        public void ValidateMode(double nu, int order)
        {
            var d = new InverseWishart(nu, Matrix<double>.Build.RandomPositiveDefinite(order, 1));

            var mode = d.Mode;
            for (var i = 0; i < d.Scale.RowCount; i++)
            {
                for (var j = 0; j < d.Scale.ColumnCount; j++)
                {
                    Assert.AreEqual(d.Scale[i, j] * (1.0 / (nu + d.Scale.RowCount + 1.0)), mode[i, j]);
                }
            }
        }
 public void CanGetNu(double nu)
 {
     var d = new InverseWishart(nu, Matrix<double>.Build.RandomPositiveDefinite(2, 1));
     Assert.AreEqual(nu, d.DegreesOfFreedom);
 }
 public void ValidateToString()
 {
     var d = new InverseWishart(1d, Matrix<double>.Build.RandomPositiveDefinite(2, 1));
     Assert.AreEqual("InverseWishart(ν = 1, Rows = 2, Columns = 2)", d.ToString());
 }
 public void HasRandomSourceEvenAfterSetToNull()
 {
     var d = new InverseWishart(1.0, Matrix<double>.Build.RandomPositiveDefinite(2, 1));
     Assert.DoesNotThrow(() => d.RandomSource = null);
     Assert.IsNotNull(d.RandomSource);
 }
Пример #10
0
 public void HasRandomSource()
 {
     var d = new InverseWishart(1.0, Matrix<double>.Build.RandomPositiveDefinite(2, 1));
     Assert.IsNotNull(d.RandomSource);
 }
Пример #11
0
        public void ValidateDensity(double nu, double density)
        {
            const int Order = 1;
            var matrix = new DenseMatrix(Order);
            matrix[0, 0] = 1;

            var x = new DenseMatrix(Order);
            x[0, 0] = 5;

            var d = new InverseWishart(nu, matrix);
            AssertHelpers.AlmostEqualRelative(density, d.Density(x), 16);
        }