testthat::context('pca')
testthat::test_that('All options in the pca work (sunny)', {
data <- lavaan::HolzingerSwineford1939
names(data)[7] <- "x 1"
r <- jmv::pca(
data = data,
vars = c("x 1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9"),
nFactorMethod = "fixed",
nFactors = 3,
hideLoadings = 0,
sortLoadings = TRUE,
eigen = TRUE,
factorCor = TRUE,
factorSummary = TRUE,
kmo = TRUE,
bartlett = TRUE
)
# Test factor loadings table
loadingsTable <- r$loadings$asDF
testthat::expect_equal(
c('x5', 'x4', 'x6', 'x3', 'x2', 'x 1', 'x7', 'x8', 'x9'), loadingsTable[['name']]
)
testthat::expect_equal(
c(0.903, 0.889, 0.869, 0.018, 0.083, 0.321, 0.098, 0.042, 0.13),
loadingsTable[['pc1']],
tolerance = 1e-3
)
testthat::expect_equal(
c(0.06, 0.124, 0.178, 0.779, 0.727, 0.673, -0.153, 0.145, 0.435),
loadingsTable[['pc2']],
tolerance = 1e-3
)
testthat::expect_equal(
c(0.077, 0.091, 0.076, 0.155, -0.102, 0.175, 0.83, 0.818, 0.636),
loadingsTable[['pc3']],
tolerance = 1e-3
)
testthat::expect_equal(
c(0.175, 0.186, 0.207, 0.369, 0.455, 0.413, 0.278, 0.308, 0.389),
loadingsTable[['uniq']],
tolerance = 1e-3
)
# Test factor summary table
summaryTable <- r$factorStats$factorSummary$asDF
testthat::expect_equal(c('1', '2', '3'), summaryTable[['comp']])
testthat::expect_equal(c(2.501, 1.872, 1.847), summaryTable[['loadings']], tolerance = 1e-3)
testthat::expect_equal(c(27.784, 20.802, 20.527), summaryTable[['varProp']], tolerance = 1e-3)
testthat::expect_equal(c(27.784, 48.587, 69.114), summaryTable[['varCum']], tolerance = 1e-3)
# Test inter-factor correlations table
factorCorTable <- r$factorStats$factorCor#a
testthat::expect_equal(0.000, factorCorTable$getCell(rowNo=1, "pc2")$value, tolerance = 1e-3)
testthat::expect_equal(0.000, factorCorTable$getCell(rowNo=1, "pc3")$value, tolerance = 1e-3)
testthat::expect_equal(0.000, factorCorTable$getCell(rowNo=2, "pc3")$value, tolerance = 1e-3)
# Test sphericity test table
spherTable <- r$assump$bartlett$asDF
testthat::expect_equal(904.097, spherTable[['chi']], tolerance = 1e-3)
testthat::expect_equal(36, spherTable[['df']])
testthat::expect_equal(0, spherTable[['p']])
# Test KMO table
kmoTable <- r$assump$kmo$asDF
testthat::expect_equal(
c('Overall', 'x 1', '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('1', '2', '3', '4', '5', '6', '7', '8', '9'), eigenTable[['comp']])
testthat::expect_equal(
c(3.216, 1.639, 1.365, 0.699, 0.584, 0.5, 0.473, 0.286, 0.238),
eigenTable[['eigen']],
tolerance = 1e-3
)
testthat::expect_equal(
c(35.737, 18.208, 15.168, 7.766, 6.493, 5.552, 5.257, 3.178, 2.641),
eigenTable[['varProp']],
tolerance = 1e-3
)
testthat::expect_equal(
c(35.737, 53.945, 69.114, 76.879, 83.372, 88.924, 94.181, 97.359, 100),
eigenTable[['varCum']],
tolerance = 1e-3
)
})
testthat::test_that('Error is thrown when n components > n variables', {
df <- data.frame(
"x1" = rnorm(10),
"x2" = rnorm(10)
)
testthat::expect_error(
jmv::pca(
data = df,
vars = c("x1", "x2"),
nFactorMethod = "fixed",
nFactors = 3
),
'Number of components cannot be bigger than number of variables',
fixed=TRUE
)
})
testthat::test_that('pca works when simulated loadings in parallel analysis > model loadings', {
data <- data.frame(
a = c(2, 1, 5, 2, 3, 4, 4, 1, 3, 5),
b = c(4, 5, 3, 2, 5, 3, 4, 2, 3, 5),
c = c(5, 1, 4, 3, 5, 2, 3, 1, 2, 3)
)
r <- jmv::pca(data = data, vars = vars(a, b, c))
testthat::expect_equal(r$loadings$asDF[1, 2], 0.7167, tolerance = 1e-4)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.