# Test tkl()
library(noisemaker)
library(fungible)
mod <- fungible::simFA()
set.seed(42)
Sigma <- tkl(mod, target_rmsea = 0.05, target_cfi = 0.95)
test_that("Errors are thrown when invalid target RMSEA or CFI values are given", {
expect_error(tkl(mod, target_rmsea = "a"))
expect_error(tkl(mod, target_rmsea = -.01))
expect_error(tkl(mod, target_rmsea = 1.01))
expect_error(tkl(mod, target_rmsea = NULL))
expect_error(tkl(mod, target_cfi = NULL))
expect_error(tkl(mod, target_cfi = 1.01))
expect_error(tkl(mod, target_cfi = NULL, target_rmsea = NULL))
}
)
test_that("Errors are thrown when invalid tkl_ctrl arguments are given", {
expect_error(tkl(mod, target_rmsea = .05,
tkl_ctrl = list(weights = c("a", 2))))
expect_error(tkl(mod, target_rmsea = .05,
tkl_ctrl = list(v_start = 2)))
expect_error(tkl(mod, target_rmsea = .05,
tkl_ctrl = list(eps_start = 2)))
expect_error(tkl(mod, target_rmsea = .05,
tkl_ctrl = list(NMinorFac = -1)))
expect_error(tkl(mod, target_rmsea = .05,
tkl_ctrl = list(optim_type = "ag")))
expect_error(tkl(mod, target_rmsea = .05,
tkl_ctrl = list(penalty = -1)))
expect_error(tkl(mod, target_rmsea = .05,
tkl_ctrl = list(WmaxLoading = -1)))
expect_error(tkl(mod, target_rmsea = .05,
tkl_ctrl = list(NWmaxLoading = -1)))
})
test_that("Errors are thrown when invalid mod values are given", {
expect_error(tkl(mod = "a", target_rmsea = 0.05, mod = "a"))
expect_error(tkl(mod = list(a = 1, b = "test", c = 3), target_rmsea = 0.05))
expect_error(tkl(mod = NULL, target_rmsea = 0.05))
})
test_that("Function works when only RMSEA is specified and `ga()` is used.", {
sol <- tkl(mod = mod, target_rmsea = 0.05, tkl_ctrl = list(optim_type = "ga"))
expect_equal(sol$Rpop, mod$Rpop)
expect_equal(dim(sol$RpopME), dim(mod$Rpop))
expect_true(abs(sol$rmsea - 0.05) < 0.01)
})
test_that("Function works when only CFI is specified and `ga()` is used.", {
sol <- tkl(mod = mod, target_cfi = 0.95, tkl_ctrl = list(optim_type = "ga"))
expect_equal(sol$Rpop, mod$Rpop)
expect_equal(dim(sol$RpopME), dim(mod$Rpop))
expect_true(abs(sol$cfi - 0.95) < 0.01)
})
test_that("Function works when CFI and RMSEA are specified and `ga()` is used.", {
sol <- tkl(mod = mod, target_cfi = 0.95, target_rmsea = 0.05,
tkl_ctrl = list(optim_type = "ga"))
expect_equal(sol$Rpop, mod$Rpop)
expect_equal(dim(sol$RpopME), dim(mod$Rpop))
expect_true(abs(sol$cfi - 0.95) < 0.05)
expect_true(abs(sol$rmsea - 0.05) < 0.05)
})
test_that("Function works when only RMSEA is specified and `optim()` is used.", {
sol <- tkl(mod = mod, target_rmsea = 0.05, tkl_ctrl = list(optim_type = "optim"))
expect_equal(sol$Rpop, mod$Rpop)
expect_equal(dim(sol$RpopME), dim(mod$Rpop))
expect_true(abs(sol$rmsea - 0.05) < 0.01)
})
test_that("Function works when only CFI is specified and `optim()` is used.", {
sol <- tkl(mod = mod, target_cfi = 0.95,
tkl_ctrl = list(optim_type = "optim"))
expect_equal(sol$Rpop, mod$Rpop)
expect_equal(dim(sol$RpopME), dim(mod$Rpop))
expect_true(abs(sol$cfi - 0.95) < 0.01)
})
test_that("Function works when CFI and RMSEA are specified and `optim()` is used.", {
sol <- tkl(mod = mod, target_cfi = 0.95, target_rmsea = 0.05,
tkl_ctrl = list(optim_type = "optim"))
expect_equal(sol$Rpop, mod$Rpop)
expect_equal(dim(sol$RpopME), dim(mod$Rpop))
expect_true(abs(sol$cfi - 0.95) < 0.05)
expect_true(abs(sol$rmsea - 0.05) < 0.05)
})
test_that("The bounds on v and eps are working as intended.", {
sol <- tkl(mod = mod, target_cfi = 0.95, target_rmsea = 0.05,
tkl_ctrl = list(v_bounds = c(0, .2),
eps_bounds = c(0, .05)))
expect_true(sol$v <= .2)
expect_true(sol$eps <= .05)
})
test_that("Function works when CFI and RMSEA are specified and `ga()` is used with NWmaxLoading constraints.", {
sol <- tkl(mod = mod, target_cfi = 0.95, target_rmsea = 0.05,
tkl_ctrl = list(optim_type = "ga",
WmaxLoading = .3,
NWmaxLoading = 3))
expect_equal(sol$Rpop, mod$Rpop)
expect_equal(dim(sol$RpopME), dim(mod$Rpop))
expect_true(abs(sol$cfi - 0.95) < 0.05)
expect_true(abs(sol$rmsea - 0.05) < 0.05)
expect_false(any(apply(sol$W, 2, function(x) sum(x >= .3)) > 3))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.