############## Chapter 4 ###############
library(lavaan)
library(rio)
library(semTools)
library(semPlot)
# read in data
CustomerDelight <- import("Customer Delight Data_Student.sav")

# define model
mod <- '
    behavior =~ adapt1 + adapt2 + adapt3 + adapt4 + adapt5
    customer =~ delight1 + delight2 + delight3
    word =~ WOM1 + WOM2 + WOM3
'
fit <- cfa( model = mod, data = CustomerDelight[, c(6:13, 39:41)])
summary(fit, fit.measures = TRUE, standardized=TRUE)
## lavaan 0.6-12 ended normally after 41 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        25
## 
##   Number of observations                           500
## 
## Model Test User Model:
##                                                       
##   Test statistic                                61.041
##   Degrees of freedom                                41
##   P-value (Chi-square)                           0.023
## 
## Model Test Baseline Model:
## 
##   Test statistic                              4760.823
##   Degrees of freedom                                55
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.996
##   Tucker-Lewis Index (TLI)                       0.994
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -5794.488
##   Loglikelihood unrestricted model (H1)      -5763.968
##                                                       
##   Akaike (AIC)                               11638.977
##   Bayesian (BIC)                             11744.342
##   Sample-size adjusted Bayesian (BIC)        11664.990
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.031
##   90 Percent confidence interval - lower         0.012
##   90 Percent confidence interval - upper         0.047
##   P-value RMSEA <= 0.05                          0.978
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.023
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   behavior =~                                                           
##     adapt1            1.000                               0.921    0.896
##     adapt2            0.976    0.030   32.773    0.000    0.899    0.921
##     adapt3            0.998    0.035   28.842    0.000    0.920    0.873
##     adapt4            0.995    0.034   29.028    0.000    0.917    0.875
##     adapt5            0.929    0.032   28.607    0.000    0.856    0.870
##   customer =~                                                           
##     delight1          1.000                               0.700    0.857
##     delight2          1.221    0.046   26.568    0.000    0.855    0.916
##     delight3          1.193    0.050   23.673    0.000    0.836    0.843
##   word =~                                                               
##     WOM1              1.000                               1.108    0.890
##     WOM2              1.075    0.042   25.769    0.000    1.191    0.889
##     WOM3              1.061    0.046   23.097    0.000    1.176    0.819
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   behavior ~~                                                           
##     customer          0.446    0.040   11.249    0.000    0.691    0.691
##     word              0.381    0.053    7.154    0.000    0.373    0.373
##   customer ~~                                                           
##     word              0.379    0.044    8.688    0.000    0.488    0.488
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .adapt1            0.208    0.017   12.496    0.000    0.208    0.197
##    .adapt2            0.145    0.013   11.285    0.000    0.145    0.152
##    .adapt3            0.264    0.020   13.224    0.000    0.264    0.238
##    .adapt4            0.256    0.019   13.160    0.000    0.256    0.234
##    .adapt5            0.236    0.018   13.302    0.000    0.236    0.244
##    .delight1          0.178    0.015   11.579    0.000    0.178    0.266
##    .delight2          0.141    0.017    8.133    0.000    0.141    0.161
##    .delight3          0.284    0.023   12.105    0.000    0.284    0.289
##    .WOM1              0.321    0.036    8.916    0.000    0.321    0.207
##    .WOM2              0.375    0.042    8.979    0.000    0.375    0.209
##    .WOM3              0.681    0.055   12.340    0.000    0.681    0.330
##     behavior          0.849    0.066   12.798    0.000    1.000    1.000
##     customer          0.491    0.042   11.665    0.000    1.000    1.000
##     word              1.228    0.100   12.234    0.000    1.000    1.000
# Visualizing the model
semPaths(fit, "par", weighted = FALSE, nCharNodes = 7, shapeMan = "rectangle",
         sizeMan = 8, sizeMan2 = 5)