Skip to content

Commit 8d236b2

Browse files
committed
final for 0.6-1
1 parent 1b71065 commit 8d236b2

3 files changed

Lines changed: 14 additions & 3 deletions

File tree

.Rbuildignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@
1616
^dev$
1717
^\.git$
1818
^CLAUDE\.md$
19+
^outstanding_issues\.md$

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: blavaan
22
Title: Bayesian Latent Variable Analysis
3-
Version: 0.5-10.1476
3+
Version: 0.6-1
44
Authors@R: c(person(given = "Edgar", family = "Merkle",
55
role = c("aut", "cre"),
66
email = "merklee@missouri.edu",

NEWS.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,18 @@
44

55
* The previous MUML method-of-moments approximation for two-level ppp is replaced by an EM-based saturated-model fit that also works under missingness.
66

7-
* Two-level (multilevel) models: ppp is no longer computed inside the compiled Stan program. `test` now defaults to `"none"` for two-level models (as it already did for ordinal/mixed single-level models), and `ppp(fit)` computes the same saturated-model likelihood-ratio statistic on demand in R, calling lavaan's own saturated-model EM algorithm once per retained posterior draw. `fixed.x` variables are supported at the within level, the between level, or both (in different variables); a single variable that is `fixed.x` at both levels simultaneously is not supported.
7+
* For single-level models with ordinal variables, the default posterior predictive p-value is no longer computed inside Stan by comparing the fitted model to a saturated model on the continuous data-augmented y* used for ordinal likelihoods; that comparison tended to overstate ordinal fit. A limited-information (pairwise) alternative is computed instead, entirely in R from saved posterior draws: ordinal-ordinal pairs reuse lavaan's own lavTables() machinery, while ordinal-continuous and continuous-continuous pairs use dedicated deviance/correlation-based statistics. Since this is real, non-trivial post-hoc computation rather than free, `test` now defaults to `"none"` for single-level ordinal/mixed stan/cmdstan models (unless the user explicitly requested a test= value), with the new exported `ppp(fit)` as the on-demand second step. Continuous-only single-level models are unaffected and keep the original Stan-computed value by default.
8+
9+
* Two-level (multilevel) models: ppp is no longer computed inside Stan either, mirroring the single-level ordinal/mixed change above. `test` now defaults to `"none"` for two-level models, and `ppp(fit)` computes the same saturated-model likelihood-ratio statistic on demand in R, calling lavaan's own saturated-model EM algorithm once per retained posterior draw. `fixed.x` variables are supported at the within level, the between level, or both (in different variables); a single variable that is `fixed.x` at both levels simultaneously is not supported. The EM algorithm's tol/max_iter/acceleration settings can be overridden via `ppp(fit, em_control = list(...))`, with unspecified entries falling back to the defaults.
810

911
* Optional within-chain parallelization for single-level models via Stan's reduce_sum() (bcontrol argument use_wcp). Real speedups require target = "cmdstan", which recompiles the model with threading support; threads_per_chain now defaults sensibly (and warns) from the number of available cores when use_wcp is set but threads_per_chain is not.
1012

13+
* Common sampler arguments (e.g. adapt_delta, max_treedepth, cores, method, threads_per_chain) can now be passed directly to blavaan()/bcfa()/bsem()/bgrowth() instead of nested inside bcontrol=list(...); for stan/stanclassic/stancond targets, arguments belonging to rstan's nested control=list(...) are detected and nested automatically. The old fully-nested bcontrol=list(...) interface keeps working unchanged (issue #57).
14+
15+
* target = "cmdstan" has received a round of bug fixes restoring parity with target = "stan", including save.lvs = TRUE, meanstructure = FALSE, and blavInspect(fit, "neff").
16+
17+
* Efficiency improvements to the underlying Stan program, including better respecting the use_suff argument.
18+
1119
* New tidy() and glance() methods (via the generics package) for extracting parameter estimates and model-level summaries as data frames. (contributed by Michael Truong)
1220

1321
* blavInspect(fit, "ci", level = ) provides equal-tailed MCMC-sample-based credible intervals of any width, alongside the existing "hpd" option; summary() and tidy() gain level/hpd arguments and now compute correct MCMC-based credible intervals, Rhat, effective sample size, and posterior median/mode for defined (:=) parameters under target = "stan"/"cmdstan", instead of a Gaussian delta-method approximation for the interval and blank/NA for the rest (issues #2, #98).
@@ -16,7 +24,9 @@
1624

1725
* New (undocumented) mcmcextra$doblocks argument for target = "stan"/"cmdstan": set to FALSE to restore the pre-0.5 behavior of only using an lkj prior when an entire psi/theta correlation matrix is unrestricted, instead of searching for and using lkj priors on unrestricted sub-blocks (issue #97). Not available together with mcmcextra$dosam = TRUE.
1826

19-
* Various other bug fixes, including: incorrect psi/theta correlation-block prior matching for multi-group two-level (multilevel) models; ppmc()/blavFitIndices(rescale = "mcmc") failing with a "subscript out of bounds" error for models with more than one group; and blavCompare() output relying on row/column position (now named) rather than being robust to formatting changes in underlying packages.
27+
* bcfa()/bsem() with target = "stan"/"cmdstan" no longer force a mean structure onto complete-data models by default; a mean structure is now only added when the user explicitly requests one (via meanstructure= or sample.mean=) or the model is two-level (which structurally requires free between-level intercepts). This matches plain lavaan's cfa()/sem() default and also fixes sample.cov-only (moment) input erroring with "problem with translation from lavaan to MCMC syntax".
28+
29+
* Various other bug fixes, including: incorrect psi/theta correlation-block prior matching for multi-group two-level (multilevel) models; ppmc()/blavFitIndices(rescale = "mcmc") failing with a "subscript out of bounds" error for models with more than one group; blavCompare() output relying on row/column position (now named) rather than being robust to formatting changes in underlying packages; blavPredict() erroring on level-2 predictions with newdata (and newdata clusters absent from the original fitted data now score correctly); and missing initial values for the augmented normal variates underlying ordinal data when a model has no free threshold parameters.
2030

2131
* blavaan now raises a clear, explicit error as soon as a model uses lavaan's `<~` operator (composite/formative latent variables), instead of an opaque internal crash. This operator was previously reported (version 0.5-8, below) as failing only under target = "jags"; it in fact fails under every target, since none of blavaan's translation backends handle lavaan's associated "wmat" parameter matrix. `<~` is not currently implemented in blavaan (issue #90); this change only makes that limitation explicit rather than adding support.
2232

0 commit comments

Comments
 (0)