March 2019

What is cSEM about?

Estimate, analyse, test, and assess

  • linear,
  • nonlinear,
  • hierarchical and
  • multigroup

structural equation models using composite-based approaches.

Composite-based:

Any approach that involves linear compounts (scores/proxies/composites) of observables (indicators/manifest variables).

Implemented approaches:

  • Partial least squares path modeling: PLS-PM, PLSc (Dijkstra & Henseler, 2015), ordPLS(c) (Schuberth et al. 2018), robustPLS(c) (Schamberger et al., work in progess)
  • Generalized structured component analysis (with uniqueness terms): GSCA and GSCAm (Hwang, 2004; Hwang et al. 2017)
  • Generalized canonical correlation analysis (GCCA, Kettenring, 1971)
  • Factor score regression (FSR) using sum, regression or bartlett scores
  • Bias correction using Croon’s approach for FSR (Croon, 2002; Devlieger et al., 2016; Devlieger & Rosseel, 2017)

What else is implemented (excerpt):

  • Support for second-order composite/common factor models (e.g., van Riel, 2017; Schuberth et al., work in progress]
  • Support for nonlinear models
    • PLSc (Dijkstra & Schermelleh-Engel, 2014)
    • Non-iterative method of moments (Schuberth et al., work in progress)
    • Two-stage method of moments (Wall & Amemiya, 2000)
  • Bootstrap or jackknife based inference (simple or double)
  • Support for platform-independent multiprocessing (via the future package)
  • Support for random seeds for multiprocessing.
  • Test for overall model fit (Dijkstra & Henseler, 2015)

  • Composite measurement invariance assessment (MICOM) (Henseler et al., 2016)
  • Multigroup analysis (MGA) and tests (e.g., Klesel et al., forthcomming)
  • Effect size calculation
  • Discriminant validity assessement (HTMT) (Henseler et al., 2015)
  • Cronbach’s alpha and and corresponding closed-form confidence interval (Trinchera, 2018)
  • Assessment: VIF, R2, SRMR, AVE, etc.

How to install (or contribute!)

Warning: Work in progress!

On GitHub: https://github.com/M-E-Rademaker/cSEM

# Currently only a development version from GitHub is available:
# install.packages("devtools")
devtools::install_github("M-E-Rademaker/cSEM")

# Note: Requires R version > 3.5 and Rtools > 3.5.

Please do contribute! (Open an issue, fork & pull request)

Design & Philosophy

  • (Hopefully) user-friendly and easy-to-use:
    • Consistent and simple/non-technical API
    • Descriptive/verbose print methods, errors and warning messages
    • (Eventually) well documented (cheat sheets, vignettes, website)
  • OpenSource
  • (Realtively) flexible and easy to adapted to own needs
    • Modular architecture
    • Consistent naming scheme etc.

Using cSEM

Basic usage / API

Example 1: Linear model with 3 common factors

Model: lavaan syntax

  • Exception:
    1. <~ defines a composite
    2. var1.var2 interaction between var1 and var2 (subject to change)
my_model <- '
# Structural/Path model
eta2 ~ eta1
eta3 ~ eta1 + eta2

# Measurement model
eta1 =~ y11 + y12 + y13
eta2 =~ y21 + y22 + y23
eta3 =~ y31 + y32 + y33
'

Data

require(cSEM)
my_data <- threecommonfactors
my_data[1:5 , 1:6]
##             y11         y12         y13         y21        y22        y23
## [1,]  0.6788571 -0.57810105 -0.05275013 -0.36106066 -1.1364714  0.4938518
## [2,]  0.9048396 -0.02740455  0.42690532  1.36799876  1.1635973  1.5477858
## [3,] -0.6792676 -0.56310431 -0.75351512  0.04260378  0.5807727 -0.3764632
## [4,] -1.0560225  0.61542226 -0.48510985  0.38472145 -0.1603029  0.7141540
## [5,] -0.9293684 -0.51043996 -1.40710833 -2.25571988 -0.7244221 -1.8570768
  • Accepted data input: data.frame, tibbles, matrix, list.
  • Accepted column types: numeric, (un)ordered factor, logical, one character column as group identifyer.

Estimation

out <- csem(.data = my_data, .model = my_model)

## Access elements using `$`
c(names(out$Estimates), names(out$Information))
##  [1] "Path_estimates"                "Loading_estimates"            
##  [3] "Weight_estimates"              "Inner_weight_estimates"       
##  [5] "Construct_scores"              "Indicator_VCV"                
##  [7] "Proxy_VCV"                     "Construct_VCV"                
##  [9] "Construct_reliabilities"       "R2"                           
## [11] "R2adj"                         "VIF"                          
## [13] "Data"                          "Model"                        
## [15] "Arguments"                     "Type_of_indicator_correlation"
## [17] "Weight_info"

Postestimation verbs

Major postestimation functions

summarize(out)
verify(out)
assess(out) # not yet implemented

Other postestimation functions

testOMF(out) # perform overall test of model fit
testMGA(out) # not applicable here
calculateEffectSize(out)
HTMT(out) # will be called calculateHTMT()

Resampling & Inference

Resample using an existing cSEMResults object

res_out1 <- resamplecSEMResults(out) # 499 bootstrap runs
res_out2 <- resamplecSEMResults(out, .resample_method = "jackknife") 

or directly via the .resample_method argument to csem(). E.g:

out <- csem(
  .data            = my_data, 
  .model           = my_model, 
  .resample_method = "bootstrap",
  .R               = 999,
  .eval_plan       = "multiprocess" # .eval_plan = "sequential"
  )

Inference

Using summarize() or infer() on an object with class cSEMResults_resample (no print method yet for infer())

summarize(res_out) # return t- and p-values
infer(res_out, .quantity = c("CI_basis", "CI_bc")) 

Supported confidence intervals:

  • Standard (CI_standard_z, CI_standard_t)
  • Percentile (CI_percentile)
  • Basic (CI_basic)
  • Bias-corrected & Bias-corrected and accelerated (CI_bc, CI_bca)
  • “Studentized” (CI_t_interval)

Plans

Thank you for your attention

Manuel Rademaker
Chair of Econometrics
University of Wuerzburg

Florian Schuberth
Chair of Product-Market Relations
University of Twente