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).