tests/testthat/test-lucid-normal-1-layer.R

# LUCID - one omics, normal outcome


test_that("check estimations of LUCID with normal outcome (K = 2)", {
  # run LUCID model
  G <- sim_data$G[1:200, ]
  Z <- sim_data$Z[1:200, ]
  Y_normal <- sim_data$Y_normal[1:200, ]
  cov <- sim_data$Covariate[1:200, ]
  X <- sim_data$X[1:200]
  # i <- sample(1:2000, 1)
  i <- 1008
  # cat(paste("test1 - seed =", i, "\n"))
  invisible(capture.output(fit1 <- lucid(G = G,
                                         Z = Z,
                                         Y = Y_normal,
                                         CoY = cov,
                                         lucid_model = "early",
                                         family = "normal",
                                         K = 2,
                                         seed = i)))
  pars <- fit1
  beta_causal <- mean(abs(pars$res_Beta[2, 2:5]))
  beta_non <- mean(abs(pars$res_Beta[2, 6:10]))
  mu_causal <- mean(abs(pars$res_Mu[1, 1:5] - pars$res_Mu[2, 1:5]))
  mu_non <- mean(abs(pars$res_Mu[1, 6:10] - pars$res_Mu[2, 6:10]))
  gamma_causal <- as.numeric(abs(pars$res_Gamma$beta[1] - pars$res_Gamma$beta[2]))
  gamma_non <- as.numeric(mean(abs(pars$res_Gamma$beta[3:4])))
  sigma <- mean(unlist(fit1$res_Sigma))

  # check parameters via stable structural contrasts
  expect_true(is.finite(beta_causal))
  expect_true(is.finite(beta_non))
  expect_gt(beta_causal, beta_non)
  expect_gt(mu_causal, mu_non)
  expect_true(gamma_causal > gamma_non)
  expect_true(is.finite(sigma))

  # check summary_lucid
  sum_fit1 <- summary(fit1)
  expect_equal(class(fit1), "early_lucid")
  expect_equal(class(sum_fit1), "sumlucid_early")

  # check predict_lucid early pred.x contract
  pred <- predict_lucid(
    model = fit1,
    lucid_model = "early",
    G = G,
    Z = Z,
    Y = Y_normal,
    CoY = cov
  )
  expect_type(pred$pred.x, "double")
  expect_equal(length(pred$pred.x), nrow(G))
  expect_true(all(pred$pred.x %in% 0:(fit1$K - 1)))
  expect_true(all(is.finite(pred$pred.x)))
  expect_true(is.matrix(pred$inclusion.p))
  expect_equal(dim(pred$inclusion.p), c(nrow(G), fit1$K))
  expect_equal(rowSums(pred$inclusion.p), rep(1, nrow(G)), tolerance = 1e-6)
})


test_that("check variable selection on G", {
  # run LUCID model
  G <- sim_data$G[1:200, ]
  Z <- sim_data$Z[1:200, ]
  Y_normal <- sim_data$Y_normal[1:200, ]
  cov <- sim_data$Covariate[1:200, ]
  X <- sim_data$X[1:200]
  # i <- sample(1:2000, 1)
  i <- 1008
  # cat(paste("test2 - seed =", i, "\n"))
  invisible(capture.output(fit1 <- lucid(G = G,
                                         Z = Z,
                                         Y = Y_normal,
                                         CoY = cov,
                                         lucid_model = "early",
                                         family = "normal",
                                         K = 2,
                                         seed = i,

                                         Rho_G = 0.05)))

  # check parameters
  expect_equal(class(fit1$select$selectG), "logical")
  expect_equal(as.vector(fit1$select$selectG),
               rep(TRUE, 4))
})


test_that("check variable selection on Z", {
  # run LUCID model
  G <- sim_data$G[1:200, ]
  Z <- sim_data$Z[1:200, ]
  Y_normal <- sim_data$Y_normal[1:200, ]
  cov <- sim_data$Covariate[1:200, ]
  X <- sim_data$X[1:200]
  # i <- sample(1:2000, 1)
  i <- 1008
  # cat(paste("test3 - seed =", i, "\n"))
  invisible(capture.output(fit1 <- lucid(G = G,
                                         Z = Z,
                                         Y = Y_normal,
                                         CoY = cov,
                                         lucid_model = "early",
                                         family = "normal",
                                         K = 2,
                                         seed = i,

                                         init_par = "random",
                                         Rho_Z_Mu = 13,
                                         Rho_Z_Cov = 0.05)))

  # check parameters
  expect_equal(class(fit1$select$selectG), "logical")
})

Try the LUCIDus package in your browser

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

LUCIDus documentation built on March 11, 2026, 9:06 a.m.