Nothing
test_that("prediction for single term works", {
b <- readRDS(test_path("fixtures", "fam_example.rds"))
# Expectation for parameters
m1 <- b$parameters$mu1$p["x1"]
m2 <- b$parameters$mu2$p["x1"]
m3 <- b$parameters$mu3$p["x1"]
o1 <- c(rep(1, 500), rep(0, 1000))
o2 <- c(rep(0, 500), rep(1, 500), rep(0, 500))
o3 <- c(rep(0, 1000), rep(1, 500))
expecto <- list("mu1" = b$model.frame[["x1"]]*m1*o1,
"mu2" = b$model.frame[["x1"]]*m2*o2,
"mu3" = b$model.frame[["x1"]]*m3*o3,
"sigma3" = rep(0, nrow(b$model.frame)),
"Lambda" = rep(0, nrow(b$model.frame)))
out <- predict(b, term = "x1", type = "link", intercept = FALSE,
what = "parameters")
expect_equal(out, expecto)
expect_warning(predict(b, term = "x1", type = "parameter"),
"Check whether your code makes sense!")
# Test if samples are correctly used
s1 <- mean(b$samples[[1]][, "mu1.p.x1"])
s2 <- mean(b$samples[[1]][, "mu2.p.x1"])
s3 <- mean(b$samples[[1]][, "mu3.p.x1"])
expecto_s <- list("mu1" = b$model.frame[["x1"]]*s1*o1,
"mu2" = b$model.frame[["x1"]]*s2*o2,
"mu3" = b$model.frame[["x1"]]*s3*o3,
"sigma3" = rep(0, nrow(b$model.frame)),
"Lambda" = rep(0, nrow(b$model.frame)))
out_s <- predict(b, term = "x1", type = "link", intercept = FALSE,
what = "samples")
expect_equal(out_s, expecto_s)
# Test if sampling functions are correctly used
sf1 <- matrix(c95(b$samples[[1]][, "mu1.p.x1"]), ncol = 3, byrow = TRUE,
nrow = nrow(b$model.frame),
dimnames = list(NULL, c("2.5%", "Mean", "97.5%")))
sf2 <- matrix(c95(b$samples[[1]][, "mu2.p.x1"]), ncol = 3, byrow = TRUE,
nrow = nrow(b$model.frame),
dimnames = list(NULL, c("2.5%", "Mean", "97.5%")))
sf3 <- matrix(c95(b$samples[[1]][, "mu3.p.x1"]), ncol = 3, byrow = TRUE,
nrow = nrow(b$model.frame),
dimnames = list(NULL, c("2.5%", "Mean", "97.5%")))
nulldf <- data.frame(rep(0, 1500), rep(0, 1500), rep(0, 1500))
colnames(nulldf) <- c("2.5%", "Mean", "97.5%")
expecto_sf <- list("mu1" = as.data.frame(b$model.frame[["x1"]]*sf1*o1),
"mu2" = as.data.frame(b$model.frame[["x1"]]*sf2*o2),
"mu3" = as.data.frame(b$model.frame[["x1"]]*sf3*o3),
"sigma3" = nulldf,
"Lambda" = nulldf)
expecto_sf <- lapply(expecto_sf, function (x) {
attr(x, "row.names") <- as.character(attr(x, "row.names"))
x
})
out_sf <- predict(b, term = "x1", type = "link", intercept = FALSE,
what = "samples", FUN = c95)
expect_equal(out_sf, expecto_sf)
})
test_that("missing outcome variable throws error", {
b <- readRDS(test_path("fixtures", "fam_example.rds"))
newdata <- b$model.frame
expect_error(predict(b, newdata = newdata, term = "x1"),
"newdata needs to contain identifier for outcome variables")
expect_error(predict(b, newdata = newdata),
"newdata needs to contain identifier for outcome variables")
})
test_that("prediction for full model works", {
b <- readRDS(test_path("fixtures", "fam_example.rds"))
# Indicator for outcomes
o1 <- c(rep(1, 500), rep(0, 1000))
o2 <- c(rep(0, 500), rep(1, 500), rep(0, 500))
o3 <- c(rep(0, 1000), rep(1, 500))
outc <- factor(rep(1:3, each = 500))
# Expectation for full prediction of type = link using optimized parameters
x1 <- predict(b, term = "x1", type = "link", intercept = TRUE,
what = "parameters")
x2 <- predict(b, term = "x2", type = "link", intercept = FALSE,
what = "parameters")
fpc1 <- predict(b, term = "fpc.1", type = "link", intercept = FALSE,
what = "parameters")
fpc2 <- predict(b, term = "fpc.2", type = "link", intercept = FALSE,
what = "parameters")
fpc3 <- predict(b, term = "fpc.3", type = "link", intercept = FALSE,
what = "parameters")
pred_ls <- list("mu1" = x1$mu1 + x2$mu1 + fpc1$Lambda*o1 + fpc2$Lambda*o1 +
fpc3$Lambda*o1,
"mu2" = x1$mu2 + x2$mu2 + fpc1$Lambda*o2 + fpc2$Lambda*o2 +
fpc3$Lambda*o2,
"mu3" = x1$mu3 + x2$mu3 + fpc1$Lambda*o3 + fpc2$Lambda*o3 +
fpc3$Lambda*o3,
"sigma3" = b$parameters$sigma3$p * o3)
expecto <- list("mu" = c(pred_ls$mu1[1:500], pred_ls$mu2[501:1000],
pred_ls$mu3[1001:1500]),
"sigma" = c(rep(NA, 1000), pred_ls$sigma3[1001:1500]))
out <- predict(b, type = "link", what = "parameters")
expect_equal(out, expecto)
# Expectation for full prediction of type = link using samples
p1 <- sapply(seq_len(nrow(b$model.frame)), function (s) {
x <- b$model.frame[s, ]
smp <- b$samples[[1]]
lp <- smp[, "mu1.p.(Intercept)"] + x$x1 * smp[, "mu1.p.x1"] +
x$x2 * smp[, "mu1.p.x2"] +
smp[, paste0("Lambda.s.s(id,fpc.1).b", x$id)] * x$fpc.1 +
smp[, paste0("Lambda.s.s(id,fpc.2).b", x$id)] * x$fpc.2 +
smp[, paste0("Lambda.s.s(id,fpc.3).b", x$id)] * x$fpc.3
mean(lp)
})
p2 <- sapply(seq_len(nrow(b$model.frame)), function (s) {
x <- b$model.frame[s, ]
smp <- b$samples[[1]]
lp <- smp[, "mu2.p.(Intercept)"] + x$x1 * smp[, "mu2.p.x1"] +
x$x2 * smp[, "mu2.p.x2"] +
smp[, paste0("Lambda.s.s(id,fpc.1).b", x$id)] * x$fpc.1 +
smp[, paste0("Lambda.s.s(id,fpc.2).b", x$id)] * x$fpc.2 +
smp[, paste0("Lambda.s.s(id,fpc.3).b", x$id)] * x$fpc.3
mean(lp)
})
p3 <- sapply(seq_len(nrow(b$model.frame)), function (s) {
x <- b$model.frame[s, ]
smp <- b$samples[[1]]
lp <- smp[, "mu3.p.(Intercept)"] + x$x1 * smp[, "mu3.p.x1"] +
x$x2 * smp[, "mu3.p.x2"] +
smp[, paste0("Lambda.s.s(id,fpc.1).b", x$id)] * x$fpc.1 +
smp[, paste0("Lambda.s.s(id,fpc.2).b", x$id)] * x$fpc.2 +
smp[, paste0("Lambda.s.s(id,fpc.3).b", x$id)] * x$fpc.3
mean(lp)
})
ps <- o3 * mean(b$samples[[1]][, "sigma3.p.(Intercept)"])
expects <- list("mu" = c(p1[1:500], p2[501:1000], p3[1001:1500]),
"sigma" = c(rep(NA, 1000), ps[1001:1500]))
outs <- predict(b, type = "link", what = "samples")
expect_equal(outs, expects)
# Exp
# Test function compress_outcomes
expect_equal(out, compress_outcomes(pred_list = pred_ls,
mus = c("mu1", "mu2", "mu3"),
sigmas = "sigma3",
outcome = outc))
# Expectation for full prediction of type = parameter and what = parameters
resp1 <- function(x) 1/(1+exp(-x))
resp2 <- function(x) exp(x)
expecto2 <- list("mu" = c(resp1(expecto$mu[1:500]),
resp2(expecto$mu[501:1000]),
expecto$mu[1001:1500]),
"sigma" = c(rep(NA, 1000),
resp2(expecto$sigma[1001:1500])))
out2 <- predict(b, type = "parameter", what = "parameters")
expect_equal(out2, expecto2)
# Expectation for full prediction of type = parameter and what = samples
expects2 <- list("mu" = c(resp1(expects$mu[1:500]),
resp2(expects$mu[501:1000]),
expects$mu[1001:1500]),
"sigma" = c(rep(NA, 1000),
resp2(expects$sigma[1001:1500])))
outs2 <- predict(b, type = "parameter", what = "samples")
expect_equal(outs2, expects2)
})
test_that("prediction for single model terms works", {
b <- readRDS(test_path("fixtures", "fam_example.rds"))
# Expectation for predicting only model mu1
x1 <- predict(b, term = "x1", type = "link", intercept = TRUE)
x2 <- predict(b, term = "x2", type = "link", intercept = FALSE)
expecto <- x1$mu1[1:500] + x2$mu1[1:500]
out <- predict(b, model = "mu1")
expect_equal(out, expecto)
# Expectation for predicting only model lambda on additive predictor level
fpc1 <- predict(b, term = "fpc.1", type = "link", intercept = FALSE)
fpc2 <- predict(b, term = "fpc.2", type = "link", intercept = FALSE)
fpc3 <- predict(b, term = "fpc.3", type = "link", intercept = FALSE)
expecto2 <- fpc1$Lambda + fpc2$Lambda + fpc3$Lambda
out2 <- predict(b, model = "Lambda")
expect_equal(out2, expecto2)
# Test apply_respfun_outcome
resp1 <- function(x) 1/(1+exp(-x))
resp2 <- function(x) exp(x)
x <- rep(c(-2, 2), times = 3)
expecto_fun <- c(-2, 2, resp2(-2), resp2(2), resp1(-2), resp1(2))
outc <- factor(rep(1:3, each = 2))
links <- c("mu1" = "identity", "mu2" = "log", "mu3" = "logit")
out_fun <- apply_respfun_outcome(x = x, outcome = outc, links = links)
expect_equal(out_fun, expecto_fun)
# Expectation for predicting only model lambda on parameter level
expecto3 <- c(resp1(expecto2[1:500]), resp2(expecto2[501:1000]),
expecto2[1001:1500])
expect_warning(out3 <- predict(b, model = "Lambda", type = "parameter"),
"Check whether your code makes sense!")
expect_equal(out3, expecto3)
})
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.