Skip to content

Commit 800198c

Browse files
committed
SemImply: vars and params API
1 parent 74c4550 commit 800198c

2 files changed

Lines changed: 31 additions & 0 deletions

File tree

src/StructuralEquationModels.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ include("observed/EM.jl")
4949
include("frontend/specification/Sem.jl")
5050
include("frontend/specification/documentation.jl")
5151
# imply
52+
include("imply/abstract.jl")
5253
include("imply/RAM/symbolic.jl")
5354
include("imply/RAM/generic.jl")
5455
include("imply/empty.jl")

src/imply/abstract.jl

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
2+
vars(imply::SemImply) = vars(imply.ram_matrices)
3+
observed_vars(imply::SemImply) = observed_vars(imply.ram_matrices)
4+
latent_vars(imply::SemImply) = latent_vars(imply.ram_matrices)
5+
6+
nvars(imply::SemImply) = nvars(imply.ram_matrices)
7+
nobserved_vars(imply::SemImply) = nobserved_vars(imply.ram_matrices)
8+
nlatent_vars(imply::SemImply) = nlatent_vars(imply.ram_matrices)
9+
10+
params(imply::SemImply) = params(imply.ram_matrices)
11+
nparams(imply::SemImply) = nparams(imply.ram_matrices)
12+
13+
function check_acyclic(A::AbstractMatrix)
14+
# check if the model is acyclic
15+
acyclic = isone(det(I-A))
16+
17+
# check if A is lower or upper triangular
18+
if istril(A)
19+
@info "A matrix is lower triangular"
20+
return LowerTriangular(A)
21+
elseif istriu(A)
22+
@info "A matrix is upper triangular"
23+
return UpperTriangular(A)
24+
else
25+
if acyclic
26+
@info "Your model is acyclic, specifying the A Matrix as either Upper or Lower Triangular can have great performance benefits.\n" maxlog=1
27+
end
28+
return A
29+
end
30+
end

0 commit comments

Comments
 (0)