estimateMissSBM()’s
control must now be built with the new
missSBM_param() (one named, defaulted argument per option)
instead of a raw list(...), which now errors with a message
pointing at the replacement.missSBM_fit now exposes split(),
merge(), candidates_split() and
candidates_merge() as instance methods, previously inlined
in missSBM_collection’s exploration logic; same search
algorithm, now independently testable.polish(control) (missSBM_fit and
missSBM_collection): node-swap refinement after VEM
convergence, fixing individually misclassified nodes that
split()/merge() cannot reach.vBlocks’s bookkeeping (duplicated/missing entries,
non-smooth ICL/ELBO in plot()). Now fixed and made visible:
missSBM_fit$repair(control) recovers a collapsed fit ; new
occupiedBlocks/ degenerate fields expose any
remaining collapse; bestModel skips degenerate models when
possible and plot() marks them with a distinct point shape;
estimateMissSBM()’s new
stopOnDegenerate/maxConsecutiveDegenerate
controls (default TRUE/2) stop forward exploration from
growing further into a persistently unsupported range.estimate_chain() (missSBM_collection)
/ warmChain control (default FALSE, opt-in):
initializes each model by splitting the already-converged, smaller
neighbor instead of an independent cold clustering, substantially
reducing collapse in practice, at the cost of fitting
vBlocks sequentially rather than in parallel.nloptr is no longer a dependencypartlyObservedNetwork$imputation(): the fill value
for missing dyads was biased low by including not-yet-imputed entries in
its own computation. Known side effect:
doubleStandardSampling_fit’s initial psi bootstrap can
degenerate when the fill value exactly matches the empirical observed
edge rate (refined away by the VEM loop that follows)estimateMissSBM() and fixed several hot-path
inefficiencies: avoidable dense * sparse promotion
overhead, a redundant recomputation of the dense imputed-network matrix,
and an ifelse() evaluating both of its branches
unconditionally. Roughly 3x faster on our benchmark, bit-identical
resultsestimateMissSBM() now sorts/de-duplicates
vBlocks if needed (with a warning), since exploration and
chaining both assume it is strictly increasing.estimateMissSBM()’s control drops the
exploration field: nobody used "forward"/
"backward" alone at that level, only
"both"/"none", so iterates now
doubles as the on/off switch (0 disables exploration
entirely). missSBM_collection$explore() no longer reads a
stored exploration control field either; its
direction argument (default "both") is now a
plain per-call parameter, still available for advanced/internal
use.control$maxMergeCandidates, default 30) instead of always
trying every pairmissSBM_fit$doVEM()’s
step-back: only the SBM was restored, not the sampling model or the
current imputationgetCovarArray() and
kmeans_missSBM()’s seedingsrc/utils.hmissSBM_fit’s polish(),
repair(), candidates_split() and
candidates_merge() gain the same default
control as doVEM(), so they can be called
standalone without building a full control list first;
missSBM_collection’s calls (which always pass an explicit
control list) are unaffected ; missSBM_collection’s
estimate()/polish()/explore() now
share a control list stored at construction, no longer requiring
control on every call.missSBM_collection’s
explore_forward()/explore_backward() into a
shared private explore_direction(), and
missSBM_fit’s
candidates_split()/candidates_merge()’s
trial-fit loop into a shared private
trial_fit_candidates(); verified bit-identical output on
the same fixed-seed scenario used throughout this changelog to diagnose
VEM collapseNEWS.md file to track changes to the
package.
Need a high-speed mirror for your open-source project?
Contact our mirror admin team at info@clientvps.com.
This archive is provided as a free public service to the community.
Proudly supported by infrastructure from VPSPulse , RxServers , BuyNumber , UnitVPS , OffshoreName and secure payment technology by ArionPay.