tests/test-refit.R) pins the corrected behaviour.An optimisation pass over the Metropolis-within-Gibbs sweep. No interface changes and no change to what any criterion reports: the samplers do the same search without repeating work that a single-coordinate proposal cannot have changed.
p candidates, although a single-coordinate flip changes
that list in one position. The coordinate is now spliced in or out at its sorted
position, making the per-proposal bookkeeping linear in the model size instead of in
p. Applied to the gaussian/binomial/poisson sweep and to the linear-mixed sweep,
which carried a duplicate of the same code.dtrsm. A sweep visits
every candidate but changes the model only when a move is accepted, which for a
criterion that fits the data is well under once per sweep, so one factorisation serves
the whole sweep.Each batch is used only where it repays its own construction and is well conditioned:
for models at most half the size cap, for at most 64 coefficients, for candidate
columns not already explained to within 1e-3 by the current model, and -- for the
iterative families, whose panel is more expensive to build -- only while the squared
model size stays below the candidate count, which keeps it out of the short
block-screening sweeps of glmIBGS(). Every removal, the Cox sampler, and any run
gated out by those conditions keep their existing path.
The spliced list and the shared IRLS weights are bit-identical by construction. The spliced list is in the same ascending order the rescan produced, so every candidate fit sees the same matrix, and the cached weights are the values the per-proposal code computed.
The two batched scorers compute the same quantities by a different arithmetic path and so are not guaranteed bit-identical, although in testing they were. Accepted models are re-fitted directly, as the iterative families already were, so every recorded criterion and every collinearity verdict still comes from the same factorisation as before and only an accept/reject decision can move -- and only where the two agree to within rounding of a Metropolis threshold, after which the chain is a different realisation of the same target.
ebic.gamma now defaults to 1, the value Chen & Chen (2012) show to be
selection-consistent for any p = O(n^kappa); it was 0.5, which qualifies only
while p < n and so was below the threshold in the ultrahigh-dimensional
problems the package targets.ebic.gamma is held in [max(0, 1 - log(n)/(2*log(p))), 1] — a value
below that consistency floor is raised to it, one above 1 lowered, with a message
reporting the change. The floor uses the event count for the Cox samplers,
matching the log(d) in their own penalty.exBIC documentation now cites Chen & Chen (2012), Extended BIC for
small-n-large-P sparse GLM, whose 2 nu(s) gamma log P form is the one
implemented; the 2008 Biometrika paper it previously cited uses the
binomial-coefficient form. Both are listed in the package references.start = c("null", "full") removed. Every chain starts from the empty model,
which was already the default and avoids the ill-conditioned saturated start
where the criterion (notably AICc) can be degenerate.coxIBGS() and lmeIBGS() ignored start and
began from the full candidate set. Under heavy censoring that set can reach the
event count d, where the AICc correction 2*npred*(npred+1)/(d - npred - 1)
changes sign and a model saturated in the events scores far below any honest
one, trapping the chain. Those runs now start empty like every other chain.fast removed from glmGibbs()/glmIBGS(). Binomial and poisson proposals are
always scored with one warm-started IRLS step, with accepted models re-fitted to
full convergence — the former default, and strictly faster than the alternative
for the same reported criteria.Initial CRAN release.
glmIBGS(), coxIBGS(), lmeIBGS()) and matching plain block Gibbs samplers
(glmGibbs(), coxGibbs(), lmeGibbs()) for ultrahigh-dimensional problems.AIC, BIC, AICc or extended BIC (exBIC).start = c("null", "full") sets the initial model of the Gibbs chain(s); the
default "null" starts from the empty model and grows, avoiding the
ill-conditioned full-model start.permute = TRUE (the default) draws a fresh random coordinate permutation
(Fisher–Yates) each Gibbs sweep, so every coordinate is updated exactly once per
sweep; permute = FALSE restores a fixed in-order sweep.glmGibbs()/glmIBGS() accept an opt-in fast = TRUE for the binomial/poisson
families, scoring each single-coordinate proposal with one warm-started IRLS step
and re-fitting only accepted models to full convergence (reported criteria and
coefficients stay exact).n.cores) and an optional
near-collinearity guard (cor.check).n.models models, summarized in C so the returned
object stays compact even for thousands of predictors.predict(), fitted() and coef() average over the retained models with
smooth-SIC (BMA-style) weights, on the link or response scale; a single retained
model can be selected with average = FALSE. Conditional prediction with
random-effect BLUPs is available for lme fits.print() and summary() for the fit, with selected-variable and top-model
tables and a convergence-diagnostics block.plot() dispatches to the diagnostics, also exported individually:
plotICtrace() (criterion trace), plotMargProb() (marginal inclusion
probabilities as a dot-and-whisker plot), plotModelFreq() (top-model visit
frequencies), plotGelman() and plotAutocorr(). plotMargProb() and
plotModelFreq() accept horizontal = TRUE for a horizontal layout.