Changelog
Source:NEWS.md
idiographic 0.3.4
New features
The pure-R graphical-lasso kernel that powers
fit_graphical_var()is now a supported public API:glasso_fit(),glasso_path(), andglasso_kkt().glasso_fit()returns aglasso_resultwhose$wiand$welements are named exactly asglasso::glasso()’s, so existing call sites port unchanged, and it supports element-wise penalty matrices and hard zero constraints in addition to a scalar penalty.glasso_kkt()certifies a solution from the graphical-lasso stationarity conditions rather than against another solver. Both results haveprint()and tidyas.data.frame()methods. This exists so sibling packages can drop their own copies of the same kernel and depend on this one; seeOFFLOAD.mdin the repository.matrices()gains aprintargument. The default (print = TRUE) is unchanged: it prints each matrix and returns the list invisibly. Withprint = FALSEthe function prints nothing and returns the list visibly, which is the form dependent packages and resampling loops need. Threaded through everymatrices()method, including those that delegate to another method.printfollows...in every method, so it must be named in full and can never be matched positionally or by partial name.
Bug fixes
glasso_kkt()no longer reports optimal zero-constrained fits as non-optimal. At an entry hard-constrained byzero, the inactive-edge condition|W_ij - S_ij| <= rho_ijdoes not apply: the equality constraint carries its own Lagrange multiplier, which absorbs the residual. Constrained pairs are now excluded from the check. A fit matchingglasso’s Fortran kernel to 2e-12 previously certified as violating optimality by 0.028.glasso_fit()now rejects a covariance matrix that is not positive semi-definite (classed conditionidiographic_not_psd). A negative eigenvalue produced a precision matrix with a negative diagonal, from which every partial correlation wasNaN. Singular but positive semi-definite covariances remain valid input. The tidy accessor also refuses a precision matrix with a non-positive diagonal (idiographic_bad_precision) rather than lettingstats::cov2cor()warn and emitNaNweights.An asymmetric element-wise penalty matrix is now rejected by
glasso_fit()and byfit_graphical_var()’sregularize_mat_kappa. The penalty on edge(i, j)is a single scalar over a symmetricTheta, so an asymmetric penalty is ill-posed rather than stricter; previously it was accepted and produced a fit that failed the package’s own optimality check.glasso_kkt()validatespenalize_diagonalinstead of lettingisTRUE()silently mapNAand other invalid values toFALSE, and warns (idiographic_glasso_kkt_override) when a suppliedrhoorpenalize_diagonaldiffers from the one the fit was made with, since the returned violation then certifies a different problem.The internal graphical-lasso optimality checker used to measure the unpenalised diagonal stationarity condition (
W_ii = S_ii) even for fits made withpenalize.diagonal = TRUE, whose condition isW_ii - S_ii = rho. It therefore reported a spurious violation of exactlyrhofor every such fit — includingglasso’s own Fortran output, which is how this was found. It now takes the diagonal-penalty flag into account. No estimator result and no previously published number changes; only the diagnostic was wrong.
Documentation
matrices()now documents that it is a display verb by default, and points atprint = FALSEfor programmatic extraction.The three most computationally expensive vignettes – Graphical VAR, Bayesian VAR/DSEM, and GIMME – are now pkgdown articles rather than installed vignettes. Their content is unchanged and they remain published at https://pak.dynasite.org/idiographic/, but they are no longer rebuilt during
R CMD check. Rebuilding all ten vignettes took 574 seconds on Windows R-devel (68% of the total check time, against CRAN’s 10-minute guideline); these three accounted for the large majority of it. The remaining seven vignettes are renumbered 1-7.
idiographic 0.3.2
CRAN release: 2026-08-03
- New package Title — “Idiographic Person-Specific and Heterogeneous Complex Networks” — and a rewritten Description with method references doi:10.1007/978-3-031-95365-1_20 and doi:10.1080/00273171.2018.1454823.
- Added Sonsoles López-Pernas as package author.
- Documentation language standardized to British English (
Language: en-GB), with dialect fixes across the documentation prose and a newinst/WORDLISTso the package spell check runs clean. - Slimmer CRAN footprint: all competitor-equivalence tests now live only in the repository’s opt-in validation lane and are excluded from the CRAN tarball. Suggests trimmed from 16 to 8 packages — removed
gimme,graphicalVAR,glasso,corpcor,data.table,qgraph,rio, andjsonlite, none of which the shipped package uses.
idiographic 0.2.0
Made the CRAN package offline-first: the only mandatory imports are standard R packages, while
lme4,lavaan, plotting, and external backends are optional. Competitor-oracle tests and the real-panel corpus now run in a separate opt-invalidation/lane and are excluded from the CRAN tarball.Added a registry-backed
fit_idiographic()front door, estimator discovery, method-specificequivalence()declarations, package-wideequivalence_table()and argument-by-argumentargument_coverage()ledgers, and common tidy accessors. All 17 registered methods and 315 current public formals now have an executable evidence classification; new unassessed arguments fail the closure test.Expanded direct-oracle testing across graphicalVAR option combinations, mlVAR multi-lag/preprocessing/unique-model configurations, and bivariate plus three-variable GIMME standard, hybrid, and VAR searches. GIMME evidence now also covers fit statistics, uneven panels, exogenous-variable dimensions, and interacting correction/standardization controls. Tightened public argument validation so engine-specific controls cannot be silently ignored.
Closed the remaining executable evidence cells: all 12 supported lag-1 lmer mlVAR structure combinations, per-subject/missing-data graphicalVAR fits, GIMME 10.0 correction/stopping/standardization/cutoff/forced-path controls, standardized ML/MLR uSEM fits, Mplus wrapper forwarding/conversion, Bayesian burn-in/thinning, positive random-residual recovery, parallel mlVAR, and base-R linear/logistic idiographic-ML engine equality.
Migrated the 20-panel real ESM mlVAR validation corpus from the Dynalytics/psychaj work into the CRAN-excluded
validation/lane, with self-contained raw inputs, mlVAR 0.7.3 frozen oracles, provenance hashes, and explicit regression coverage for missing IDs, irregular occasion gaps, and degenerate between-person networks. Duplicate observation keys now fail clearly instead of producing row-order-dependent preprocessing.Uniform
fit_*naming for all estimators (breaking). Every model-fitting verb now uses a singlefit_prefix:fit_var(),fit_graphical_var(),fit_mlvar(),fit_rolling_var(), and so on for all estimators. Short model nicknames passed tocompare_idiographic(),estimate_stability(), andvalidate_forecast()(for example,"var"and"graphical_var") are unchanged.-
New native Bayesian estimators that statistically reproduce Mplus DSEM output without requiring Mplus:
-
fit_mlvar_bayes()— two-level Bayesian VAR(1) with latent mean centring.temporal = "fixed"is statistically validated against frozen Mplus DSEM fixed-temporal + random-intercept fixtures;temporal = "random"fits the full DSEM with person-specific temporal matrices and a random-effect covariance (reports random-slope SDs). -
fit_var_bayes()— single-level Bayesian VAR(1), the unregularized Bayesian analogue offit_graphical_var().
-
Pure-R conjugate Gibbs sampler (hand-rolled inverse-Wishart draws; no new dependencies). Posterior median / SD / 95% CI / one-tailed p, three networks (temporal, contemporaneous, between), and a Gelman-Rubin PSR diagnostic.
Validated to statistical (Monte-Carlo-error) equivalence against real Mplus 9 output with frozen ground-truth fixtures and parity tests.
Added
fit_ml()for idiographic supervised machine-learning: ordered within-person train/test splits, person-specific models, pooled baselines on the same held-out rows, regression/classification metrics, row-level predictions, and coefficient extraction viacoefs().modelnames the statistical/ML model (for example,"ridge"), whileestimatornames the implementation/backend (default"native"). No new dependencies: native models include mean/majority baselines, OLS/logistic, ridge, lasso, elastic net, PCR, LDA, Gaussian naive Bayes, kNN, and one-split trees.fit_idiographic_ml()andfit_individualized_ml()remain aliases.
idiographic 0.1.0
- Initial CRAN submission.
- Provides idiographic network estimators for intensive longitudinal data, including ordinary VAR, graphical VAR, mlVAR, uSEM, and GIMME-style models.
- Includes preprocessing audits, rolling-window estimation, forecast validation, edge stability diagnostics, model comparison, tidy accessors, and cograph plotting support.