1212
1313# allocate arrays for pattern FIML
1414function SemFIMLPattern (pat:: SemObservedMissingPattern )
15- nobserved = nobserved_vars (pat)
15+ nmes = nmeasured_vars (pat)
1616 nmissed = nmissed_vars (pat)
1717
1818 # linear indicies of co-observed variable pairs for each pattern
19- Σ_linind = LinearIndices ((n_man (pat), n_man (pat)))
19+ Σ_linind = LinearIndices ((nobserved_vars (pat), nobserved_vars (pat)))
2020 ∇ind = vec ([
21- Σ_linind[CartesianIndex (x, y)] for x in findall (pat. obs_mask ),
22- y in findall (pat. obs_mask )
21+ Σ_linind[CartesianIndex (x, y)] for x in findall (pat. measured_mask ),
22+ y in findall (pat. measured_mask )
2323 ])
2424
25- return SemFIMLPattern (∇ind, zeros (nobserved, nobserved ), Ref (NaN ), zeros (nobserved ))
25+ return SemFIMLPattern (∇ind, zeros (nmes, nmes ), Ref (NaN ), zeros (nmes ))
2626end
2727
2828function prepare! (fiml:: SemFIMLPattern , pat:: SemObservedMissingPattern , implied:: SemImply )
2929 Σ = implied. Σ
3030 μ = implied. μ
3131 @inbounds @. @views begin
32- fiml. Σ⁻¹ = Σ[pat. obs_mask , pat. obs_mask ]
33- fiml. μ_diff = pat. obs_mean - μ[pat. obs_mask ]
32+ fiml. Σ⁻¹ = Σ[pat. measured_mask , pat. measured_mask ]
33+ fiml. μ_diff = pat. measured_mean - μ[pat. measured_mask ]
3434 end
3535 Σ_chol = cholesky! (Symmetric (fiml. Σ⁻¹))
3636 fiml. logdet[] = logdet (Σ_chol)
4242function objective (fiml:: SemFIMLPattern{T} , pat:: SemObservedMissingPattern ) where {T}
4343 F = fiml. logdet[] + dot (fiml. μ_diff, fiml. Σ⁻¹, fiml. μ_diff)
4444 if nsamples (pat) > 1
45- F += dot (pat. obs_cov , fiml. Σ⁻¹)
45+ F += dot (pat. measured_cov , fiml. Σ⁻¹)
4646 F *= nsamples (pat)
4747 end
4848 return F
@@ -52,15 +52,15 @@ function gradient!(JΣ, Jμ, fiml::SemFIMLPattern, pat::SemObservedMissingPatter
5252 Σ⁻¹ = Symmetric (fiml. Σ⁻¹)
5353 μ_diff⨉Σ⁻¹ = fiml. μ_diff' * Σ⁻¹
5454 if nsamples (pat) > 1
55- JΣ_pat = Σ⁻¹ * (I - pat. obs_cov * Σ⁻¹ - fiml. μ_diff * μ_diff⨉Σ⁻¹)
55+ JΣ_pat = Σ⁻¹ * (I - pat. measured_cov * Σ⁻¹ - fiml. μ_diff * μ_diff⨉Σ⁻¹)
5656 JΣ_pat .*= nsamples (pat)
5757 else
5858 JΣ_pat = Σ⁻¹ * (I - fiml. μ_diff * μ_diff⨉Σ⁻¹)
5959 end
6060 @inbounds vec (JΣ)[fiml.∇ind] .+ = vec (JΣ_pat)
6161
6262 lmul! (2 * nsamples (pat), μ_diff⨉Σ⁻¹)
63- @inbounds Jμ[pat. obs_mask ] .+ = μ_diff⨉Σ⁻¹'
63+ @inbounds Jμ[pat. measured_mask ] .+ = μ_diff⨉Σ⁻¹'
6464 return nothing
6565end
6666
104104function SemFIML (; observed:: SemObservedMissing , specification, kwargs... )
105105 return SemFIML (
106106 [SemFIMLPattern (pat) for pat in observed. patterns],
107- zeros (n_man (observed), n_man (observed)),
107+ zeros (nobserved_vars (observed), nobserved_vars (observed)),
108108 CommutationMatrix (nvars (specification)),
109109 nothing ,
110110 )
@@ -186,8 +186,8 @@ function F_FIML(
186186end
187187
188188function ∇F_FIML! (G, fiml:: SemFIML , observed:: SemObservedMissing , model:: AbstractSemSingle )
189- Jμ = zeros (n_man (model))
190- JΣ = zeros (n_man (model)^ 2 )
189+ Jμ = zeros (nobserved_vars (model))
190+ JΣ = zeros (nobserved_vars (model)^ 2 )
191191
192192 for (pat_fiml, pat) in zip (fiml. patterns, observed. patterns)
193193 gradient! (JΣ, Jμ, pat_fiml, pat)
0 commit comments