Skip to content

Commit 6503a34

Browse files
committed
rename n_obs() -> nsamples()
1 parent 0a15204 commit 6503a34

20 files changed

Lines changed: 103 additions & 104 deletions

File tree

src/StructuralEquationModels.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ include("frontend/fit/fitmeasures/BIC.jl")
8282
include("frontend/fit/fitmeasures/chi2.jl")
8383
include("frontend/fit/fitmeasures/df.jl")
8484
include("frontend/fit/fitmeasures/minus2ll.jl")
85-
include("frontend/fit/fitmeasures/n_obs.jl")
8685
include("frontend/fit/fitmeasures/p.jl")
8786
include("frontend/fit/fitmeasures/RMSEA.jl")
8887
include("frontend/fit/fitmeasures/n_man.jl")
@@ -165,7 +164,7 @@ export AbstractSem,
165164
df,
166165
fit_measures,
167166
minus2ll,
168-
n_obs,
167+
nsamples,
169168
p_value,
170169
RMSEA,
171170
n_man,

src/frontend/common.jl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,13 @@ parind[:param_name]
4545
4646
See also [`params`](@ref).
4747
"""
48-
param_indices(semobj) = Dict(par => i for (i, par) in enumerate(params(semobj)))
48+
param_indices(semobj) = Dict(par => i for (i, par) in enumerate(params(semobj)))
49+
50+
"""
51+
nsamples(semobj)
52+
53+
Return the number of samples (observed data points).
54+
55+
For ensemble models, return the sum over all submodels.
56+
"""
57+
function nsamples end

src/frontend/fit/SemFit.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ end
4848

4949
params(fit::SemFit) = params(fit.model)
5050
nparams(fit::SemFit) = nparams(fit.model)
51+
nsamples(fit::SemFit) = nsamples(fit.model)
5152

5253
# access fields
5354
minimum(sem_fit::SemFit) = sem_fit.minimum

src/frontend/fit/fitmeasures/BIC.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
44
Return the bayesian information criterion.
55
"""
6-
BIC(sem_fit::SemFit) = minus2ll(sem_fit) + log(n_obs(sem_fit)) * nparams(sem_fit)
6+
BIC(sem_fit::SemFit) = minus2ll(sem_fit) + log(nsamples(sem_fit)) * nparams(sem_fit)

src/frontend/fit/fitmeasures/RMSEA.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ Return the RMSEA.
66
function RMSEA end
77

88
RMSEA(sem_fit::SemFit{Mi, So, St, Mo, O} where {Mi, So, St, Mo <: AbstractSemSingle, O}) =
9-
RMSEA(df(sem_fit), χ²(sem_fit), n_obs(sem_fit))
9+
RMSEA(df(sem_fit), χ²(sem_fit), nsamples(sem_fit))
1010

1111
RMSEA(sem_fit::SemFit{Mi, So, St, Mo, O} where {Mi, So, St, Mo <: SemEnsemble, O}) =
12-
sqrt(length(sem_fit.model.sems)) * RMSEA(df(sem_fit), χ²(sem_fit), n_obs(sem_fit))
12+
sqrt(length(sem_fit.model.sems)) * RMSEA(df(sem_fit), χ²(sem_fit), nsamples(sem_fit))
1313

14-
function RMSEA(df, chi2, n_obs)
15-
rmsea = (chi2 - df) / (n_obs * df)
14+
function RMSEA(df, chi2, nsamples)
15+
rmsea = (chi2 - df) / (nsamples * df)
1616
rmsea > 0 ? nothing : rmsea = 0
1717
return sqrt(rmsea)
1818
end

src/frontend/fit/fitmeasures/chi2.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ function χ² end
2020

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

2525
# bollen, p. 115, only correct for GLS weight matrix
2626
χ²(sem_fit::SemFit, observed, imp::Union{RAM, RAMSymbolic}, optimizer, loss_ml::SemWLS) =
27-
(n_obs(sem_fit) - 1) * sem_fit.minimum
27+
(nsamples(sem_fit) - 1) * sem_fit.minimum
2828

2929
# FIML
3030
function χ²(sem_fit::SemFit, observed::SemObservedMissing, imp, optimizer, loss_ml::SemFIML)
@@ -45,7 +45,7 @@ end
4545
function χ²(sem_fit::SemFit, model::SemEnsemble, lossfun::L) where {L <: SemWLS}
4646
check_ensemble_length(model)
4747
check_lossfun_types(model, L)
48-
return (sum(n_obs.(model.sems)) - 1) * sem_fit.minimum
48+
return (nsamples(model) - 1) * sem_fit.minimum
4949
end
5050

5151
function χ²(sem_fit::SemFit, model::SemEnsemble, lossfun::L) where {L <: SemML}
@@ -56,7 +56,7 @@ function χ²(sem_fit::SemFit, model::SemEnsemble, lossfun::L) where {L <: SemML
5656
w * (logdet(m.observed.obs_cov) + m.observed.n_man) for
5757
(w, m) in zip(model.weights, model.sems)
5858
])
59-
return (sum(n_obs.(model.sems)) - 1) * F_G
59+
return (nsamples(model) - 1) * F_G
6060
end
6161

6262
function χ²(sem_fit::SemFit, model::SemEnsemble, lossfun::L) where {L <: SemFIML}

src/frontend/fit/fitmeasures/minus2ll.jl

Lines changed: 10 additions & 10 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-
n_obs(obs) * (minimum + log(2π) * n_man(obs))
28+
nsamples(obs) * (minimum + log(2π) * n_man(obs))
2929

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

@@ -53,25 +53,25 @@ function minus2ll(observed::SemObservedMissing)
5353
minus2ll(
5454
observed.em_model.μ,
5555
observed.em_model.Σ,
56-
observed.n_obs,
56+
nsamples(observed),
5757
observed.rows,
5858
observed.patterns,
5959
observed.obs_mean,
6060
observed.obs_cov,
61-
observed.pattern_n_obs,
61+
observed.pattern_nsamples,
6262
observed.pattern_nvar_obs,
6363
)
6464
else
6565
em_mvn(observed)
6666
minus2ll(
6767
observed.em_model.μ,
6868
observed.em_model.Σ,
69-
observed.n_obs,
69+
nsamples(observed),
7070
observed.rows,
7171
observed.patterns,
7272
observed.obs_mean,
7373
observed.obs_cov,
74-
observed.pattern_n_obs,
74+
observed.pattern_nsamples,
7575
observed.pattern_nvar_obs,
7676
)
7777
end
@@ -85,13 +85,13 @@ function minus2ll(
8585
patterns,
8686
obs_mean,
8787
obs_cov,
88-
pattern_n_obs,
88+
pattern_nsamples,
8989
pattern_nvar_obs,
9090
)
9191
F = 0.0
9292

9393
for i in 1:length(rows)
94-
nᵢ = pattern_n_obs[i]
94+
nᵢ = pattern_nsamples[i]
9595
# missing pattern
9696
pattern = patterns[i]
9797
# observed data
@@ -106,7 +106,7 @@ function minus2ll(
106106
F += F_one_pattern(meandiffᵢ, Σᵢ⁻¹, Sᵢ, ld, nᵢ)
107107
end
108108

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

112112
return F

src/frontend/fit/fitmeasures/n_obs.jl

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

src/frontend/fit/standard_errors/hessian.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ end
4646
H_scaling(model::AbstractSemSingle) =
4747
H_scaling(model, model.observed, model.imply, model.optimizer, model.loss.functions...)
4848

49-
H_scaling(model, obs, imp, optimizer, lossfun::SemML) = 2 / (n_obs(model) - 1)
49+
H_scaling(model, obs, imp, optimizer, lossfun::SemML) = 2 / (nsamples(model) - 1)
5050

5151
function H_scaling(model, obs, imp, optimizer, lossfun::SemWLS)
5252
@warn "Standard errors for WLS are only correct if a GLS weight matrix (the default) is used."
53-
return 2 / (n_obs(model) - 1)
53+
return 2 / (nsamples(model) - 1)
5454
end
5555

56-
H_scaling(model, obs, imp, optimizer, lossfun::SemFIML) = 2 / n_obs(model)
56+
H_scaling(model, obs, imp, optimizer, lossfun::SemFIML) = 2 / nsamples(model)
5757

58-
H_scaling(model::SemEnsemble) = 2 / n_obs(model)
58+
H_scaling(model::SemEnsemble) = 2 / nsamples(model)

src/frontend/fit/summary.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ function sem_summary(
1717
println("No. iterations/evaluations: $(n_iterations(sem_fit))")
1818
print("\n")
1919
println("Number of parameters: $(nparams(sem_fit))")
20-
println("Number of observations: $(n_obs(sem_fit))")
20+
println("Number of data samples: $(nsamples(sem_fit))")
2121
print("\n")
2222
printstyled(
2323
"----------------------------------- Model ----------------------------------- \n";

0 commit comments

Comments
 (0)