This release fixes the problems that led to the removal of the package from CRAN and a number of
defects in oglasso() and vennLasso(). Several of them change the fitted values that existing code
obtains; those are marked (changes results).
rmarkdown::html_vignette) with pandoc citations, so
building it needs no LaTeX installation. Its TikZ figures are included as images; their
sources are in vignettes/figures-src in the package repository.inst/reference/make_refs.R.natbib. Citations are processed by pandoc, and natbib's author-year
check stopped the vignette from building on CRAN (archived 2023-09-21).LazyData from DESCRIPTION (the package has no data directory).inst/CITATION and the vignette, and
replaced citEntry() by bibentry().family = "gaussian" no longer crash R. This also fixes
vennLasso(one.intercept = TRUE) and the adaptive lasso for nearly separable binomial data.standardize = TRUE (the default) now standardizes x for the gaussian and binomial families, as
documented; it was silently ignored. Coefficients are returned on the original scale.
(changes results)dfmax limits the number of nonzero coefficients, with a warning when the path is stopped.
(changes results)penalty.factor.fused no longer causes valid calls to fail (it is unused).group.weights may be given with one value per group also when an intercept or ungrouped
variables are present.Eigen::Map<Eigen::SparseMatrix> replaces the removed
Eigen::MappedSparseMatrix.x is converted to a dense matrix (the sparse solver did not exist and the call failed).
The fused penalty (fused) is not implemented and now gives an informative error.vennLasso() inherits the changes to oglasso() above. In particular (changes results):
the lambda sequence now starts at the lambda.max of the problem with unpenalized
subpopulation intercepts (for the help example, 0.1454 instead of 0.1465; with
adaptive.lasso = TRUE, 0.0693 instead of 0.1465, where before the first 9 fits were the
null model), so a fit selected by its position in the path (for example fit$beta[, , 21])
refers to a different lambda; paths are no longer cut short once more than nobs coefficients
are nonzero; and fits along the path are now converged (see the warm-start fix above).
The help examples now select fits by BIC or AIC instead of by position.
The effective number of parameters, and so df, aic, bic, aicc and mbic, follow
Section 3.3 of Huling et al. (2018): tr{(H + N lambda A)^(-1) H} over the active set, with
A_j = sum over the groups g containing j of w_g / ||beta_g||. Before, the group weight was in
the denominator, the unpenalized subpopulation intercepts counted (about) zero, and a diagonal
shortcut that assumes x_j'x_j = N was used. The standard errors of the gaussian model use the
same A. (changes results)
Binomial standard errors and confidence intervals (compute.se, conf.int) treat the
subpopulation intercepts as columns of the design: the refit no longer adds a global intercept,
which had left one intercept with an NA standard error and the others with standard errors of
contrasts. (changes results)
Gaussian refitted coefficients (beta.refit, intercept.refit, lower.ci.refit,
upper.ci.refit) are now returned; they were all zero. The refits are carried along the path
when the selected set does not change. (changes results)
Variables that are missing for every observation with a condition are removed only from the
combinations that include that condition, and variables observed only with a condition only
from the combinations that exclude it. Before, the combinations were matched in reversed
order. (changes results when x has such missing values)
A single stratifying condition (a one-column groups) no longer fails.
The intercepts of the subpopulations are left unpenalized when some variable is constant within a subpopulation. Before, the penalty factors were indexed in the wrong order and some intercepts could be shrunk to zero. (changes results)
cv.vennLasso() fits every fold on the lambda sequence of the full-data fit. Before, each fold used
its own sequence, so the cross-validation error averaged fits at different values of lambda.
(changes results)
predict.vennLasso() uses the correct coefficients when newx does not contain every
subpopulation of the fit, works when a subpopulation has a single new observation, and
interpolates correctly when s has several values. (changes results)
Degrees of freedom are now also computed for binomial models with compute.se = TRUE (they
were NA).
Documentation: standardize in vennLasso() scales each subpopulation-specific column over all
observations; the length and order of penalty.factor; the returned df and criteria; the
memory needed by the Cox solver.
The plot() method for cv.vennLasso objects counts nonzero coefficients without the intercepts.
Examples that were wrapped in \dontrun{} now use \donttest{}.
Added a testthat test suite and an R-hub workflow (.github/workflows/rhub.yaml).