context("test-bayesglm -- Lrnr_bayesglm")
library(dplyr)
library(arm)
library(SuperLearner)
data(cpp_imputed)
covars <- c(
"apgar1", "apgar5", "parity", "gagebrth", "mage", "meducyrs",
"sexn"
)
outcome <- "haz"
task <- sl3_Task$new(cpp_imputed,
covariates = covars,
outcome = outcome
)
test_that("Lrnr_bayesglm produces results matching those of arm::bayesglm", {
# get predictions from Lrnr_* wrapper
set.seed(1234)
lrnr_bayesglm <- make_learner(Lrnr_bayesglm)
fit <- lrnr_bayesglm$train(task)
preds <- fit$predict(task)
# get predictions from classic implementation
set.seed(1234)
fit_classic <- arm::bayesglm(
haz ~ apgar1 + apgar5 + parity + gagebrth + mage + meducyrs + sexn,
data = cpp_imputed
)
preds_classic <- predict(fit_classic, type = "response")
# check equality of predictions
expect_equal(preds, as.numeric(preds_classic))
})
test_that("Lrnr_bayesglm results match those of legacy SuperLearner", {
# get predictions from Lrnr_* wrapper
set.seed(1234)
lrnr_bayesglm_sl3 <- make_learner(Lrnr_bayesglm)
fit_sl3 <- lrnr_bayesglm_sl3$train(task)
preds_sl3 <- fit_sl3$predict(task)
# get predictions from the legacy super learner
set.seed(1234)
lrnr_legacy_bayesglm <- Lrnr_pkg_SuperLearner$new("SL.bayesglm")
fit_legacy <- lrnr_legacy_bayesglm$train(task)
preds_legacy <- fit_legacy$predict(task)
# check equality of predictions
expect_equal(preds_sl3, as.numeric(preds_legacy))
})
test_that("Lrnr_bayesglm makes training predictions for continuous outcome", {
con_covars <- c(
"apgar1", "apgar5", "parity", "gagebrth", "mage", "meducyrs",
"sexn"
)
con_outcome <- "haz"
con_task <- sl3_Task$new(cpp_imputed,
covariates = con_covars,
outcome = con_outcome
)
lrnr_bayesglm <- make_learner(Lrnr_bayesglm)
fit <- lrnr_bayesglm$train(con_task)
preds <- fit$predict(con_task)
expect_equal(sl3:::safe_dim(preds)[1], length(con_task$Y))
})
test_that("Lrnr_bayesglm makes training predictions for binary outcome", {
bin_covars <- c(
"apgar1", "apgar5", "parity", "gagebrth", "mage", "meducyrs",
"sexn"
)
bin_outcome <- "smoked"
bin_task <- sl3_Task$new(cpp_imputed,
covariates = bin_covars,
outcome = bin_outcome
)
lrnr_bayesglm <- Lrnr_bayesglm$new(family = binomial())
fit <- lrnr_bayesglm$train(bin_task)
preds <- fit$predict(bin_task)
expect_equal(sl3:::safe_dim(preds)[1], length(bin_task$Y))
})
test_that("Lrnr_bayesglm makes out of sample predictions", {
cpp_imputed_1 <- sample_n(cpp_imputed, 800, relpace = TRUE)
cpp_imputed_2 <- sample_n(cpp_imputed, 200, replace = TRUE)
task_1 <- sl3_Task$new(cpp_imputed_1,
covariates = covars,
outcome = outcome
)
task_2 <- sl3_Task$new(cpp_imputed_2,
covariates = covars,
outcome = outcome
)
lrnr_bayesglm <- make_learner(Lrnr_bayesglm)
fit <- lrnr_bayesglm$train(task_1)
preds_2 <- fit$predict(task_2)
expect_equal(sl3:::safe_dim(preds_2)[1], length(task_2$Y))
})
test_that("Lrnr_bayesglm with intercept=FALSE works", {
task <- sl3_Task$new(cpp_imputed, covariates = covars, outcome = outcome)
lrnr_bayesglm <- make_learner(Lrnr_bayesglm, intercept = FALSE)
fit <- lrnr_bayesglm$train(task)
preds <- fit$predict(task)
expect_equal(task$nrow, length(preds))
})
test_that("Lrnr_bayesglm generates predictions for custom priors", {
bin_covars <- c(
"apgar1", "apgar5", "parity", "gagebrth", "mage", "meducyrs",
"sexn"
)
bin_outcome <- "smoked"
bin_task <- sl3_Task$new(cpp_imputed,
covariates = bin_covars,
outcome = bin_outcome
)
lrnr_bayesglm <- Lrnr_bayesglm$new(
family = binomial(link = "logit"),
prior.scale = 2.5, prior.df = 1
)
fit_bayesglm <- lrnr_bayesglm$train(bin_task)
preds_bayesglm <- fit_bayesglm$predict(bin_task)
expect_equal(bin_task$nrow, length(preds_bayesglm))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.