|
4 | 4 |
|
5 | 5 | * 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. |
6 | 6 |
|
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. |
8 | 10 |
|
9 | 11 | * 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. |
10 | 12 |
|
| 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 | + |
11 | 19 | * New tidy() and glance() methods (via the generics package) for extracting parameter estimates and model-level summaries as data frames. (contributed by Michael Truong) |
12 | 20 |
|
13 | 21 | * 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 | 24 |
|
17 | 25 | * 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. |
18 | 26 |
|
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. |
20 | 30 |
|
21 | 31 | * 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. |
22 | 32 |
|
|
0 commit comments