Skip to content

Commit 42eca54

Browse files
committed
add some test
1 parent 899f1f5 commit 42eca54

1 file changed

Lines changed: 56 additions & 49 deletions

File tree

test/fit_test.jl

Lines changed: 56 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ V[2] = [j ≥ i ? i * (n - j + 1) : j * (n - i + 1) for i in 1:n, j in 1:n]
2020
StatsBase.cov2cor!(V[2], [sqrt(V[2][i, i]) for i in 1:n])
2121
V[3] = Matrix(UniformScaling(1.0), n, n)
2222
# true parameter values
23-
B_true = 2rand(p, d) # uniform on [0, 2]
23+
B_true = 2 * rand(p, d) # uniform on [0, 2]
2424
Σ_true = [
2525
Matrix(UniformScaling(0.2), d, d),
2626
Matrix(UniformScaling(0.2), d, d),
@@ -35,70 +35,77 @@ Y = reshape(y, n, d)
3535

3636
model = MRVCModel(Y, X, V)
3737

38-
@testset "fit! (full rank) by MLE with MM" begin
39-
@time history = MRVCModels.fit!(model, algo = :MM, maxiter = 100)
40-
println("B_true:")
41-
display(B_true)
42-
println()
43-
println("B̂:")
44-
display(model.B)
45-
println()
38+
@testset "fit! by MLE with MM" begin
39+
@time MRVCModels.fit!(model, algo = :MM, verbose = false, maxiter = 100)
40+
println("||B_true - B̂|| = $(norm(B_true - model.B))")
4641
for k in 1:m
47-
println("||Σ_true[$k] - Σ̂[$k]||=$(norm(Σ_true[k] - model.Σ[k]))")
48-
println()
42+
println("||Σ_true[$k] - Σ̂[$k]|| = $(norm(Σ_true[k] - model.Σ[k]))")
4943
end
50-
display(history)
51-
println()
5244
end
5345

54-
@testset "fit! (full rank) by MLE with EM" begin
55-
@time history = MRVCModels.fit!(model, algo = :EM, maxiter = 100)
56-
println("B_true:")
57-
display(B_true)
58-
println()
59-
println("B̂:")
60-
display(model.B)
61-
println()
46+
@testset "fit! by MLE with EM" begin
47+
@time MRVCModels.fit!(model, algo = :EM, verbose = false, maxiter = 100)
48+
println("||B_true - B̂|| = $(norm(B_true - model.B))")
6249
for k in 1:m
63-
println("||Σ_true[$k] - Σ̂[$k]||=$(norm(Σ_true[k] - model.Σ[k]))")
64-
println()
50+
println("||Σ_true[$k] - Σ̂[$k]|| = $(norm(Σ_true[k] - model.Σ[k]))")
6551
end
66-
display(history)
67-
println()
6852
end
6953

7054
model = MRVCModel(Y, X, V; reml = true)
7155

72-
@testset "fit! (full rank) by REML with MM" begin
73-
@time history = MRVCModels.fit!(model, algo = :MM, maxiter = 100)
74-
println("B_true:")
75-
display(B_true)
76-
println()
77-
println("B̂:")
78-
display(model.B_reml)
79-
println()
56+
@testset "fit! by REML with MM" begin
57+
@time MRVCModels.fit!(model, algo = :MM, verbose = false, maxiter = 100)
58+
println("||B_true - B̂|| = $(norm(B_true - model.B_reml))")
8059
for k in 1:m
81-
println("||Σ_true[$k] - Σ̂[$k]||=$(norm(Σ_true[k] - model.Σ[k]))")
82-
println()
60+
println("||Σ_true[$k] - Σ̂[$k]|| = $(norm(Σ_true[k] - model.Σ[k]))")
8361
end
84-
display(history)
85-
println()
8662
end
8763

88-
@testset "fit! (full rank) by REML with EM" begin
89-
@time history = MRVCModels.fit!(model, algo = :EM, maxiter = 100)
90-
println("B_true:")
91-
display(B_true)
92-
println()
93-
println("B̂:")
94-
display(model.B_reml)
95-
println()
64+
@testset "fit! by REML with EM" begin
65+
@time MRVCModels.fit!(model, algo = :EM, verbose = false, maxiter = 100)
66+
println("||B_true - B̂|| = $(norm(B_true - model.B_reml))")
9667
for k in 1:m
97-
println("||Σ_true[$k] - Σ̂[$k]||=$(norm(Σ_true[k] - model.Σ[k]))")
98-
println()
68+
println("||Σ_true[$k] - Σ̂[$k]|| = $(norm(Σ_true[k] - model.Σ[k]))")
69+
end
70+
end
71+
72+
m = 2
73+
# V[1] has entries i * (n - j + 1) for j ≥ i, then scaled to be a correlation matrix
74+
# V[2] is identity
75+
V = Vector{Matrix{Float64}}(undef, m)
76+
V[1] = [j i ? i * (n - j + 1) : j * (n - i + 1) for i in 1:n, j in 1:n]
77+
StatsBase.cov2cor!(V[1], [sqrt(V[1][i, i]) for i in 1:n])
78+
V[2] = Matrix(UniformScaling(1.0), n, n)
79+
# true parameter values
80+
Σ_true = [
81+
Matrix(UniformScaling(0.2), d, d),
82+
Matrix(UniformScaling(0.6), d, d)
83+
]
84+
Ω_true = zeros(n * d, n * d)
85+
for k in 1:m
86+
Ω_true .+= kron(Σ_true[k], V[k])
87+
end
88+
y = vec(X * B_true) + cholesky(Symmetric(Ω_true)).L * randn(rng, n * d)
89+
Y = reshape(y, n, d)
90+
91+
model = MRTVCModel(Y, X, V)
92+
93+
@testset "fit! two component by MLE with MM" begin
94+
@time MRVCModels.fit!(model, algo = :MM, verbose = false, maxiter = 100)
95+
println("||B_true - B̂|| = $(norm(B_true - model.B))")
96+
for k in 1:m
97+
println("||Σ_true[$k] - Σ̂[$k]|| = $(norm(Σ_true[k] - model.Σ[k]))")
98+
end
99+
end
100+
101+
model = MRTVCModel(Y, X, V; reml = true)
102+
103+
@testset "fit! two component by REML with MM" begin
104+
@time MRVCModels.fit!(model, algo = :MM, verbose = false, maxiter = 100)
105+
println("||B_true - B̂|| = $(norm(B_true - model.B_reml))")
106+
for k in 1:m
107+
println("||Σ_true[$k] - Σ̂[$k]|| = $(norm(Σ_true[k] - model.Σ[k]))")
99108
end
100-
display(history)
101-
println()
102109
end
103110

104111
# @testset "log-likelihood at the truth" begin

0 commit comments

Comments
 (0)