context("test-plnfamily")
data(trichoptera)
trichoptera <- prepare_data(trichoptera$Abundance, trichoptera$Covariate)
test_that("PLNfamily: main function, field access and methods", {
X <- model.matrix(Abundance ~ Group, data = trichoptera)
Y <- as.matrix(trichoptera$Abundance)
O <- matrix(0, nrow = nrow(Y), ncol = ncol(Y))
n <- nrow(Y); p <- ncol(Y); d <- ncol(X)
## extract the data matrices and weights
ctrl <- PLNmodels:::PLN_param()
## Simple PLN models
model1 <- PLN(Abundance ~ 1, data = trichoptera)
model2 <- PLN(Abundance ~ Group, data = trichoptera)
## instantiate with unnamed matrices
models <- PLNmodels:::PLNfamily$new(responses = unname(Y),
covariates = unname(X),
offsets = NULL,
weights = NULL,
control = ctrl)
## Set params (hacky)
models$.__enclos_env__$private$params <- c(0.1, 3)
models$models <- list(model1, model2)
## Check default names
expect_equal(dimnames(models$responses),
list(as.character(1:n), as.character(1:p)))
expect_equal(dimnames(models$covariates),
list(as.character(1:n), as.character(1:d)))
## Check print methods
expect_equal(capture_output(models$show()),
capture_output(models$print()))
expect_output(models$show(),
"--------------------------------------------------------
COLLECTION OF 2 POISSON LOGNORMAL MODELS
--------------------------------------------------------", fixed = TRUE)
## Check extractor via parameter value
expect_equal(models$getModel(0.1), model1)
expect_equal(models$getModel(3), model2)
expect_warning(res <- models$getModel(1),
paste("No such a model in the collection. Acceptable parameter values can be found via",
"$ranks (for PCA)",
"$clusters (for mixture models)",
"$penalties (for network)",
"Returning model with closest value. Requested: 1 , returned: 0.1",
sep = "\n"), fixed = TRUE)
expect_equal(res, model1)
## Check convergence
# Commented to suppred purr warnings
# expect_equal(class(models$convergence), "data.frame")
# expect_named(models$convergence, as.character(c("param", "nb_param", names(model1$optim_par))))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.