@@ -111,8 +111,10 @@ function RAMSymbolic(;
111111 vech = true
112112 end
113113
114+ I_A⁻¹ = neumann_series (A)
115+
114116 # Σ
115- Σ_symbolic = get_Σ_symbolic_RAM (S, A , F; vech = vech)
117+ Σ_symbolic = eval_Σ_symbolic (S, I_A⁻¹ , F; vech = vech)
116118 # print(Symbolics.build_function(Σ_symbolic)[2])
117119 Σ_function = Symbolics. build_function (Σ_symbolic, par, expression = Val{false })[2 ]
118120 Σ = zeros (size (Σ_symbolic))
@@ -153,7 +155,7 @@ function RAMSymbolic(;
153155 # μ
154156 if meanstructure
155157 MS = HasMeanStructure
156- μ_symbolic = get_μ_symbolic_RAM (M, A , F)
158+ μ_symbolic = eval_μ_symbolic (M, I_A⁻¹ , F)
157159 μ_function = Symbolics. build_function (μ_symbolic, par, expression = Val{false })[2 ]
158160 μ = zeros (size (μ_symbolic))
159161 if gradient
@@ -233,26 +235,24 @@ end
233235# ## additional functions
234236# ###########################################################################################
235237
236- function get_Σ_symbolic_RAM (S, A, F; vech = false )
237- invia = neumann_series (A)
238- Σ_symbolic = F * invia * S * permutedims (invia) * permutedims (F)
239- Σ_symbolic = Array (Σ_symbolic)
240- # Σ_symbolic = Symbolics.simplify.(Σ_symbolic)
241- if vech
242- Σ_symbolic = Σ_symbolic[tril (trues (size (F, 1 ), size (F, 1 )))]
243- end
244- Threads. @threads for i in eachindex (Σ_symbolic)
245- Σ_symbolic[i] = Symbolics. simplify (Σ_symbolic[i])
238+ # expected covariations of observed vars
239+ function eval_Σ_symbolic (S, I_A⁻¹, F; vech = false )
240+ Σ = F * I_A⁻¹ * S * permutedims (I_A⁻¹) * permutedims (F)
241+ Σ = Array (Σ)
242+ vech && (Σ = Σ[tril (trues (size (F, 1 ), size (F, 1 )))])
243+ # Σ = Symbolics.simplify.(Σ)
244+ Threads. @threads for i in eachindex (Σ)
245+ Σ[i] = Symbolics. simplify (Σ[i])
246246 end
247- return Σ_symbolic
247+ return Σ
248248end
249249
250- function get_μ_symbolic_RAM (M, A, F)
251- invia = neumann_series (A )
252- μ_symbolic = F * invia * M
253- μ_symbolic = Array (μ_symbolic )
254- Threads. @threads for i in eachindex (μ_symbolic )
255- μ_symbolic [i] = Symbolics. simplify (μ_symbolic [i])
250+ # expected means of observed vars
251+ function eval_μ_symbolic (M, I_A⁻¹, F )
252+ μ = F * I_A⁻¹ * M
253+ μ = Array (μ )
254+ Threads. @threads for i in eachindex (μ )
255+ μ [i] = Symbolics. simplify (μ [i])
256256 end
257- return μ_symbolic
257+ return μ
258258end
0 commit comments