The relax argument of pic() has been removed. To debias the
coefficients, refit on fit$selected with the estimator of your choice
(e.g. lm() or glm()).
For Cox fits, predict(type = "response") now returns the relative risk
exp(eta), as in glmnet, instead of the linear predictor, and coef()
no longer has an (Intercept) row.
For SCAD and MCP, the solver now follows Section 3.3 of the paper: the
l1 path runs down to the target lambda, and the SCAD / MCP stage starts
from that l1 solution (it previously started from the l1 solution at the
penultimate path value). Selected supports may differ slightly from
previous versions.
The default number of Monte Carlo draws is now 2000 everywhere, as in the
paper: lambda_pdb(), phase_transition() and pdb_asymptotic() used
5000.
With intercept = FALSE and standardize = TRUE, the (Intercept) row
of coef() now absorbs the centering of the columns on the original
scale, so that coef() reproduces predict(). It is zero when X is
centered.
fit$beta is now a plain numeric vector (it was a one-column matrix).
pic() accepts a pic.lambda_pdb object as lambda, typically
fit$lambda_pdb, to reuse a calibration across penalties while keeping
it on the new fit for pdb_summary() and plot(). Its family and design
dimensions are checked.
New lambda_seed argument of pic() and seed argument of
lambda_pdb() for a reproducible PDB calibration. Only the calibration is
seeded: the global random stream is restored afterwards. Default NULL.
Binomial responses may be logical (TRUE mapped to 1) or a two-level
factor (second level mapped to 1). assess() maps new responses with the
training levels.
Fits store the matched call, the total number of FISTA iterations
n_iter and a converged flag, and pic() warns when the final FISTA
step reaches maxit.
lambda_pdb() results also store seed, family, n and p.
phase_transition():
n_failed
column of results and reported in a single warning (they were silently
counted as failed recoveries);parallel = TRUE, the caller's future plan is restored on exit
(it was reset to sequential), and workers defaults to
future::availableCores(omit = 1), which honors the core limits set by
CRAN or a scheduler.feature_effects_on_survival() failed on Cox fits with
standardize = FALSE.
A constant column of X triggered a spurious "does not appear
standardized" warning. Constant columns are also detected robustly to
rounding.
Arguments of pic() and lambda_pdb() are validated with explicit
messages. Previously, e.g., lambda = c(0.1, 0.2) gave a cryptic error,
lambda = -1 produced NaNs and lambda_alpha = 0 an infinite lambda.
predict() reports a mismatch between the number of columns of newx
and of the training X.
print() of a phase_transition() result listed no curve, and print()
of a family descriptor missed its final newline.
Gumbel family:
lambda_max and
the "mc_exact" calibration, are now the joint location-scale
maximum-likelihood estimates (previously a moment-based intercept
followed by a conditional scale estimate);assess() reports the deviance with the scale profiled at its
maximum-likelihood estimate instead of a moment estimate.The Monte Carlo PDB calibration processes the draws in blocks, which
bounds its memory (it allocated two n x n_simu matrices, about 640 MB
for n = 20000) without changing the result for a given seed. The Cox
permutation calibration stores the simulated events as bytes.
concordance_index() is computed in C++ in O(n log n) time and O(n)
memory instead of O(n^2) matrices, and cox_partial_log_likelihood() no
longer loops over the unique times.
The Cox solver evaluates the loss and its gradient in a single pass over the risk sets and no longer records unused per-iteration diagnostics.
The per-column value grids used by feature_effects_on_survival() are
only computed for Cox fits (they were computed and discarded for every
family, which dominated preprocessing for wide designs).
feature_effects_on_survival() predicts all values in one call.
future and future.apply move from Imports to Suggests: they are only
needed for phase_transition(parallel = TRUE). parallel is no longer
used.Fixed the documentation of lambda_pdb() (probability of selecting a
variable under the null, tightness of the Bonferroni bound), of the
selected and beta components of a fit, and of the value returned by
phase_transition(), plus several typos in the vignette (formulas of the
Gaussian and exponential objectives, PBD, section references).
The vignette comparison with glmnet uses random signs for the non-zero
coefficients, as stated in the text.
predict() for Cox fits now accepts type = "survival", which returns
subject-specific survival curves (a list with time and survival
components). This replaces the standalone predict_survival_function(),
which has been removed.predict_survival_function() has been removed. Use
predict(object, newx, type = "survival") instead.fista.cpp and fista_cox.cpp now have internal linkage (anonymous
namespaces).coef() now returns a one-column sparse matrix instead of a two-column data frame.
Zero coefficients are printed as ., which keeps the display compact in high dimensions.
Added a summary() method for pic fits.
intercept = FALSE is now permitted for every family. Previously it raised
an error for non-Cox families when standardize = TRUE. When
intercept = FALSE, the data are assumed to be centered.
Standardized the input-validation error messages (consistent back-quoting
of argument names and call. = FALSE).