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:
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:
# 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
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
## 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
## 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):
## 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
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.
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.
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.
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.
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.