Nothing
## ----- Shared fit (complete data) --------------------------------------------
mod_ml <- "
level: 1
fw =~ y1 + y2 + y3
fw ~ x1 + x2 + x3
level: 2
fb =~ y1 + y2 + y3
fb ~ w1 + w2
"
fit_ml <- asem(
mod_ml,
lavaan::Demo.twolevel,
cluster = "cluster",
verbose = FALSE,
test = "none",
marginal_correction = "none",
vb_correction = FALSE,
nsamp = 3
)
test_that("Multilevel: fit and summary", {
fit_lav <- lavaan::sem(mod_ml, lavaan::Demo.twolevel, cluster = "cluster")
expect_s4_class(fit_ml, "INLAvaan")
expect_no_error(capture.output(summary(fit_ml)))
expect_equal(coef(fit_ml), coef(fit_lav), tolerance = 0.1)
# Convergence (dx ~ 0) depends on the optimiser path, which varies with the
# platform's BLAS/compiler -- too fragile to assert on CRAN's check farm.
skip_on_cran()
expect_equal(fit_ml@optim$dx, rep(0, length(coef(fit_ml))), tolerance = 1e-2)
})
test_that("Multilevel predict lv", {
nsamp <- 5
# Level 1
pred1 <- predict(fit_ml, type = "lv", level = 1L, nsamp = nsamp)
expect_length(pred1, nsamp)
m1 <- pred1[[1]]
expect_equal(nrow(m1), 2500)
expect_true("fw" %in% colnames(m1))
expect_true(ncol(m1) >= 1)
# Level 2
pred2 <- predict(fit_ml, type = "lv", level = 2L, nsamp = nsamp)
expect_length(pred2, nsamp)
m2 <- pred2[[1]]
expect_equal(nrow(m2), 200)
expect_true("fb" %in% colnames(m2))
expect_true(ncol(m2) >= 1)
})
test_that("Multilevel predict yhat and ypred", {
nsamp <- 5
# yhat
pred_yhat <- predict(fit_ml, type = "yhat", nsamp = nsamp)
expect_length(pred_yhat, nsamp)
m <- pred_yhat[[1]]
expect_equal(nrow(m), 2500)
expect_equal(ncol(m), 8)
expect_true(all(
c("y1", "y2", "y3", "x1", "x2", "x3", "w1", "w2") %in% colnames(m)
))
expect_false(any(is.na(m)))
# ypred
pred_ypred <- predict(fit_ml, type = "ypred", nsamp = nsamp)
expect_length(pred_ypred, nsamp)
m2 <- pred_ypred[[1]]
expect_equal(nrow(m2), 2500)
expect_equal(ncol(m2), 8)
expect_false(any(is.na(m2)))
})
test_that("Multilevel predict errors for unsupported options", {
expect_error(
predict(fit_ml, type = "lv", newdata = lavaan::Demo.twolevel, nsamp = 3),
"not supported for multilevel"
)
})
## ----- Missing data (FIML) fit -----------------------------------------------
test_that("Multilevel predict ymis works", {
dat <- lavaan::Demo.twolevel
dat <- dat[dat$cluster <= 10, ]
set.seed(123)
dat$y1[sample(nrow(dat), 10)] <- NA
fit_miss <- asem(
mod_ml,
dat,
cluster = "cluster",
missing = "ML",
test = "none",
marginal_correction = "none",
vb_correction = FALSE,
verbose = FALSE,
nsamp = 3
)
nsamp <- 5
# Full imputed dataset (default)
pred <- predict(fit_miss, type = "ymis", nsamp = nsamp)
expect_length(pred, nsamp)
expect_false(any(is.na(pred[[1]])))
expect_equal(ncol(pred[[1]]), 8L) # 8 model variables (y1-y3, x1-x3, w1-w2)
# ymis_only: named vector of just the imputed cells
pred_only <- predict(fit_miss, type = "ymis", nsamp = nsamp, ymis_only = TRUE)
expect_length(pred_only, nsamp)
v <- pred_only[[1]]
expect_true(is.numeric(v))
expect_length(v, 10L) # exactly the 10 NAs we injected
expect_true(all(grepl("^y1\\[", names(v)))) # all from y1
})
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.