testthat::context('efa')
testthat::test_that('All options in the efa work (sunny)', {
data <- lavaan::HolzingerSwineford1939
r <- jmv::efa(
data = data,
vars = c("x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9"),
nFactorMethod = "fixed",
nFactors = 3,
hideLoadings = 0,
sortLoadings = TRUE,
eigen = TRUE,
factorCor = TRUE,
factorSummary = TRUE,
modelFit = TRUE,
kmo = TRUE,
bartlett = TRUE
)
# Test factor loadings table
loadingsTable <- r$loadings$asDF
testthat::expect_equal(
c('x5', 'x4', 'x6', 'x3', 'x1', 'x2', 'x7', 'x8', 'x9'), loadingsTable[['name']]
)
testthat::expect_equal(
c(0.886, 0.846, 0.805, -0.062, 0.196, 0.043, 0.044, -0.034, 0.032),
loadingsTable[['pc1']], tolerance = 1e-3
)
testthat::expect_equal(
c(-0.065, 0.016, 0.08, 0.686, 0.592, 0.509, -0.152, 0.125, 0.382),
loadingsTable[['pc2']], tolerance = 1e-3
)
testthat::expect_equal(
c(0.007, 0.008, -0.013, 0.019, 0.031, -0.122, 0.737, 0.686, 0.456),
loadingsTable[['pc3']], tolerance = 1e-3
)
testthat::expect_equal(
c(0.246, 0.272, 0.309, 0.547, 0.523, 0.745, 0.481, 0.48, 0.54),
loadingsTable[['uniq']], tolerance = 1e-3
)
# Test factor summary table
summaryTable <- r$factorStats$factorSummary$asDF
testthat::expect_equal(c(2.24, 1.343, 1.274), summaryTable[['loadings']], tolerance = 1e-3)
testthat::expect_equal(c(24.89, 14.926, 14.157), summaryTable[['varProp']], tolerance = 1e-4)
testthat::expect_equal(c(24.89, 39.816, 53.974), summaryTable[['varCum']], tolerance = 1e-5)
# Test inter-factor correlations table
factorCorTable <- r$factorStats$factorCor
testthat::expect_equal(0.322, factorCorTable$getCell(rowNo=1, "pc2")$value, tolerance = 1e-3)
testthat::expect_equal(0.213, factorCorTable$getCell(rowNo=1, "pc3")$value, tolerance = 1e-3)
testthat::expect_equal(0.261, factorCorTable$getCell(rowNo=2, "pc3")$value, tolerance = 1e-3)
# Test model fit table
modelFitTable <- r$modelFit$fit$asDF
testthat::expect_equal(0.054, modelFitTable[['rmsea']], tolerance = 1e-3)
testthat::expect_equal(0.016, modelFitTable[['rmseaLower']], tolerance = 1e-3)
testthat::expect_equal(0.088, modelFitTable[['rmseaUpper']], tolerance = 1e-3)
testthat::expect_equal(0.963, modelFitTable[['tli']], tolerance = 1e-3)
testthat::expect_equal(-45.93, modelFitTable[['bic']], tolerance = 1e-3)
testthat::expect_equal(22.555, modelFitTable[['chi']], tolerance = 1e-3)
testthat::expect_equal(12, modelFitTable[['df']])
testthat::expect_equal(0.032, modelFitTable[['p']], tolerance = 1e-3)
# Test sphericity test table
spherTable <- r$assump$bartlett$asDF
testthat::expect_equal(904.097, spherTable[['chi']], tolerance = 1e-6)
testthat::expect_equal(36, spherTable[['df']])
testthat::expect_equal(0, spherTable[['p']], tolerance = 1e-3)
# Test KMO table
kmoTable <- r$assump$kmo$asDF
testthat::expect_equal(
c('Overall', 'x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9'), kmoTable[['name']]
)
testthat::expect_equal(
c(0.752, 0.805, 0.778, 0.734, 0.763, 0.739, 0.808, 0.593, 0.683, 0.788),
kmoTable[['msa']], tolerance = 1e-3
)
# Test eigenvalues table
eigenTable <- r$eigen$initEigen$asDF
testthat::expect_equal(
c(2.632, 0.934, 0.504, -0.092, -0.143, -0.169, -0.288, -0.302, -0.445),
eigenTable[['eigen']], tolerance = 1e-3
)
})
testthat::test_that('efa works old scenario', {
suppressWarnings(RNGversion("3.5.0"))
set.seed(100)
y <- rnorm(100)
z <- rnorm(100)
data <- list()
data[["y1"]] <- y + .2 * rnorm(100)
data[["y2"]] <- y + .2 * rnorm(100)
data[["y3 plus"]] <- y + .2 * rnorm(100)
data[["z1"]] <- z + .2 * rnorm(100)
data[["z2"]] <- z + .2 * rnorm(100)
attr(data, 'row.names') <- seq_len(length(data[[1]]))
attr(data, 'class') <- 'data.frame'
efa <- jmv::efa(
data = data,
vars = c("y1","y2","y3 plus","z1","z2"),
nFactorMethod = 'fixed',
nFactors = 2,
hideLoadings = .3,
rotation = 'varimax'
)
# Test loadings table
testthat::expect_equal("", efa$loadings$getCell(rowNo=2, "pc2")$value)
testthat::expect_equal(0.969985600224343, efa$loadings$getCell(rowNo=2, "pc1")$value)
testthat::expect_equal(0.00443466058941522, efa$loadings$getCell(rowNo=4, "uniq")$value)
testthat::expect_equal("y3 plus", efa$loadings$getCell(rowNo=3, "name")$value)
testthat::expect_error(
jmv::efa(data = data, vars = c("y1","y2","y3 plus","z1","z2"), nFactorMethod = "fixed", nFactors = 6),
'Number of factors cannot be bigger than number of variables',
fixed=TRUE
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.