tests/testthat/test-plsc-fsquared.R

context("SEMinR correctly evaluates fSquared for PLSc estimation\n")

# data_cov <- utils::read.csv(file = paste(test_folder, "fsq_data_cov.csv", sep=""))
# data_means <- as.vector(t(utils::read.csv(file = paste(test_folder, "fsq_data_means.csv", sep=""))))
#
# data_sim <- as.data.frame(MASS::mvrnorm(250, mu = data_means, Sigma = data_cov))
#
# create_item_names <- function(names) {
#   as.vector(sapply(names, multi_items, item_numbers=1:3))
# }
#
# construct_names <- c("GG", "FF", "EE", "DD", "CC", "BB", "AA")
# item_names <- create_item_names(construct_names)
# names(data_sim) <- item_names
# write.csv(data_sim, file = "test-plsc-fsquared-data.csv")

data_sim <- utils::read.csv(file = paste(test_folder, "test-plsc-fsquared-data.csv", sep=""))

measurements <- constructs(
  reflective("AA", multi_items("AA", 1:3)),
  reflective("BB", multi_items("BB", 1:3)),
  reflective("CC", multi_items("CC", 1:3)),
  reflective("DD", multi_items("DD", 1:3)),
  reflective("EE", multi_items("EE", 1:3)),
  reflective("FF", multi_items("FF", 1:3)),
  reflective("GG", multi_items("GG", 1:3))
)

structure <- relationships(
  paths(from = "AA", to = "BB"),
  paths(from = "BB", to = c("CC", "EE")),
  paths(from = "CC", to = "DD"),
  paths(from = "EE", to = "FF"),
  paths(from = c("FF", "DD"), to = "GG")
)

# Compose SEM models from individual parts
pls_model <- estimate_pls(data = data_sim,
                          measurement_model = measurements,
                          structural_model = structure)

# Testing
summarize <- function() {
  model_summary <- summary(pls_model)
  model_summary$fSquare
}

test_that("No error occurs trying to summarize model fSquares", {
  expect_error(summarize(), NA)
})

context("SEMinR correctly evaluates fSquared for interaction model\n")

# Create measurement model ----
corp_rep_mm_mod <- constructs(
  composite("QUAL", multi_items("qual_", 1:8), weights = mode_B),
  composite("PERF", multi_items("perf_", 1:5), weights = mode_B),
  composite("CSOR", multi_items("csor_", 1:5), weights = mode_B),
  composite("ATTR", multi_items("attr_", 1:3), weights = mode_B),
  composite("COMP", multi_items("comp_", 1:3)),
  composite("LIKE", multi_items("like_", 1:3)),
  composite("CUSA", single_item("cusa")),
  composite("SC", multi_items("switch_", 1:4)),
  composite("CUSL", multi_items("cusl_", 1:3)),
  interaction_term(iv = "CUSA", moderator = "SC", method = two_stage, weights = mode_A))

# Create structural model ----
corp_rep_sm_mod <- relationships(
  paths(from = c("QUAL", "PERF", "CSOR", "ATTR"), to = c("COMP", "LIKE")),
  paths(from = c("COMP", "LIKE"), to = c("CUSA", "CUSL")),
  paths(from = c("CUSA", "SC", "CUSA*SC"), to = c("CUSL"))
)

# Estimate the model ----
corp_rep_pls_model_mod <- estimate_pls(
  data = corp_rep_data,
  measurement_model = corp_rep_mm_mod,
  structural_model  = corp_rep_sm_mod,
  missing = mean_replacement,
  missing_value = "-99")

sum_corp_rep_mod <- summary(corp_rep_pls_model_mod)

output <- sum_corp_rep_mod$fSquare

## Output originally created using following lines
# write.csv(sum_corp_rep_mod$fSquare, file = "tests/fixtures/V_3_6_0/interaction_fsquare.csv", row.names=TRUE)

# Load controls
output_control <- as.matrix(read.csv(file = paste(test_folder,"interaction_fsquare.csv", sep = ""), row.names = 1, check.names = FALSE))

# Testing
test_that("Seminr estimates the loadings and path coefficients correctly", {
  expect_equal(as.matrix(output[1:10,1:10]), output_control, tolerance = 0.00001)
})
sem-in-r/seminr documentation built on Aug. 26, 2022, 8:47 p.m.