Introduction

This series presents R codes that reproduce the results for The Corporate Reputation Model presented in Partial Least Squares Structural Equation Modeling (PLS-SEM) Using R by Joseph F. Hair Jr., G. Tomas M. Hult, Christian M. Ringle, Marko Sarstedt, Nicholas P. Danks, and Soumya Ray.

The goal of The Corporate Reputation Model is to explain the effects of corporate reputation on customer satisfaction (CUSA) and, ultimately, customer loyalty (CUSL). Corporate reputation represents a companyโ€™s overall evaluation by its stakeholders (Helm, Eggert, & Garnefeld, 2010). This construct is measured using two dimensions. One dimension represents cognitive evaluations of the company, which is the companyโ€™s competence (COMP). The second dimension captures affective judgments, which determine the companyโ€™s likeability (LIKE). Research has shown that the model performs favorably (in terms of convergent validity and predictive validity) compared to alternative reputation measures (Sarstedt, Wilczynski, & Melewar, 2013). In summary, the simple corporate reputation model has two main theoretical components: (1) the target constructs of interest โ€“ namely, CUSA and CUSL (endogenous constructs) โ€“ and (2) the two corporate reputation dimensions COMP and LIKE (exogenous constructs), which are key determinants of the target constructs. The diagram below shows the constructs and their relationships:

The Corporate Reputation Model: Basic

SEMinR is a software package developed for the R statistical environment that brings a user-friendly syntax to creating and estimating structural equation models. This post will demonstrate the syntax used by SEMinR. Briefly, there are four steps to specify and estimate a structural equation model using SEMinR:

  1. Loading and cleaning the data
  2. Specifying the measurement models
  3. Specifying the structural model
  4. Estimating, bootstrapping, and summarizing the model
# Clear R environment: 
rm(list = ls())

# Load seminr package: 
library(seminr)

#-------------------
# Step 1: Load data
#-------------------
read.csv("Corporate Reputation Data.csv", sep = ";", header = TRUE) -> corp_rep_data

#-------------------------------
# Step 2: Specifying the models
#-------------------------------

# Create measurement model: 

corp_rep_mm <- constructs(
  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)))

#-----------------------------------------
# Step 3: Specifying the structural model
#-----------------------------------------

# Create structural model: 

corp_rep_sm <- relationships(
  paths(from = c("COMP", "LIKE"), to = c("CUSA", "CUSL")),
  paths(from = c("CUSA"), to = c("CUSL")))

#-------------------------------
# Step 4: Estimating the Model
#-------------------------------

# Estimate the model: 

corp_rep_pls_model <- estimate_pls(data = corp_rep_data,
                                   measurement_model = corp_rep_mm,
                                   structural_model  = corp_rep_sm,
                                   inner_weights = path_weighting,
                                   missing = mean_replacement)

# Summarize the model results: 

summary_pls_corp_rep <- summary(corp_rep_pls_model)

# Inspect the modelโ€™s path coefficients and the R^2 values: 

summary_pls_corp_rep$paths
##          CUSA  CUSL
## R^2     0.015 0.380
## AdjR^2  0.010 0.375
## COMP    0.148 0.033
## LIKE   -0.047 0.033
## CUSA        . 0.608
# Plot the models: 

plot(corp_rep_pls_model, title = "PLS-SEM Results for Corporate Reputation Model")

Bootstrapping

PLS-SEM is a nonparametric method โ€“ thus, we need to perform bootstrapping to estimate standard errors and compute confidence intervals. SEMinR conducts high-performance bootstrapping using parallel processing, which utilizes the full performance of the central processing unit (CPU). The bootstrap_model() function is used to bootstrap a previously estimated SEMinR model. Below is the R codes:

# Bootstrap the model: 
boot_pls_corp_rep <- bootstrap_model(seminr_model = corp_rep_pls_model,
                                     nboot = 1000,
                                     cores = 2,
                                     seed = 29)


# Store the summary of the bootstrapped model: 
sum_boot_pls_corp_rep <- summary(boot_pls_corp_rep)

sum_boot_pls_corp_rep
## 
## Results from Bootstrap resamples:  1000
## 
## Bootstrapped Structural Paths:
##                Original Est. Bootstrap Mean Bootstrap SD T Stat. 2.5% CI
## COMP  ->  CUSA         0.148          0.167        0.052   2.839   0.058
## COMP  ->  CUSL         0.033          0.035        0.044   0.762  -0.046
## LIKE  ->  CUSA        -0.047          0.109        0.262  -0.180  -0.216
## LIKE  ->  CUSL         0.033          0.059        0.088   0.379  -0.084
## CUSA  ->  CUSL         0.608          0.529        0.281   2.168   0.108
##                97.5% CI
## COMP  ->  CUSA    0.274
## COMP  ->  CUSL    0.122
## LIKE  ->  CUSA    0.529
## LIKE  ->  CUSL    0.294
## CUSA  ->  CUSL    0.943
## 
## Bootstrapped Weights:
##                  Original Est. Bootstrap Mean Bootstrap SD T Stat. 2.5% CI
## comp_1  ->  COMP         0.363          0.393        0.134   2.709   0.157
## comp_2  ->  COMP         0.427          0.413        0.078   5.470   0.281
## comp_3  ->  COMP         0.409          0.388        0.065   6.342   0.268
## like_1  ->  LIKE         0.486          0.413        0.198   2.451  -0.132
## like_2  ->  LIKE         0.349          0.341        0.137   2.547   0.022
## like_3  ->  LIKE         0.318          0.353        0.275   1.158  -0.322
## cusa  ->  CUSA           1.000          1.000        0.000       .   1.000
## cusl_1  ->  CUSL         0.002          0.091        0.168   0.009  -0.030
## cusl_2  ->  CUSL         0.517          0.484        0.098   5.264   0.216
## cusl_3  ->  CUSL         0.603          0.610        0.118   5.133   0.326
##                  97.5% CI
## comp_1  ->  COMP    0.615
## comp_2  ->  COMP    0.558
## comp_3  ->  COMP    0.507
## like_1  ->  LIKE    0.699
## like_2  ->  LIKE    0.499
## like_3  ->  LIKE    0.976
## cusa  ->  CUSA      1.000
## cusl_1  ->  CUSL    0.535
## cusl_2  ->  CUSL    0.654
## cusl_3  ->  CUSL    0.889
## 
## Bootstrapped Loadings:
##                  Original Est. Bootstrap Mean Bootstrap SD T Stat. 2.5% CI
## comp_1  ->  COMP         0.766          0.777        0.080   9.556   0.621
## comp_2  ->  COMP         0.858          0.844        0.048  17.908   0.737
## comp_3  ->  COMP         0.868          0.851        0.040  21.864   0.765
## like_1  ->  LIKE         0.903          0.846        0.179   5.056   0.458
## like_2  ->  LIKE         0.859          0.824        0.177   4.866   0.479
## like_3  ->  LIKE         0.824          0.810        0.193   4.272   0.399
## cusa  ->  CUSA           1.000          1.000        0.000       .   1.000
## cusl_1  ->  CUSL        -0.002          0.096        0.190  -0.011  -0.054
## cusl_2  ->  CUSL         0.874          0.826        0.145   6.013   0.420
## cusl_3  ->  CUSL         0.909          0.897        0.090  10.090   0.538
##                  97.5% CI
## comp_1  ->  COMP    0.890
## comp_2  ->  COMP    0.916
## comp_3  ->  COMP    0.912
## like_1  ->  LIKE    0.942
## like_2  ->  LIKE    0.904
## like_3  ->  LIKE    0.978
## cusa  ->  CUSA      1.000
## cusl_1  ->  CUSL    0.591
## cusl_2  ->  CUSL    0.994
## cusl_3  ->  CUSL    0.994
## 
## Bootstrapped HTMT:
##                Original Est. Bootstrap Mean Bootstrap SD 2.5% CI 97.5% CI
## COMP  ->  LIKE         0.780          0.783        0.041   0.703    0.858
## COMP  ->  CUSA         0.134          0.258        0.168   0.107    0.551
## COMP  ->  CUSL         0.205          0.299        0.175   0.129    0.790
## LIKE  ->  CUSA         0.046          0.247        0.265   0.020    0.649
## LIKE  ->  CUSL         0.161          0.291        0.257   0.061    0.969
## CUSA  ->  CUSL         0.814          0.757        0.304   0.222    1.152
## 
## Bootstrapped Total Paths:
##                Original Est. Bootstrap Mean Bootstrap SD 2.5% CI 97.5% CI
## COMP  ->  CUSA         0.148          0.167        0.052   0.058    0.274
## COMP  ->  CUSL         0.124          0.125        0.059   0.012    0.238
## LIKE  ->  CUSA        -0.047          0.109        0.262  -0.216    0.529
## LIKE  ->  CUSL         0.005          0.053        0.153  -0.155    0.493
## CUSA  ->  CUSL         0.608          0.529        0.281   0.108    0.943
# Inspect the bootstrapped structural paths:
sum_boot_pls_corp_rep$bootstrapped_paths
##                Original Est. Bootstrap Mean Bootstrap SD T Stat. 2.5% CI
## COMP  ->  CUSA         0.148          0.167        0.052   2.839   0.058
## COMP  ->  CUSL         0.033          0.035        0.044   0.762  -0.046
## LIKE  ->  CUSA        -0.047          0.109        0.262  -0.180  -0.216
## LIKE  ->  CUSL         0.033          0.059        0.088   0.379  -0.084
## CUSA  ->  CUSL         0.608          0.529        0.281   2.168   0.108
##                97.5% CI
## COMP  ->  CUSA    0.274
## COMP  ->  CUSL    0.122
## LIKE  ->  CUSA    0.529
## LIKE  ->  CUSL    0.294
## CUSA  ->  CUSL    0.943
# Inspect the bootstrapped indicator loadings: 
sum_boot_pls_corp_rep$bootstrapped_loadings
##                  Original Est. Bootstrap Mean Bootstrap SD T Stat. 2.5% CI
## comp_1  ->  COMP         0.766          0.777        0.080   9.556   0.621
## comp_2  ->  COMP         0.858          0.844        0.048  17.908   0.737
## comp_3  ->  COMP         0.868          0.851        0.040  21.864   0.765
## like_1  ->  LIKE         0.903          0.846        0.179   5.056   0.458
## like_2  ->  LIKE         0.859          0.824        0.177   4.866   0.479
## like_3  ->  LIKE         0.824          0.810        0.193   4.272   0.399
## cusa  ->  CUSA           1.000          1.000        0.000       .   1.000
## cusl_1  ->  CUSL        -0.002          0.096        0.190  -0.011  -0.054
## cusl_2  ->  CUSL         0.874          0.826        0.145   6.013   0.420
## cusl_3  ->  CUSL         0.909          0.897        0.090  10.090   0.538
##                  97.5% CI
## comp_1  ->  COMP    0.890
## comp_2  ->  COMP    0.916
## comp_3  ->  COMP    0.912
## like_1  ->  LIKE    0.942
## like_2  ->  LIKE    0.904
## like_3  ->  LIKE    0.978
## cusa  ->  CUSA      1.000
## cusl_1  ->  CUSL    0.591
## cusl_2  ->  CUSL    0.994
## cusl_3  ->  CUSL    0.994

Object of summary_pls_corp_rep and plot the constructsโ€™ internal consistency reliabilities (i.e., Cronbachโ€™s alpha, rhoA, and rhoC):

# Inspect the construct reliability metrics:

summary_pls_corp_rep$reliability
##      alpha  rhoC   AVE  rhoA
## COMP 0.776 0.870 0.692 0.784
## LIKE 0.831 0.897 0.744 0.878
## CUSA 1.000 1.000 1.000 1.000
## CUSL 0.421 0.692 0.530 0.755
## 
## Alpha, rhoC, and rhoA should exceed 0.7 while AVE should exceed 0.5
# Plot the constructsโ€™ internal consistency reliabilities: 
plot(summary_pls_corp_rep$reliability)

Summary

This post shows the SEMinR syntax necessary for loading data, specifying and estimating a PLS-SEM model, and reporting the results. Unlike popular graphical user interface software that uses menus and buttons, using a programming language, such as R, creates many opportunities for errors and bugs to be introduced. It is crucial that you are well versed in the SEMinR syntax, functions, and arguments before you proceed. The SEMinR syntax for PLS-SEM is broadly divided into four stages: (1) loading and cleaning the data, (2) specifying the measurement models, (3) specifying the structural model, and (4) estimating, bootstrapping, and summarizing the model.

References

  1. Hair, J. F., Hult, G. T. M., Ringle, C. M., & Sarstedt, M. (2022). A primer on partial least squares structural equation modeling (PLS-SEM) (3rd ed.). Thousand Oaks, CA: Sage.

  2. Hair, J. F., Risher, J. J., Sarstedt, M., & Ringle, C. M. (2019). When to use and how to report the results of PLS-SEM. European Business Review, 31(1), 2โ€“24.

  3. Helm, S., Eggert, A., & Garnefeld, I. (2010). Modelling the impact of corporate reputation on customer satisfaction and loyalty using PLS. In V. Esposito Vinzi, W. W. Chin, J. Henseler, & H. Wang (Eds.), Handbook of partial least squares: Concepts, methods and applications in marketing and related fields (Springer Handbooks of Computational Statistics Series) (Vol. II, pp.ย 515โ€“ 534). Berlin: Springer.

  4. Sarstedt, M., Hair, J. F., Cheah, J. H., Becker, J. M., & Ringle, C. M. (2019). How to specify, estimate, and validate higher-order constructs in PLS-SEM. Australasian Marketing Journal, 27(3), 197โ€“211.