|
3 | 3 |
|
4 | 4 | Return the negative 2* log likelihood. |
5 | 5 | """ |
6 | | -function minus2ll end |
| 6 | +minus2ll(fit::SemFit) = minus2ll(fit, fit.model) |
7 | 7 |
|
8 | 8 | ############################################################################################ |
9 | 9 | # Single Models |
10 | 10 | ############################################################################################ |
11 | 11 |
|
12 | | -minus2ll(fit::SemFit) = minus2ll(fit, fit.model) |
13 | | - |
14 | 12 | function minus2ll(fit::SemFit, model::AbstractSemSingle) |
15 | | - minimum = objective(model, fit.solution) |
16 | | - return minus2ll(minimum, model) |
| 13 | + check_single_lossfun(model; throw_error = true) |
| 14 | + return minus2ll(model.loss.functions[1], fit, model) |
17 | 15 | end |
18 | 16 |
|
19 | | -minus2ll(minimum::Number, model::AbstractSemSingle) = |
20 | | - sum(lossfun -> minus2ll(lossfun, minimum, model), model.loss.functions) |
21 | | - |
22 | 17 | # SemML ------------------------------------------------------------------------------------ |
23 | | -function minus2ll(lossfun::SemML, minimum::Number, model::AbstractSemSingle) |
| 18 | +function minus2ll(::SemML, fit::SemFit, model::AbstractSemSingle) |
24 | 19 | obs = observed(model) |
25 | | - return nsamples(obs) * (minimum + log(2π) * nobserved_vars(obs)) |
| 20 | + return nsamples(obs) * (fit.minimum + log(2π) * nobserved_vars(obs)) |
26 | 21 | end |
27 | 22 |
|
28 | 23 | # WLS -------------------------------------------------------------------------------------- |
29 | | -minus2ll(lossfun::SemWLS, minimum::Number, model::AbstractSemSingle) = missing |
| 24 | +minus2ll(::SemWLS, ::SemFit, ::AbstractSemSingle) = missing |
30 | 25 |
|
31 | 26 | # compute likelihood for missing data - H0 ------------------------------------------------- |
32 | | -# -2ll = (∑ log(2π)*(nᵢ + mᵢ)) + F*n |
33 | | -function minus2ll(lossfun::SemFIML, minimum::Number, model::AbstractSemSingle) |
| 27 | +# -2ll = (∑ log(2π)*(nᵢ*mᵢ)) + F*n |
| 28 | +function minus2ll(::SemFIML, fit::SemFit, model::AbstractSemSingle) |
34 | 29 | obs = observed(model)::SemObservedMissing |
35 | | - F = minimum * nsamples(obs) |
| 30 | + F = fit.minimum * nsamples(obs) |
36 | 31 | F += log(2π) * sum(pat -> nsamples(pat) * nmeasured_vars(pat), obs.patterns) |
37 | 32 | return F |
38 | 33 | end |
|
0 commit comments