context("stats-factanal")
skip_on_cran()
skip_if_not_installed("modeltests")
library(modeltests)
n_factors <- 3
n_factors2 <- 3
fit <- factanal(mtcars, n_factors)
fit2 <- factanal(mtcars, n_factors2)
test_that("factanal tidier arguments", {
check_arguments(tidy.factanal)
check_arguments(glance.factanal)
check_arguments(augment.factanal, strict = FALSE)
})
test_that("tidy.factanal", {
td <- tidy(fit)
td2 <- tidy(fit2)
modeltests::check_tidy_output(td, strict = FALSE)
modeltests::check_tidy_output(td2, strict = FALSE)
check_dims(td, ncol(mtcars), 2 + n_factors)
expect_equal(td$variable, colnames(mtcars))
expect_equal(ncol(td2), 2 + n_factors2)
})
test_that("glance.factanal works", {
gl <- glance(fit)
gl2 <- glance(fit2)
check_glance_outputs(gl, gl2)
check_dims(gl, 1, 9)
expect_equal(gl$n.factors, n_factors)
})
test_that("augment.factanal works", {
fit_reg <- factanal(mtcars, n_factors, scores = "regression")
fit_bart <- factanal(mtcars, n_factors, scores = "Bartlett")
check_augment_function(
aug = augment.factanal,
model = fit_reg,
data = mtcars,
strict = FALSE
)
check_augment_function(
aug = augment.factanal,
model = fit_bart,
data = mtcars,
strict = FALSE
)
# errors for `scores = "none"`
fit_none <- factanal(mtcars, n_factors, scores = "none")
expect_error(
augment(fit_none),
regexp = "Cannot augment factanal objects fit with `scores = 'none'`."
)
})
test_that("augment.factanal works with matrix", {
library(broom)
set.seed(123)
# data
v1 <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 4, 5, 6)
v2 <- c(1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 3, 4, 3, 3, 3, 4, 6, 5)
v3 <- c(3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 4, 6)
v4 <- c(3, 3, 4, 3, 3, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 5, 6, 4)
v5 <- c(1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 6, 4, 5)
v6 <- c(1, 1, 1, 2, 1, 3, 3, 3, 4, 3, 1, 1, 1, 2, 1, 6, 5, 4)
m1 <- cbind(v1, v2, v3, v4, v5, v6)
# new data
m2 <-
cbind(
x1 = rev(v1),
x2 = rev(v2),
x3 = rev(v3),
x4 = rev(v4),
x5 = rev(v5),
x6 = rev(v6)
)
# objects
fit1 <- stats::factanal(m1, factors = 3, scores = "Bartlett")
fit2 <- stats::factanal(m1, factors = 3, scores = "regression")
# augmented dataframe
df1 <- augment(fit1)
df2 <- augment(fit2)
# augmented dataframe (with new data)
df3 <- augment(fit1, data = m2)
df4 <- augment(fit2, data = m2)
# checking dataframe dimensions
modeltests::check_tibble(df1, "augment", strict = FALSE)
modeltests::check_dims(df1, 18L, 4L)
modeltests::check_dims(df2, 18L, 4L)
modeltests::check_dims(df3, 18L, 10L)
modeltests::check_dims(df4, 18L, 10L)
expect_identical(names(df1), c(".rownames", ".fs1", ".fs2", ".fs3"))
expect_identical(
names(df3),
c(
".rownames",
"x1",
"x2",
"x3",
"x4",
"x5",
"x6",
".fs1",
".fs2",
".fs3"
)
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.