Restored model handles now use the lab's native pointer-address check, so serialized models rebuild correctly across platform-specific pointer displays.
Portable package checks now run on Windows, macOS and Linux with current dependencies. Live lavaan comparisons accommodate 0.7-3; the pinned lavaan-0.7.2 preset retains its own oracle.
Complete-data endpoint audits now support simple equality-constrained std.lv charts, including loading and latent-mean ties across factors or groups. Released marker ties preserve the constrained model dimension. Automatic constrained starts retain the existing normalized-unit fallback.
The embedded lab fit now retains read-only deletion provenance by group and reason. The summary continues to show rows supplied, used and deleted.
Complete-data GLS fits now use PORT by default, retaining the layered start and information-refined coordinates. Estimates at the same optimum are unchanged; iteration counts and runaway paths may differ. ML keeps L-BFGS.
Complete-data ML and GLS fits with standardized extent above 10 are no longer reported converged when their supported std.lv endpoint Newton audit fails. Diagnostics record the trigger and unsupported transports; estimates are unchanged.
Supplied start tables and previous fits now appear as requested$starts = "table" and effective$starts = "<resolved convention>+table" in fitting
reports, identifying first-attempt values and the unmatched-parameter fallback.
Nested tests now refuse boundary_nesting only when a required tangent
loses rank, rather than because the fitted factor covariance is improper or
singular. PSD-boundary comparisons compute under the same interior-population
assumption as global tests and retain psd_boundary; anova() also flags
computed table rows. A 500-replicate weak-factor null check at each of
N=100/200 gave score rejection 5.6%/6.0% and LR 6.4%/7.0% at nominal 5%,
including 10.0%/1.8% improper null fits (SB and PEBA4, one restriction).
The lavaan-0.7.2 marker component now also covers FIML and ordinal/mixed
DWLS, using each route's saturated H1 covariance. Switched fits replay the
selected fitting attempts and revert when rejected; marker = "default"
keeps the requested markers.
Fully fixed models with latent regressions or higher-order factors and fixed means now return their implied moments without crashing in the stationarity audit.
Explicit quadratic references (including summary/anova SB and PEBA4) now clip roundoff-negative spectrum entries using the projected-score validator; materially negative spectra still raise a numeric error.
Ordinary magmaan(estimator = "ML") on complete all-ordinal data now uses
association ML, exact Stage-1 IJ covariance with observed sensitivity, All
global/nested references, and robust modification indices/equality releases.
DWLS remains the ordinal default. Global tests can be liberal in finite
samples; see the association-ML help caveat and decisions/08 evidence.
Identification refusals now suggest specific scale, location and rotation restrictions. Information deficits name affected parameters without suggesting an automatic fix; no identifying constraints are added.
The lavaan-0.7.2 FIML preset now uses lavaan's scale-dependent H1
covariance ridge and retains stalled EM moments. fit$fitting$h1 records
H1 convergence and update/repair counts. Converged H1 moments retain strict
oracle agreement; stalled H1 endpoints are outside the compatibility
contract. Native FIML H1 defaults are unchanged.
Lab optimizer controls now accept opt-in objective and
objective_downward scaling for continuous fixed-weight LS and ML2S Stage-2
LS, using the fitting GN diagonal. Defaults and audit rules are unchanged.
ML/direct FIML and residual backends reject these modes as Unsupported.
Ordinal and mixed routes currently ignore all coordinate scaling modes
pending TASK-33.10.5.6.
magmaan_model() now caches and prints structural identification.
magmaan() refuses unidentified models before fitting with
magmaan_identification_error, naming the free parameter directions.
Unchecked models fit normally; deliberate ridge fits remain in magmaanlab.
The lavaan-0.7.2 preset now adapts weak markers for complete-data ML.
marker = "default" keeps the requested identification. Fits retain the
actual fitted specification and a switch/revert table; nested inference
explicitly refuses switched marker coordinates. FIML and DWLS adaptation
follows separately; their preset currently reports marker = "default".
Fits using convergence = "lavaan-0.7.2" (including the preset) report
lavaan's post-estimation check separately from convergence. The six flags
are available in fitting$post_check on the lab fit; ordinary fits expose
them through as_lab_fit(). This adds no warning or inference restriction.
ULS fits and the continuous part of mixed DWLS/WLS fits now warn when within-group observed variances differ by more than a factor of 1000, with advice to rescale. ML, GLS, FIML and ordinal-only fits do not emit this advice. The diagnostic is computed by the shared C++ core.
Calls written for 0.1.0 need changes. Removed arguments raise errors naming their replacements.
magmaan_model() constructs a reusable model with a frozen data schema.
prototype declares groups and ordinal categories; factor levels allow a
zero-row prototype. Schema violations raise magmaan_schema_error.magmaan(model, data, estimator, covariance, inference, options) fits that
model. Syntax strings and lab specifications construct it from data;
undeclared ordered factors are rejected. inference = FALSE estimates only,
and infer(fit) adds inference later.coef() and vcov() without changing other estimates or inference.fixed.x is removed. ML structural estimates
stay unchanged, while GLS/ULS estimates can change in overidentified models.
Lab specifications with observed covariates and fixed_x = TRUE are rejected.covariance = "unrestricted", "psd", "barrier" or barrier(lambda)
replaces psd = TRUE. Barrier fitting is experimental and has no inference
(penalized); barrier(0) gives the unrestricted fit.options$start replaces top-level start and options$starts. It accepts
"default", "fabin3", "lavaan-0.7.2", a previous fit or a parameter
table, and overrides preset starts.missing, cluster and meanstructure are removed. Estimators other than
FIML and ML2S delete incomplete rows listwise; pairwise deletion and
two-level fitting remain lab features.magmaanlab::mplus_model() retain source, groups
and category schema through fitting and serialization. Unsupported inputs
raise magmaan_mplus_error with all required edits; model printing shows
fittability. Plain strings continue to mean lavaan syntax.equivalent_models;
released-scale thresholds-plus-loadings versus loadings-only is not_nested.anova() retries a worse-fitting larger model from the embedded restricted
estimate. A better endpoint is used only with a passing native verdict;
input fits stay unchanged. Recovery is recorded in refit; internal warnings
are retained in attr(result, "reseed")$warnings and printed as notes.summary() and anova() use columns test, statistic, df, reference,
pvalue, recommended and reason. Migrate p.sb/p.peba4 to pvalue
selected by reference == "sb"/"peba4"; select tests by their stable codes
score, lr, fit_function and fit_function_difference.references = c("sb", "peba4") requests the former comparator p-values.
Other supported reference laws reuse the same statistic and spectrum.
recommended marks only the primary policy test with its default reference.
LR rows remain visible with a small-sample over-rejection note.references cannot accompany lavaan_compat.modindices() combines robust one-df score indices and affine equality
releases for ML, FIML and all-ordinal/mixed DWLS. Candidates include absent
structural regressions among variables already in equations and reverse
paths. Candidate order and typed unavailable rows are preserved.test = "lr" refits candidates from embedded null starts and applies the
nested policy (LR for ML/FIML, fit-function differences for DWLS).summary(fit, standardized = TRUE) adds std.lv/std.all estimates and
delta-method SEs using the selected covariance, plus endogenous-variable
R-squared and SEs. Fixed markers, groups and ordinal parameters are included.
Without covariance, estimates remain and SEs have typed missing reasons;
defined parameters have no declared standardized scale.fit_measures(fit) provides misspecification-robust policy point indices
with a matching independence baseline and typed unavailable reasons.
summary(fit, fit_measures = TRUE) attaches and prints them on request.
Policy intervals and close-fit p-values await evaluation.fit_measures(fit, lavaan_compat = ...) provides lavaan's standard, scaled
and robust families, intervals and close-fit p-values for supported bundles.
FIML ML/MLR measures are validated against lavaan and use tighter saturated
H1 EM precision.options$preset = "lavaan-0.7.2" selects lavaan starts, search and acceptance
rules for continuous ML/FIML and all-ordinal or complete mixed DWLS, with
unrestricted covariance and supported linear equalities. Explicit options
override the preset. Prepared DWLS fits accept these options; ML2S retains
its fresh-fit fallback.vcov(), confint(), summary() and anova() accept named bundles through
lavaan_compat; infer() can cache an additional bundle. Complete-data ML
supports ML/MLM/MLR; FIML supports ML/MLR. All-ordinal reporting supports
DWLS/WLSMV, ULS/ULSMV and WLS, including default nested difference tests.First simulation prerelease, paired with magmaanlab 0.1.0. The ordinary API accepts lavaan syntax and lavaan-backed model specifications. EQS is lab-only.
Development is unfinished: remaining bugs and incomplete coverage of the main estimators and inferential procedures remain to be resolved and validated. Version 0.1.0 provides a versioned simulation snapshot, not a finished release.
Automatic policy inference covers single-level complete-data ML. Other estimators retain their estimates and report unsupported inference components. This prerelease does not expand inference coverage or change its defaults.