Skip to content

Commit

Permalink
reinstate test/conjugates_mvnormal.jl
Browse files Browse the repository at this point in the history
  • Loading branch information
lindahua committed Nov 5, 2014
1 parent 0949428 commit 9171feb
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 18 deletions.
2 changes: 1 addition & 1 deletion src/Distributions.jl
Expand Up @@ -90,7 +90,7 @@ export
MultivariateNormal,
MvNormal,
MvNormalCanon,
MvNormalKnownSigma,
MvNormalKnownCov,
MvTDist,
NegativeBinomial,
NoncentralBeta,
Expand Down
18 changes: 9 additions & 9 deletions src/conjugates/mvnormal.jl
Expand Up @@ -7,21 +7,21 @@ function posterior_canon(prior::MvNormal, ss::MvNormalKnownCovStats)
μ0 = prior.μ
invΣp = pdadd(invΣ0, ss.invΣ, ss.tw)
h = add!(invΣ0 * μ0, ss.invΣ * ss.sx)
return GenericMvNormalCanon(h, invΣp)
return MvNormalCanon(h, invΣp)
end

function posterior_canon{Pri<:MvNormal,Cov<:AbstractPDMat}(
prior::(Pri, Cov),
G::Type{MvNormal{Cov}},
G::Type{MvNormal},
x::Matrix)

μpri::Pri, Σ::Cov = prior
posterior_canon(μpri, suffstats(MvNormalKnownSigma{Cov}(Σ), x))
posterior_canon(μpri, suffstats(MvNormalKnownCov{Cov}(Σ), x))
end

function posterior_canon{Pri<:MvNormal,Cov<:AbstractPDMat}(
prior::(Pri, Cov),
G::Type{MvNormal{Cov}},
G::Type{MvNormal},
x::Matrix, w::Array{Float64})

μpri::Pri, Σ::Cov = prior
Expand All @@ -30,22 +30,22 @@ end

function posterior{Pri<:MvNormal,Cov<:AbstractPDMat}(
prior::(Pri, Cov),
G::Type{MvNormal{Cov}},
G::Type{MvNormal},
x::Matrix)

convert(Pri, posterior_canon(prior, G, x))
meanform(posterior_canon(prior, G, x))
end

function posterior{Pri<:MvNormal,Cov<:AbstractPDMat}(
prior::(Pri, Cov),
G::Type{MvNormal{Cov}},
G::Type{MvNormal},
x::Matrix, w::Array{Float64})

convert(Pri, posterior_canon(prior, G, x, w))
meanform(posterior_canon(prior, G, x, w))
end

function complete{Pri<:MvNormal,Cov<:AbstractPDMat}(
G::Type{MvNormal{Cov}},
G::Type{MvNormal},
pri::(Pri, Cov),
μ::Vector{Float64})

Expand Down
3 changes: 3 additions & 0 deletions src/multivariate/mvnormal.jl
Expand Up @@ -142,6 +142,9 @@ immutable MvNormalKnownCov{Cov<:AbstractPDMat}
end

MvNormalKnownCov{Cov<:AbstractPDMat}(C::Cov) = MvNormalKnownCov{Cov}(C)
MvNormalKnownCov(d::Int, σ::Real) = MvNormalKnownCov(ScalMat(d, abs2(float64(σ))))
MvNormalKnownCov::Vector{Float64}) = MvNormalKnownCov(PDiagMat(abs2(σ)))
MvNormalKnownCov::Matrix{Float64}) = MvNormalKnownCov(PDMat(Σ))

length(g::MvNormalKnownCov) = dim(g.Σ)

Expand Down
14 changes: 7 additions & 7 deletions test/conjugates_mvnormal.jl
Expand Up @@ -12,8 +12,8 @@ w = rand(n)
Xw = X * diagm(w)

Sigma = 0.75 * eye(p) + fill(0.25, 4, 4)
ss = suffstats(MvNormalKnownSigma(Sigma), X)
ssw = suffstats(MvNormalKnownSigma(Sigma), X, w)
ss = suffstats(MvNormalKnownCov(Sigma), X)
ssw = suffstats(MvNormalKnownCov(Sigma), X, w)

s_t = sum(X, 2)
ws_t = sum(Xw, 2)
Expand All @@ -38,17 +38,17 @@ X = rand(MultivariateNormal(mu_true, Sig_true), n)

pri = MultivariateNormal(mu0, Sig0)

post = posterior((pri, Sig_true), MultivariateNormal, X)
@test isa(post, MultivariateNormal)
post = posterior((pri, Sig_true), MvNormal, X)
@test isa(post, FullNormal)

@test_approx_eq post.μ inv(inv(Sig0) + n*inv(Sig_true))*(n*inv(Sig_true)*mean(X,2) + inv(Sig0)*mu0)
@test_approx_eq post.Σ.mat inv(inv(Sig0) + n*inv(Sig_true))

# posterior_sample

ps = posterior_randmodel((pri, Sig_true), MultivariateNormal, X)
ps = posterior_randmodel((pri, Sig_true), MvNormal, X)

@test isa(ps, MultivariateNormal)
@test isa(ps, FullNormal)
@test insupport(ps, ps.μ)
@test insupport(InverseWishart, ps.Σ.mat)

Expand Down Expand Up @@ -89,7 +89,7 @@ mu_true = [2., 2.]
Lam_true = eye(2)
Lam_true[1,2] = Lam_true[2,1] = 0.25

X = rand(MultivariateNormal(mu_true, inv(Lam_true)), n)
X = rand(MvNormal(mu_true, inv(Lam_true)), n)
Xbar = mean(X,2)
Xm = X .- Xbar

Expand Down
2 changes: 1 addition & 1 deletion test/runtests.jl
Expand Up @@ -16,7 +16,7 @@ tests = [
"compoundvariate",
"conjugates",
"conjugates_normal",
# "conjugates_mvnormal",
"conjugates_mvnormal",
"wishart",
"mixture",
"gradlogpdf"]
Expand Down

0 comments on commit 9171feb

Please sign in to comment.