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); }
public void HasRandomSource() { var d = new InverseWishart(1.0, Matrix<double>.Build.RandomPositiveDefinite(2, 1)); Assert.IsNotNull(d.RandomSource); }
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); }