@@ -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]
2020StatsBase. cov2cor! (V[2 ], [sqrt (V[2 ][i, i]) for i in 1 : n])
2121V[3 ] = Matrix (UniformScaling (1.0 ), n, n)
2222# true parameter values
23- B_true = 2 rand (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
3636model = 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 ()
5244end
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 ()
6852end
6953
7054model = 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 ()
8662end
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 ()
102109end
103110
104111# @testset "log-likelihood at the truth" begin
0 commit comments