Nothing
#' @srrstats {G5.0}
#' @srrstats {G5.1}
#' @srrstats {G5.2}
#' @srrstats {G5.2a}
#' @srrstats {G5.2b}
#'
test_that("autoplot works with simple inputs and ziformula and dispformula", {
object_zi <- cglmm(
vit_d ~ X + amp_acro(time, group = "X", period = 12),
data = vitamind,
ziformula = ~ 0 + amp_acro(time, group = "X", period = 12)
)
object_disp <- cglmm(
vit_d ~ X + amp_acro(time, group = "X", period = 12),
data = vitamind,
dispformula = ~ 0 + amp_acro(time, group = "X", period = 12),
)
vdiffr::expect_doppelganger(
"plot with dispformula",
autoplot(object_disp)
)
vdiffr::expect_doppelganger(
"plot with ziformula",
autoplot(object_zi)
)
})
test_that("autoplot works with non-grouped model", {
object <- cglmm(
vit_d ~ amp_acro(time, period = 12),
data = vitamind[vitamind$X == 1, ]
)
# testing autoplot with a simple model
vdiffr::expect_doppelganger(
"non-grouped plot with data",
autoplot(object, superimpose.data = TRUE)
)
vdiffr::expect_doppelganger(
"non-grouped plot with predict ribbon",
autoplot(object, predict.ribbon = TRUE)
)
})
test_that("autoplot works model including ziformula", {
# TODO: come up with some better examples with data that are actually zero-inflated!
object <- cglmm(
vit_d ~ amp_acro(time, group = "X", period = 12),
data = vitamind,
ziformula = ~X
)
# testing autoplot with a simple model
vdiffr::expect_doppelganger(
"simple-ziformula-model",
autoplot(object, superimpose.data = TRUE, predict.ribbon = FALSE)
)
})
test_that("autoplot works model including dispformula", {
# TODO: come up with some better examples with data that are actually overdispersed!
object <- cglmm(
vit_d ~ amp_acro(time, group = "X", period = 12),
data = vitamind,
dispformula = ~X
)
# testing autoplot with a simple model
vdiffr::expect_doppelganger(
"simple-dispformula-model",
autoplot(object, superimpose.data = TRUE, predict.ribbon = FALSE)
)
})
test_that("autoplot works model that has other covariates", {
withr::local_seed(50)
test_data <- vitamind[vitamind$X == 1, ]
test_data$new_cat_var <- sample(
c("a", "b", "c"),
size = nrow(test_data),
replace = TRUE
)
test_data$new_num_var <- rnorm(n = nrow(test_data))
object <- cglmm(
vit_d ~ amp_acro(time, period = 12) + new_cat_var + new_num_var,
data = test_data
)
vdiffr::expect_doppelganger(
"model-with-covariates",
autoplot(
object,
cov_list = list(
new_cat_var = "a",
new_num_var = 1
),
superimpose.data = TRUE
)
)
vdiffr::expect_doppelganger(
"model-with-covariates_not_specified",
autoplot(object)
)
expect_message(autoplot(object, quietly = FALSE),
regex = paste0(
"'cov_list' was not specified, but there are",
" covariates in the original model; the first element of each",
" covariate column from the original dataframe will be used",
" as reference levels:
cov_list = list(new_cat_var = 'c', new_num_var = -0.540933398827827)"
),
fixed = TRUE
)
vdiffr::expect_doppelganger(
"model-with-covariates_some_specified",
autoplot(object,
cov_list = list(new_cat_var = "c")
)
)
expect_message(autoplot(object, cov_list = list(new_cat_var = "c"), quietly = FALSE))
# test for when time is a covariate
object_with_time_covariate <- cglmm(
vit_d ~ time + amp_acro(time, period = 12) + new_cat_var + new_num_var,
data = test_data
)
vdiffr::expect_doppelganger(
"plot_with_time_as_covariate",
autoplot(object_with_time_covariate)
)
object_with_time_covariate_2 <- cglmm(
vit_d ~ time + X + amp_acro(time, period = 12),
data = vitamind
)
vdiffr::expect_doppelganger(
"plot_with_time_as_covariate_2",
autoplot(object_with_time_covariate_2)
)
})
test_that("autoplot works with simple inputs", {
object <- cglmm(
vit_d ~ amp_acro(time, group = "X", period = 12),
data = vitamind
)
# testing autoplot with a simple model
vdiffr::expect_doppelganger(
"plot with superimposed data",
autoplot(object, superimpose.data = TRUE)
)
vdiffr::expect_doppelganger(
"plot with predict ribbon enabled",
autoplot(object, predict.ribbon = TRUE)
)
})
test_that("autoplot produces error messages", {
withr::local_seed(50)
# Testing error messages
# test 'x_str' argument
object <- cglmm(
vit_d ~ 1 + amp_acro(time, group = "X", period = 12),
data = vitamind
)
expect_error(
autoplot(object, x_str = 10),
regex = paste(
"'x_str' must be string corresponding to a group",
"name in cglmm object"
),
fixed = TRUE
)
# test plots with different groups on different components
test_vitamind <- vitamind
test_vitamind$Z <- rbinom(length(test_vitamind$X), 3, prob = 0.5)
object <- cglmm(
vit_d ~ X + amp_acro(
time,
n_components = 3,
group = c("Z", NA, "X"),
period = c(12, 10, 8)
),
data = test_vitamind
)
vdiffr::expect_doppelganger(
"check plots with multiple groups",
autoplot(object, x_str = c("X", "Z"), pred.length.out = 200)
)
vdiffr::expect_doppelganger(
"check a simple plot command",
autoplot(object)
)
# test 'type' argument
object <- cglmm(
vit_d ~ 1 + amp_acro(time, group = "X", period = 12),
data = vitamind
)
expect_error(
autoplot(object, type = 20),
regex = paste(
"'type' must be a string. See type in ?predict",
"for more information about valid inputs"
),
fixed = TRUE
)
# test 'xlims' argument
object <- cglmm(
vit_d ~ 1 + amp_acro(time, group = "X", period = 12),
data = vitamind
)
expect_error(
autoplot(object, xlims = c(2, 1)),
regex = paste(
"'xlims' must be a vector with the first element",
"being the lower x coordinate, and the second being",
"the upper x coordinate"
),
fixed = TRUE
)
# test 'pred.length.out' argument
object <- cglmm(
vit_d ~ 1 + amp_acro(time, group = "X", period = 12),
data = vitamind
)
expect_error(
autoplot(object, pred.length.out = 100.5),
regex = "'pred.length.out' must be an integer greater than 0", fixed = TRUE
)
# test 'superimpose.data' argument
object <- cglmm(
vit_d ~ 1 + amp_acro(time, group = "X", period = 12),
data = vitamind
)
expect_error(
autoplot(object, superimpose.data = 10),
regex = paste(
"'superimpose.data' must be a logical argument,",
"either TRUE or FALSE"
),
fixed = TRUE
)
# test 'data_opacity' argument
object <- cglmm(
vit_d ~ 1 + amp_acro(time, group = "X", period = 12),
data = vitamind
)
expect_error(
autoplot(object, data_opacity = 1.5),
regex = "data_opacity' must be a number between 0 and 1 inclusive",
fixed = TRUE
)
# test 'predict.ribbon' argument
object <- cglmm(
vit_d ~ 1 + amp_acro(time, group = "X", period = 12),
data = vitamind
)
expect_error(
autoplot(object, predict.ribbon = 10),
regex = "'predict.ribbon' must be a logical argument, either TRUE or FALSE",
fixed = TRUE
)
# check that plots are generated correctly
vdiffr::expect_doppelganger(
"check predict.ribbon arg",
autoplot(object, predict.ribbon = TRUE)
)
vdiffr::expect_doppelganger("check x_str arg", autoplot(object, x_str = NULL))
vdiffr::expect_doppelganger(
"check superimpose.data arg",
autoplot(object, x_str = "X", superimpose.data = TRUE)
)
vdiffr::expect_doppelganger(
"chceck that multiple args work",
autoplot(object, x_str = NULL, predict.ribbon = TRUE, superimpose.data = TRUE)
)
})
test_that("autoplot works mixed models", {
withr::local_seed(50)
# test mixed model plots
f_sample_id <- function(id_num,
n = 30,
mesor,
amp,
acro,
family = "gaussian",
sd = 0.2,
period,
n_components,
beta.group = TRUE) {
data <- simulate_cosinor(
n = n,
mesor = mesor,
amp = amp,
acro = acro,
family = family,
sd = sd,
period = period,
n_components = n_components
)
data$subject <- id_num
data
}
# generate a dataset with a random effect variable comprising 30 subjects
dat_mixed <- do.call(
"rbind",
lapply(1:5, function(x) {
f_sample_id(
id_num = x,
mesor = rnorm(1, mean = 0, sd = 1),
amp = rnorm(1, mean = 3, sd = 0.5),
acro = rnorm(1, mean = 1.5, sd = 0.2),
period = 24,
n_components = 1
)
})
)
dat_mixed$subject <- as.factor(dat_mixed$subject)
mixed_mod <- cglmm(
Y ~ amp_acro(times,
n_components = 1,
period = 24
) + (1 + amp_acro1 | subject),
data = dat_mixed
)
# test that the plots return expected figures for different configurations
vdiffr::expect_doppelganger("check simple plot", autoplot(mixed_mod))
vdiffr::expect_doppelganger(
"test superimpose",
autoplot(mixed_mod,
x_str = NULL,
superimpose.data = TRUE
)
)
expect_error(autoplot(mixed_mod, ranef_plot = "group"))
vdiffr::expect_doppelganger(
"test ranef_plot arg",
autoplot(mixed_mod,
ranef_plot = "subject",
superimpose.data = TRUE
)
)
# testing a more complicated mixed model with multiple groups
f_sample_id_2 <- function(id_num,
n = 30,
mesor,
amp,
acro,
family = "gaussian",
sd,
beta.sd,
period,
n_components,
beta.mesor,
beta.amp,
beta.acro,
beta.group = TRUE) {
data <- simulate_cosinor(
n = n,
mesor = mesor,
amp = amp,
acro = acro,
family = family,
sd = sd,
beta.sd = beta.sd,
period = period,
n_components = n_components,
beta.mesor = beta.mesor,
beta.amp = beta.amp,
beta.acro = beta.acro,
beta.group = beta.group
)
if (id_num %% 2 == 0) {
# data$group = 1
rows_to_keep <- seq_len(nrow(data) %/% 2)
data <- data[-rows_to_keep, ]
} else {
# data$group =0
rows_to_delete <- seq_len(nrow(data) %/% 2)
data <- data[rows_to_delete, ]
}
data$subject <- id_num
data
}
dat_mixed_2 <- do.call(
"rbind",
lapply(1:15, function(x) {
f_sample_id_2(
id_num = x,
mesor = rnorm(1, mean = 0, sd = 1),
amp = rnorm(1, mean = 3, sd = 0.5),
acro = rnorm(1, mean = 1.5, sd = 0.2),
beta.mesor = rnorm(1, mean = 10, sd = 1),
beta.amp = rnorm(1, mean = 5, sd = 0.5),
beta.acro = rnorm(1, mean = 1.5, sd = 0.2),
period = 24,
n_components = 1,
sd = 0.2,
beta.sd = 0.2
)
})
)
dat_mixed_2$subject <- as.factor(dat_mixed_2$subject)
mixed_mod_2 <- cglmm(
Y ~ group + amp_acro(times, n_components = 1, period = 24, group = "group") +
(1 + amp_acro1 | subject),
data = dat_mixed_2
)
# test that the plots return expected figures for different configurations
vdiffr::expect_doppelganger(
"test_complex_mixed_mod",
autoplot(mixed_mod_2, superimpose.data = TRUE, ranef_plot = "subject")
)
vdiffr::expect_doppelganger(
"test group arg",
autoplot(
mixed_mod_2,
x_str = "group",
superimpose.data = TRUE,
ranef_plot = "subject"
)
)
vdiffr::expect_doppelganger(
"test superimpose arg",
autoplot(mixed_mod_2, x_str = "group", superimpose.data = TRUE)
)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.