Carregar o pacote lavaan

library(lavaan)
## Warning: pacote 'lavaan' foi compilado no R versão 4.4.1
## This is lavaan 0.6-18
## lavaan is FREE software! Please report any bugs.

Gerando dados fictícios para o modelo

# Definir o número de observações
n <- 500

# Gerar variáveis latentes
set.seed(123)
Qualidade_latente <- rnorm(n, mean = 0, sd = 1)
Experiencia_latente <- rnorm(n, mean = 0, sd = 1)

# Gerar variáveis observadas como combinações das variáveis latentes mais ruído
Rapidez <- 0.7 * Qualidade_latente + rnorm(n, mean = 0, sd = 0.3)
Competencia <- 0.8 * Qualidade_latente + rnorm(n, mean = 0, sd = 0.3)
Resolucao <- 0.9 * Qualidade_latente + rnorm(n, mean = 0, sd = 0.3)

Ambiencia <- 0.6 * Experiencia_latente + rnorm(n, mean = 0, sd = 0.3)
Produtos <- 0.7 * Experiencia_latente + rnorm(n, mean = 0, sd = 0.3)
Pagamento <- 0.8 * Experiencia_latente + rnorm(n, mean = 0, sd = 0.3)

# Gerar a variável Satisfacao como uma combinação das variáveis latentes mais ruído
Satisfacao <- 0.5 * Qualidade_latente + 0.6 * Experiencia_latente + rnorm(n, mean = 0, sd = 0.4)

# Criar o dataframe com as variáveis observadas
dados_cliente <- data.frame(Rapidez, Competencia, Resolucao, Ambiencia, Produtos, Pagamento, Satisfacao)

Definir o modelo SEM com as relações de interesse

model <- '
  # Variáveis latentes
  Qualidade =~ Rapidez + Competencia + Resolucao
  Experiencia =~ Ambiencia + Produtos + Pagamento

  # Regressão
  Satisfacao ~ Qualidade + Experiencia
'

Estimar o modelo

fit <- sem(model, data = dados_cliente)

Mostrar o sumário dos resultados

summary(fit, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-18 ended normally after 40 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        16
## 
##   Number of observations                           500
## 
## Model Test User Model:
##                                                       
##   Test statistic                                26.382
##   Degrees of freedom                                12
##   P-value (Chi-square)                           0.009
## 
## Model Test Baseline Model:
## 
##   Test statistic                              3651.935
##   Degrees of freedom                                21
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.996
##   Tucker-Lewis Index (TLI)                       0.993
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -2392.830
##   Loglikelihood unrestricted model (H1)      -2379.638
##                                                       
##   Akaike (AIC)                                4817.659
##   Bayesian (BIC)                              4885.093
##   Sample-size adjusted Bayesian (SABIC)       4834.308
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.049
##   90 Percent confidence interval - lower         0.023
##   90 Percent confidence interval - upper         0.074
##   P-value H_0: RMSEA <= 0.050                    0.487
##   P-value H_0: RMSEA >= 0.080                    0.021
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.020
## 
## 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
##   Qualidade =~                                                          
##     Rapidez           1.000                               0.693    0.914
##     Competencia       1.078    0.031   34.429    0.000    0.748    0.914
##     Resolucao         1.263    0.032   39.246    0.000    0.876    0.959
##   Experiencia =~                                                        
##     Ambiencia         1.000                               0.604    0.897
##     Produtos          1.170    0.036   32.878    0.000    0.707    0.921
##     Pagamento         1.325    0.038   34.798    0.000    0.801    0.943
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Satisfacao ~                                                          
##     Qualidade         0.739    0.031   23.610    0.000    0.512    0.583
##     Experiencia       1.030    0.039   26.558    0.000    0.622    0.708
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Qualidade ~~                                                          
##     Experiencia      -0.018    0.020   -0.910    0.363   -0.043   -0.043
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Rapidez           0.094    0.008   11.853    0.000    0.094    0.164
##    .Competencia       0.110    0.009   11.853    0.000    0.110    0.164
##    .Resolucao         0.067    0.009    7.419    0.000    0.067    0.080
##    .Ambiencia         0.089    0.007   12.356    0.000    0.089    0.195
##    .Produtos          0.090    0.008   11.023    0.000    0.090    0.152
##    .Pagamento         0.080    0.009    9.087    0.000    0.080    0.111
##    .Satisfacao        0.149    0.012   12.786    0.000    0.149    0.194
##     Qualidade         0.481    0.036   13.262    0.000    1.000    1.000
##     Experiencia       0.365    0.028   12.813    0.000    1.000    1.000

Gráfico: carregar o pacote semPlot

library(semPlot)
## Warning: pacote 'semPlot' foi compilado no R versão 4.4.1

Gerar o gráfico do modelo SEM com a função semPaths

# Definir as cores personalizadas para cada tipo de variável
cores_latentes <- "purple"    
cores_manif <- "royalblue"    
cores_paths <- "pink"        

# Gerar o gráfico do modelo SEM
semPaths(fit, 
         whatLabels = "std",             
         layout = "tree",                
         edge.label.cex = 1.2,           
         sizeMan = 9,                    
         sizeLat = 8,                    
         nCharNodes = 0,                 
         residuals = FALSE,              
         title = TRUE,                   
         curvePivot = TRUE,              
         color = list(lat = cores_latentes, 
                      man = cores_manif, 
                      int = cores_paths), 
         style = "lisrel")