tests/testthat/test_robStepSplitReg.R

# --------------------------------------------------
# Test Script - Output from cv.SplitGLM Function
# --------------------------------------------------

# Required libraries
library(mvnfast)
library(robStepSplitReg)

# Context of test script
context("Verify output of robStepSplitReg function.")

# There should be an error if we want to compute the IF TS, and no returns are provided
test_that("Error in the robStepSplitReg function.", {

  # Simulation parameters
  n <- 50
  p <- 500
  rho <- 0.5
  p.active <- 100
  snr <- 3
  contamination.prop <- 0.2
  
  # Setting the seed
  set.seed(0)
  
  # Simulation of beta vector
  true.beta <- c(runif(p.active, 0, 5)*(-1)^rbinom(p.active, 1, 0.7), rep(0, p - p.active))
  
  # Simulation of uncontaminated data 
  sigma.mat <- matrix(0, nrow = p, ncol = p)
  sigma.mat[1:p.active, 1:p.active] <- rho
  diag(sigma.mat) <- 1
  x <- mvnfast::rmvn(n, mu = rep(0, p), sigma = sigma.mat)
  sigma <- as.numeric(sqrt(t(true.beta) %*% sigma.mat %*% true.beta)/sqrt(snr))
  y <- x %*% true.beta + rnorm(n, 0, sigma)
  
  # Contamination of data 
  contamination_indices <- 1:floor(n*contamination.prop)
  k_lev <- 2
  k_slo <- 100
  x_train <- x
  y_train <- y
  beta_cont <- true.beta
  beta_cont[true.beta!=0] <- beta_cont[true.beta!=0]*(1 + k_slo)
  beta_cont[true.beta==0] <- k_slo*max(abs(true.beta))
  for(cont_id in contamination_indices){
    
    a <- runif(p, min = -1, max = 1)
    a <- a - as.numeric((1/p)*t(a) %*% rep(1, p))
    x_train[cont_id,] <- mvnfast::rmvn(1, rep(0, p), 0.1^2*diag(p)) + k_lev * a / as.numeric(sqrt(t(a) %*% solve(sigma.mat) %*% a))
    y_train[cont_id] <- t(x_train[cont_id,]) %*% beta_cont
  }
  
  # # Ensemble models
  # ensemble_fit <- robStepSplitReg(x_train, y_train,
  #                                 n_models = 5,
  #                                 model_saturation = c("fixed", "p-value")[1],
  #                                 alpha = 0.05, model_size = n - 1,
  #                                 robust = TRUE,
  #                                 compute_coef = TRUE,
  #                                 en_alpha = 1/4)
  # 
  # # Ensemble coefficients
  # ensemble_coefs <- coef(ensemble_fit, group_index = 1:ensemble_fit$n_models)
  # sens_ensemble <- sum(which((ensemble_coefs[-1]!=0)) <= p.active)/p.active
  # spec_ensemble <- sum(which((ensemble_coefs[-1]!=0)) <= p.active)/sum(ensemble_coefs[-1]!=0)
  # 
  # # Simulation of test data
  # m <- 2e3
  # x_test <- mvnfast::rmvn(m, mu = rep(0, p), sigma = sigma.mat)
  # y_test <- x_test %*% true.beta + rnorm(m, 0, sigma)
  # 
  # # Prediction of test samples
  # ensemble_preds <- predict(ensemble_fit, newx = x_test, 
  #                           group_index = 1:ensemble_fit$n_models,
  #                           dynamic = FALSE)
  # mspe_ensemble <- mean((y_test - ensemble_preds)^2)/sigma^2
  
  expect_vector(numeric(ncol(x_train)+1))

})

Try the robStepSplitReg package in your browser

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

robStepSplitReg documentation built on Aug. 21, 2025, 5:26 p.m.