Skip to content

Commit 772157b

Browse files
committed
rename n_man() -> nobserved_vars()
for missing data pattern: nobserved_vars() -> nmeasured_vars(), obs_cov/obs_mean -> measured_cov/measured_mean
1 parent 6503a34 commit 772157b

12 files changed

Lines changed: 52 additions & 64 deletions

File tree

src/StructuralEquationModels.jl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ include("frontend/fit/fitmeasures/df.jl")
8484
include("frontend/fit/fitmeasures/minus2ll.jl")
8585
include("frontend/fit/fitmeasures/p.jl")
8686
include("frontend/fit/fitmeasures/RMSEA.jl")
87-
include("frontend/fit/fitmeasures/n_man.jl")
8887
include("frontend/fit/fitmeasures/fit_measures.jl")
8988
# standard errors
9089
include("frontend/fit/standard_errors/hessian.jl")
@@ -167,7 +166,6 @@ export AbstractSem,
167166
nsamples,
168167
p_value,
169168
RMSEA,
170-
n_man,
171169
EmMVNModel,
172170
se_hessian,
173171
se_bootstrap,

src/frontend/fit/fitmeasures/chi2.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ function χ² end
2020

2121
# RAM + SemML
2222
χ²(sem_fit::SemFit, observed, imp::Union{RAM, RAMSymbolic}, optimizer, loss_ml::SemML) =
23-
(nsamples(sem_fit) - 1) * (sem_fit.minimum - logdet(observed.obs_cov) - observed.n_man)
23+
(nsamples(sem_fit) - 1) *
24+
(sem_fit.minimum - logdet(observed.obs_cov) - nobserved_vars(observed))
2425

2526
# bollen, p. 115, only correct for GLS weight matrix
2627
χ²(sem_fit::SemFit, observed, imp::Union{RAM, RAMSymbolic}, optimizer, loss_ml::SemWLS) =
@@ -53,7 +54,7 @@ function χ²(sem_fit::SemFit, model::SemEnsemble, lossfun::L) where {L <: SemML
5354
check_lossfun_types(model, L)
5455
F_G = sem_fit.minimum
5556
F_G -= sum([
56-
w * (logdet(m.observed.obs_cov) + m.observed.n_man) for
57+
w * (logdet(m.observed.obs_cov) + nobserved_vars(m.observed)) for
5758
(w, m) in zip(model.weights, model.sems)
5859
])
5960
return (nsamples(model) - 1) * F_G

src/frontend/fit/fitmeasures/df.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ df(sem_fit::SemFit) = df(sem_fit.model)
1111
df(model::AbstractSem) = n_dp(model) - nparams(model)
1212

1313
function n_dp(model::AbstractSemSingle)
14-
nman = n_man(model)
15-
ndp = 0.5(nman^2 + nman)
14+
nvars = nobserved_vars(model)
15+
ndp = 0.5(nvars^2 + nvars)
1616
if !isnothing(model.imply.μ)
17-
ndp += n_man(model)
17+
ndp += nvars
1818
end
1919
return ndp
2020
end

src/frontend/fit/fitmeasures/minus2ll.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ minus2ll(sem_fit::SemFit, obs, imp, optimizer, args...) =
2525

2626
# SemML ------------------------------------------------------------------------------------
2727
minus2ll(minimum::Number, obs, imp::Union{RAM, RAMSymbolic}, optimizer, loss_ml::SemML) =
28-
nsamples(obs) * (minimum + log(2π) * n_man(obs))
28+
nsamples(obs) * (minimum + log(2π) * nobserved_vars(obs))
2929

3030
# WLS --------------------------------------------------------------------------------------
3131
minus2ll(minimum::Number, obs, imp::Union{RAM, RAMSymbolic}, optimizer, loss_ml::SemWLS) =
@@ -42,7 +42,7 @@ function minus2ll(
4242
)
4343
F = minimum
4444
F *= nsamples(observed)
45-
F += sum(log(2π) * observed.pattern_nsamples .* observed.pattern_nvar_obs)
45+
F += sum(log(2π) * observed.pattern_nsamples .* observed.pattern_nobs_vars)
4646
return F
4747
end
4848

@@ -59,7 +59,7 @@ function minus2ll(observed::SemObservedMissing)
5959
observed.obs_mean,
6060
observed.obs_cov,
6161
observed.pattern_nsamples,
62-
observed.pattern_nvar_obs,
62+
observed.pattern_nobs_vars,
6363
)
6464
else
6565
em_mvn(observed)
@@ -72,7 +72,7 @@ function minus2ll(observed::SemObservedMissing)
7272
observed.obs_mean,
7373
observed.obs_cov,
7474
observed.pattern_nsamples,
75-
observed.pattern_nvar_obs,
75+
observed.pattern_nobs_vars,
7676
)
7777
end
7878
end
@@ -86,7 +86,7 @@ function minus2ll(
8686
obs_mean,
8787
obs_cov,
8888
pattern_nsamples,
89-
pattern_nvar_obs,
89+
pattern_nobs_vars,
9090
)
9191
F = 0.0
9292

@@ -106,7 +106,7 @@ function minus2ll(
106106
F += F_one_pattern(meandiffᵢ, Σᵢ⁻¹, Sᵢ, ld, nᵢ)
107107
end
108108

109-
F += sum(log(2π) * pattern_nsamples .* pattern_nvar_obs)
109+
F += sum(log(2π) * pattern_nsamples .* pattern_nobs_vars)
110110
#F *= N
111111

112112
return F

src/frontend/fit/fitmeasures/n_man.jl

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/imply/RAM/generic.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ function RAM(;
111111
n_obs = nobserved_vars(ram_matrices)
112112
n_var = nvars(ram_matrices)
113113
F = zeros(ram_matrices.size_F)
114-
F[CartesianIndex.(1:n_var, ram_matrices.F_ind)] .= 1.0
114+
F[CartesianIndex.(1:n_obs, ram_matrices.F_ind)] .= 1.0
115115

116116
# get indices
117117
A_indices = copy(ram_matrices.A_ind)
@@ -146,7 +146,7 @@ function RAM(;
146146
has_meanstructure = Val(true)
147147
!isnothing(M_indices) || throw(ArgumentError("You set `meanstructure = true`, but your model specification contains no mean parameters."))
148148
∇M = gradient ? matrix_gradient(M_indices, n_var) : nothing
149-
μ = zeros(n_var)
149+
μ = zeros(n_obs)
150150
else
151151
has_meanstructure = Val(false)
152152
M_indices = nothing
@@ -257,7 +257,7 @@ objective_gradient_hessian!(imply::RAM, par, model::AbstractSemSingle, has_means
257257
############################################################################################
258258

259259
function update_observed(imply::RAM, observed::SemObserved; kwargs...)
260-
if n_man(observed) == size(imply.Σ, 1)
260+
if nobserved_vars(observed) == size(imply.Σ, 1)
261261
return imply
262262
else
263263
return RAM(; observed = observed, kwargs...)

src/imply/RAM/symbolic.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ objective_gradient_hessian!(imply::RAMSymbolic, par, model) = gradient!(imply, p
236236
############################################################################################
237237

238238
function update_observed(imply::RAMSymbolic, observed::SemObserved; kwargs...)
239-
if n_man(observed) == size(imply.Σ, 1)
239+
if nobserved_vars(observed) == size(imply.Σ, 1)
240240
return imply
241241
else
242242
return RAMSymbolic(; observed = observed, kwargs...)

src/loss/ML/FIML.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,20 @@ end
4747
############################################################################################
4848

4949
function SemFIML(; observed, specification, kwargs...)
50-
inverses = broadcast(x -> zeros(x, x), Int64.(pattern_nvar_obs(observed)))
50+
inverses = broadcast(x -> zeros(x, x), pattern_nobs_vars(observed))
5151
choleskys = Array{Cholesky{Float64, Array{Float64, 2}}, 1}(undef, length(inverses))
5252

5353
n_patterns = size(rows(observed), 1)
5454
logdets = zeros(n_patterns)
5555

56-
imp_mean = zeros.(Int64.(pattern_nvar_obs(observed)))
57-
meandiff = zeros.(Int64.(pattern_nvar_obs(observed)))
56+
imp_mean = zeros.(pattern_nobs_vars(observed))
57+
meandiff = zeros.(pattern_nobs_vars(observed))
5858

59-
nman = Int64(n_man(observed))
60-
imp_inv = zeros(nman, nman)
59+
nobs_vars = nobserved_vars(observed)
60+
imp_inv = zeros(nobs_vars, nobs_vars)
6161
mult = similar.(inverses)
6262

63-
∇ind = vec(CartesianIndices(Array{Float64}(undef, nman, nman)))
63+
∇ind = vec(CartesianIndices(Array{Float64}(undef, nobs_vars, nobs_vars)))
6464
∇ind =
6565
[findall(x -> !(x[1] ind || x[2] ind), ∇ind) for ind in patterns_not(observed)]
6666

@@ -189,8 +189,8 @@ function F_FIML(rows, semfiml, model, params)
189189
end
190190

191191
function ∇F_FIML(rows, semfiml, model)
192-
= zeros(Int64(n_man(model)))
193-
= zeros(Int64(n_man(model)^2))
192+
= zeros(nobserved_vars(model))
193+
= zeros(nobserved_vars(model)^2)
194194

195195
for i in 1:size(rows, 1)
196196
∇F_one_pattern(

src/loss/WLS/WLS.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ function SemWLS(;
6464

6565
# compute V here
6666
if isnothing(wls_weight_matrix)
67-
D = duplication_matrix(n_man(observed))
67+
D = duplication_matrix(nobserved_vars(observed))
6868
S = inv(obs_cov(observed))
6969
S = kron(S, S)
7070
wls_weight_matrix = 0.5 * (D' * S * D)

src/observed/EM.jl

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ function em_mvn(
2929
rtol_em = 1e-4,
3030
kwargs...,
3131
)
32-
n_man = observed.n_man
32+
nvars = nobserved_vars(observed)
3333
nsamps = nsamples(observed)
3434

3535
# preallocate stuff?
36-
𝔼x_pre = zeros(n_man)
37-
𝔼xxᵀ_pre = zeros(n_man, n_man)
36+
𝔼x_pre = zeros(nvars)
37+
𝔼xxᵀ_pre = zeros(nvars, nvars)
3838

3939
### precompute for full cases
40-
if length(observed.patterns[1]) == observed.n_man
40+
if length(observed.patterns[1]) == nvars
4141
for row in observed.rows[1]
4242
row = observed.data_rowwise[row]
4343
𝔼x_pre += row
@@ -50,11 +50,11 @@ function em_mvn(
5050

5151
# initialize
5252
em_model = start_em(observed; kwargs...)
53-
em_model_prev = EmMVNModel(zeros(n_man, n_man), zeros(n_man), false)
53+
em_model_prev = EmMVNModel(zeros(nvars, nvars), zeros(nvars), false)
5454
iter = 1
5555
done = false
56-
𝔼x = zeros(n_man)
57-
𝔼xxᵀ = zeros(n_man, n_man)
56+
𝔼x = zeros(nvars)
57+
𝔼xxᵀ = zeros(nvars, nvars)
5858

5959
while !done
6060
em_mvn_Estep!(𝔼x, 𝔼xxᵀ, em_model, observed, 𝔼x_pre, 𝔼xxᵀ_pre)
@@ -153,7 +153,7 @@ end
153153

154154
# use μ and Σ of full cases
155155
function start_em_observed(observed::SemObservedMissing; kwargs...)
156-
if (length(observed.patterns[1]) == observed.n_man) & (observed.pattern_nsamples[1] > 1)
156+
if (length(observed.patterns[1]) == nobserved_vars(observed)) & (observed.pattern_nsamples[1] > 1)
157157
μ = copy(observed.obs_mean[1])
158158
Σ = copy(Symmetric(observed.obs_cov[1]))
159159
if !isposdef(Σ)
@@ -167,11 +167,11 @@ end
167167

168168
# use μ = O and Σ = I
169169
function start_em_simple(observed::SemObservedMissing; kwargs...)
170-
n_man = Int(observed.n_man)
171-
μ = zeros(n_man)
172-
Σ = rand(n_man, n_man)
170+
nvars = nobserved_vars(observed)
171+
μ = zeros(nvars)
172+
Σ = rand(nvars, nvars)
173173
Σ = Σ * Σ'
174-
# Σ = Matrix(1.0I, n_man, n_man)
174+
# Σ = Matrix(1.0I, nvars, nvars)
175175
return EmMVNModel(Σ, μ, false)
176176
end
177177

0 commit comments

Comments
 (0)