tests/testthat/test_predict.R

library(pense)
library(testthat)

test_that("predict(pense) with multiple alpha & solutions", {
  skip_if_not(nzchar(Sys.getenv('PENSE_TEST_FULL')),
              message = 'Environment variable `PENSE_TEST_FULL` not defined.')

  n <- 50L
  p <- 10L

  nlambda <- 25L

  set.seed(123)
  x <- matrix(rcauchy(n * p), ncol = p)
  y <- 2 + rowSums(x[, 1:5]) / 5 + rnorm(n, sd = 4)
  y[1:4] <- 10 * rowSums(x[1:4, 6:7]) + rnorm(4, sd = 0.2)
  y[5:8] <- 10 * rowSums(x[5:8, 6:7]) + rnorm(4, sd = 0.2)

  pr <- pense_cv(x, y,
                 cv_k = 2,
                 cv_repl = 2,
                 alpha = c(0.1, 0.8),
                 nlambda = nlambda,
                 ncores = 2L,
                 bdp = 0.25,
                 sparse = FALSE, eps = 1e-8)

  expect_equal(pr$alpha, c(0.1, 0.8))
  expect_type(pr$lambda, 'list')
  expect_type(pr$lambda[[1L]], 'double')
  expect_type(pr$lambda[[2L]], 'double')
  expect_length(pr$lambda[[1L]], nlambda)
  expect_length(pr$lambda[[2L]], nlambda)
  expect_length(pr$estimates, 2 * nlambda)

  expect_invisible(plot(pr))
  expect_invisible(plot(pr, alpha = 0.1))
  expect_invisible(plot(pr, alpha = 0.8))
  expect_error(plot(pr, alpha = 0.3), regexp = "available")

  expect_type(coef(pr, lambda = pr$lambda[[1]][[5]], alpha = 0.1), 'double')
  expect_type(coef(pr, lambda = pr$lambda[[1]][[5]], alpha = 0.8), 'double')
  expect_warning(expect_type(coef(pr, lambda = pr$lambda[[1]][[5]], alpha = c(0.1, 0.8)), 'double'))
  expect_warning(coef(pr, lambda = pr$lambda[[1]][[5]]), regexp = 'Using first value')
})

test_that("predict(pense_cv) with multiple alpha & solutions", {
  skip_if_not(nzchar(Sys.getenv('PENSE_TEST_FULL')),
              message = 'Environment variable `PENSE_TEST_FULL` not defined.')

  n <- 50L
  p <- 10L

  nlambda <- 25L

  set.seed(123)
  x <- matrix(rcauchy(n * p), ncol = p)
  y <- 2 + rowSums(x[, 1:5]) / 5 + rnorm(n, sd = 4)

  max_solutions <- 10

  pr <- pense_cv(x, y,
                 cv_k = 3, cv_repl = 10,
                 fit_all = TRUE,
                 alpha = c(0.1, 0.8),
                 nlambda = nlambda,
                 nlambda_enpy = 5,
                 max_solutions = max_solutions,
                 ncores = 2L,
                 bdp = 0.25,
                 sparse = FALSE, eps = 1e-8,
                 enpy_opts = enpy_options(retain_max = 5, en_algorithm_opts = en_lars_options()),
                 algorithm_opts = mm_algorithm_options(en_algorithm_opts = en_lars_options()))

  expect_equal(pr$alpha, c(0.1, 0.8))
  expect_type(pr$lambda, 'list')
  expect_type(pr$lambda[[1L]], 'double')
  expect_type(pr$lambda[[2L]], 'double')
  expect_length(pr$lambda[[1L]], nlambda)
  expect_length(pr$lambda[[2L]], nlambda)
  expect_true(length(pr$estimates) >= 2 * nlambda)
  expect_true(length(pr$estimates) <= 2 * max_solutions * nlambda)
  expect_length(pr$cvres$lambda, 2 * nlambda)
  expect_length(pr$cvres$alpha, 2 * nlambda)
  expect_length(pr$cvres$cvavg, 2 * nlambda)
  expect_length(pr$cvres$cvse, 2 * nlambda)

  expect_invisible(plot(pr, what = 'cv'))
  expect_invisible(plot(pr, what = 'coef'))
  expect_invisible(plot(pr, what = 'coef', alpha = 0.1))
  expect_invisible(plot(pr, what = 'coef', alpha = 0.8))
  expect_error(plot(pr, what = 'coef', alpha = 0.3), regexp = "available")
  expect_error(plot(pr, what = 'cv', alpha = 0.3), regexp = "available")

  expect_type(coef(pr), 'double')
  expect_type(coef(pr, lambda = 'min'), 'double')
  expect_type(coef(pr, alpha = 0.1), 'double')
  expect_type(coef(pr, alpha = 0.8), 'double')
  expect_error(coef(pr, alpha = 0.3), regexp = "not fit")
})

Try the pense package in your browser

Any scripts or data that you put into this service are public.

pense documentation built on Jan. 27, 2026, 5:06 p.m.