|
| 1 | + |
| 2 | +@testitem "MvNormalMeanScaleMatrixPrecision" begin |
| 3 | + using ReactiveMP, Random, BayesBase, ExponentialFamily, LinearAlgebra |
| 4 | + |
| 5 | + @testset "AverageEnergy" begin |
| 6 | + begin |
| 7 | + q_out = PointMass([1.0, 1.0]) |
| 8 | + q_μ = MvNormalMeanPrecision([1.0, 1.0], [1.0 0.0; 0.0 1.0]) |
| 9 | + q_γ = GammaShapeRate(1.0, 1.0) |
| 10 | + q_G = Wishart(ndims(q_out) + 2, [1.0 0.0; 0.0 1.0]) |
| 11 | + # m_μ, Cov_μ = mean_cov(q_μ) |
| 12 | + # m_out, Cov_out = mean_cov(q_out) |
| 13 | + # AE = - div(ndims(q_μ),2) * mean(log,q_γ) - 0.5*mean(logdet, q_G) + div(ndims(q_μ),2)*log(2pi) + 0.5*tr(mean(q_γ)*mean(q_G)*( Cov_out + Cov_μ + (m_out - m_μ)*(m_out - m_μ)')) |
| 14 | + |
| 15 | + for N in (MvNormalMeanPrecision, MvNormalMeanCovariance, MvNormalWeightedMeanPrecision), g in (Gamma,), M in (Wishart,) |
| 16 | + marginals = ( |
| 17 | + Marginal(q_out, false, false, nothing), |
| 18 | + Marginal(convert(N, q_μ), false, false, nothing), |
| 19 | + Marginal(convert(g, q_γ), false, false, nothing), |
| 20 | + Marginal(convert(M, q_G), false, false, nothing) |
| 21 | + ) |
| 22 | + @test score(AverageEnergy(), MvNormalMeanScaleMatrixPrecision, Val{(:out, :μ, :γ, :G)}(), marginals, nothing) ≈ 5.49230839621241 |
| 23 | + end |
| 24 | + end |
| 25 | + |
| 26 | + begin |
| 27 | + q_out = MvNormalMeanPrecision([0.8625589157256603, 0.6694783342639599], [1.0014322413749484 0.7989099036521625; 0.7989099036521625 1.0976639268696966]) |
| 28 | + q_μ = MvNormalMeanPrecision([0.9334416739853251, 0.38318522701093105], [0.21867945696266933 0.5704895781120056; 0.5704895781120056 1.5321190185800933]) |
| 29 | + q_γ = Gamma(2.0, 1.0) |
| 30 | + q_G = Wishart(ndims(q_out) + 2, 0.25*[1.0 0.0; 0.0 1.0]) |
| 31 | + # m_μ, Cov_μ = mean_cov(q_μ) |
| 32 | + # m_out, Cov_out = mean_cov(q_out) |
| 33 | + # AE = - div(ndims(q_μ),2) * mean(log,q_γ) - 0.5*mean(logdet, q_G) + div(ndims(q_μ),2)*log(2pi) + 0.5*tr(mean(q_γ)*mean(q_G)*( Cov_out + Cov_μ + (m_out - m_μ)*(m_out - m_μ)')) |
| 34 | + |
| 35 | + for N1 in (MvNormalMeanPrecision, MvNormalMeanCovariance, MvNormalWeightedMeanPrecision), |
| 36 | + N2 in (MvNormalMeanPrecision, MvNormalMeanCovariance, MvNormalWeightedMeanPrecision), g in (Gamma,), |
| 37 | + M in (Wishart,) |
| 38 | + |
| 39 | + marginals = ( |
| 40 | + Marginal(convert(N1, q_out), false, false, nothing), |
| 41 | + Marginal(convert(N2, q_μ), false, false, nothing), |
| 42 | + Marginal(convert(g, q_γ), false, false, nothing), |
| 43 | + Marginal(convert(M, q_G), false, false, nothing) |
| 44 | + ) |
| 45 | + @test score(AverageEnergy(), MvNormalMeanScaleMatrixPrecision, Val{(:out, :μ, :γ, :G)}(), marginals, nothing) ≈ 189.18709448153223 |
| 46 | + end |
| 47 | + end |
| 48 | + |
| 49 | + begin |
| 50 | + q_out_μ = MvNormalMeanPrecision( |
| 51 | + [0.2932046487282065, 0.7716085147100042, 0.03978072440454361, 0.2814883836121471], |
| 52 | + [ |
| 53 | + 1.0684808331872628 0.6721958601342372 0.7164104160110533 0.2869444930570181 |
| 54 | + 0.6721958601342372 1.4472786772965438 1.3516272546828385 0.5533932426057602 |
| 55 | + 0.7164104160110533 1.3516272546828385 1.2958919150214063 0.5171784879755998 |
| 56 | + 0.2869444930570181 0.5533932426057602 0.5171784879755998 0.30898006058959576 |
| 57 | + ] |
| 58 | + ) |
| 59 | + d = div(ndims(q_out_μ), 2) |
| 60 | + q_γ = GammaShapeRate(3.0, 2.0) |
| 61 | + q_G = Wishart(d + 2, 0.25*[0.349811 0.318591; 0.318591 0.401713]) |
| 62 | + # m_out_μ, Cov_out_μ = mean_cov(q_out_μ) |
| 63 | + # m_out, m_μ = @views m_out_μ[1:d], m_out_μ[(d + 1):end] |
| 64 | + # Cov_out, Cov_μ = @views Cov_out_μ[1:d, 1:d], Cov_out_μ[(d + 1):end, (d + 1):end] |
| 65 | + # Cov_out_out, Cov_μ_μ = @views Cov_out_μ[1:d, (d + 1):end], Cov_out_μ[(d + 1):end, 1:d] |
| 66 | + # AE = - div(ndims(q_μ),2) * mean(log,q_γ) - 0.5*mean(logdet, q_G) + div(ndims(q_μ),2)*log(2pi) + 0.5*tr(mean(q_γ)*mean(q_G)*( Cov_out + Cov_μ - Cov_out_out - Cov_μ_μ + (m_out - m_μ)*(m_out - m_μ)')) |
| 67 | + |
| 68 | + for N in (MvNormalMeanPrecision, MvNormalMeanCovariance, MvNormalWeightedMeanPrecision) |
| 69 | + marginals = (Marginal(convert(N, q_out_μ), false, false, nothing), Marginal(q_γ, false, false, nothing), Marginal(q_G, false, false, nothing)) |
| 70 | + @test score(AverageEnergy(), MvNormalMeanScaleMatrixPrecision, Val{(:out_μ, :γ, :G)}(), marginals, nothing) ≈ 57.01394241406646 |
| 71 | + end |
| 72 | + end |
| 73 | + |
| 74 | + begin |
| 75 | + q_out_μ = MvNormalMeanPrecision( |
| 76 | + [0.35156676223859784, 0.6798203100143094, 0.954485919235333, 0.9236981452828203], |
| 77 | + [ |
| 78 | + 1.3182839156957349 0.9159049032047119 1.170482409249098 1.132202025059748 |
| 79 | + 0.9159049032047119 1.4737964254194567 1.4024254322343757 0.7350293025705011 |
| 80 | + 1.170482409249098 1.4024254322343757 2.0577570913647105 1.3137472032115916 |
| 81 | + 1.132202025059748 0.7350293025705011 1.3137472032115916 1.2083880803032556 |
| 82 | + ] |
| 83 | + ) |
| 84 | + q_γ = GammaShapeRate(4.0, 3.0) |
| 85 | + q_G = Wishart(ndims(q_out) + 2, 0.25*[5.60439 4.34489; 4.34489 3.69273]) |
| 86 | + # m_out_μ, Cov_out_μ = mean_cov(q_out_μ) |
| 87 | + # m_out, m_μ = @views m_out_μ[1:d], m_out_μ[(d + 1):end] |
| 88 | + # Cov_out, Cov_μ = @views Cov_out_μ[1:d, 1:d], Cov_out_μ[(d + 1):end, (d + 1):end] |
| 89 | + # Cov_out_out, Cov_μ_μ = @views Cov_out_μ[1:d, (d + 1):end], Cov_out_μ[(d + 1):end, 1:d] |
| 90 | + # AE = - div(ndims(q_μ),2) * mean(log,q_γ) - 0.5*mean(logdet, q_G) + div(ndims(q_μ),2)*log(2pi) + 0.5*tr(mean(q_γ)*mean(q_G)*( Cov_out + Cov_μ - Cov_out_out - Cov_μ_μ + (m_out - m_μ)*(m_out - m_μ)')) |
| 91 | + |
| 92 | + for N in (MvNormalMeanPrecision, MvNormalMeanCovariance, MvNormalWeightedMeanPrecision) |
| 93 | + marginals = (Marginal(convert(N, q_out_μ), false, false, nothing), Marginal(q_γ, false, false, nothing), Marginal(q_G, false, false, nothing)) |
| 94 | + @test score(AverageEnergy(), MvNormalMeanScaleMatrixPrecision, Val{(:out_μ, :γ, :G)}(), marginals, nothing) ≈ 60.58871007449749 |
| 95 | + end |
| 96 | + end |
| 97 | + end |
| 98 | +end |
0 commit comments