--- title: "seminrExtras" author: "S. Ray and N.P. Danks" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{seminrExtras} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) library(seminr) library(seminrExtras) # Create measurement model ---- corp_rep_mm_ext <- 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("CUSL", multi_items("cusl_", 1:3)) ) alt_mm <- 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("CUSL", multi_items("cusl_", 1:3)) ) # Create structural model ---- corp_rep_sm_ext <- 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"), to = c("CUSL")) ) alt_sm <- relationships( paths(from = c("QUAL", "PERF", "CSOR", "ATTR"), to = c("COMP", "LIKE")), paths(from = c("COMP", "LIKE"), to = c("CUSA")), paths(from = c("CUSA"), to = c("CUSL")) ) # Estimate the models ---- established_model <- estimate_pls( data = corp_rep_data, measurement_model = corp_rep_mm_ext, structural_model = corp_rep_sm_ext, missing = mean_replacement, missing_value = "-99") competing_model <- estimate_pls( data = corp_rep_data, measurement_model = alt_mm, structural_model = alt_sm, missing = mean_replacement, missing_value = "-99") ``` SEMinR (Ray & Danks) is a domaign specific language for modeling and estimating structural equation models. This package serves to provide additional extra methods and functions that can be used to analyze PLS-SEM models. New features implemented with this package CVPAT - ```assess_cvpat()``` - ```assess_cvpat_compare()``` ## The Example model: Corporate Reputation We are applying our CV-PAT to the corporate reputation example bundled with SEMinR. ```{r, fig.show='hold'} plot(established_model) plot(competing_model) ``` ## Example ```{r, eval=FALSE, echo=TRUE} # Create measurement model ---- corp_rep_mm_ext <- 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("CUSL", multi_items("cusl_", 1:3)) ) alt_mm <- 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("CUSL", multi_items("cusl_", 1:3)) ) # Create structural model ---- corp_rep_sm_ext <- 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"), to = c("CUSL")) ) alt_sm <- relationships( paths(from = c("QUAL", "PERF", "CSOR", "ATTR"), to = c("COMP", "LIKE")), paths(from = c("COMP", "LIKE"), to = c("CUSA")), paths(from = c("CUSA"), to = c("CUSL")) ) # Estimate the models ---- established_model <- estimate_pls( data = corp_rep_data, measurement_model = corp_rep_mm_ext, structural_model = corp_rep_sm_ext, missing = mean_replacement, missing_value = "-99") competing_model <- estimate_pls( data = corp_rep_data, measurement_model = alt_mm, structural_model = alt_sm, missing = mean_replacement, missing_value = "-99") # Function to compare the Loss of two models compare_results <- assess_cvpat_compare(established_model = established_model, alternative_model = competing_model, testtype = "two.sided", nboot = 2000, technique = predict_DA, seed = 123, noFolds = 10, reps = 10, cores = 1) print(compare_results, digits = 3) # Assess the base model ---- assess_results <- assess_cvpat(established_model, seed = 123, cores = 1) print(assess_results$CVPAT_compare_LM, digits = 3) print(assess_results$CVPAT_compare_IA, digits = 3) ``` Now we compare the results: ```{r, echo=TRUE} # Function to compare the Loss of two models compare_results <- assess_cvpat_compare(established_model = established_model, alternative_model = competing_model, testtype = "two.sided", nboot = 2000, technique = predict_DA, seed = 123, noFolds = 10, reps = 10, cores = 1) print(compare_results, cores = 1, digits = 3) ``` ```{r, echo=TRUE} # Assess the base model ---- assess_results <- assess_cvpat(established_model, seed = 123, cores = 1) print(assess_results$CVPAT_compare_LM, digits = 3) print(assess_results$CVPAT_compare_IA, digits = 3) ``` # References - Sharma, P. N., Liengaard, B. D., Hair, J. F., Sarstedt, M., & Ringle, C. M. (2022). Predictive model assessment and selection in composite-based modeling using PLS-SEM: extensions and guidelines for using CVPAT. European journal of marketing, 57(6), 1662-1677. - Liengaard, B. D., Sharma, P. N., Hult, G. T. M., Jensen, M. B., Sarstedt, M., Hair, J. F., & Ringle, C. M. (2021). Prediction: coveted,yet forsaken? Introducing a cross‐validated predictive ability test in partial least squares path modeling. Decision Sciences, 52(2), 362-392. - Ray, S., Danks, N.P., Calero Valdez, A. (2024) SEMinR: Domain-specific language for building, estimating, and visualizing structural equation models in R. Also a quote using `>`: > "He who gives up [code] safety for [code] speed deserves neither." ([via](https://twitter.com/hadleywickham/status/504368538874703872))