# Load required libraries
library(cSEM)
## 
## Attaching package: 'cSEM'
## The following object is masked from 'package:stats':
## 
##     predict
library(DiagrammeR)
library(DiagrammeRsvg)
library(rsvg)
## Linking to librsvg 2.56.3
# Load external function files
source("cSEM/plot_csem.R")

# Specify the model with a saturated structural model:
model_IT_Flex="
# Composite models
ITComp  =~ ITCOMP1 + ITCOMP2 + ITCOMP3 + ITCOMP4      # Change from the original code <~ for testing.
Modul   <~ MOD1 + MOD2 + MOD3 + MOD4
ITConn  <~ ITCONN1 + ITCONN2 + ITCONN3 + ITCONN4
ITPers  <~ ITPSF1 + ITPSF2 + ITPSF3 + ITPSF4

# Saturated structural model
ITPers ~ ITComp + Modul + ITConn
Modul  ~ ITComp + ITConn 
ITConn ~ ITComp 
"

# Estimate the model using PLS:
csem_results <- csem(.data = ITFlex, 
                     .model = model_IT_Flex,
                     .resample_method = "bootstrap",
                     .dominant_indicators = c("ITComp" = "ITCOMP1","ITConn"="ITCONN1",
                                              "Modul"="MOD1","ITPers"="ITPSF1"))

plot_csem(csem_results,
          title = "SEM Diagram")
plot_csem(csem_results,
          title = "SEM Diagram",
          graph_attrs = "layout = circo") # dot, circo, fdp, twopi, neato, osage, patchwork
plot_csem(csem_results,
          title = "SEM Diagram",
          edge_lengths = 10,
          graph_attrs = "layout = fdp")
plot_csem(csem_results, 
          title = "SEM Diagram", 
          graph_attrs = "rankdir=LR; splines=polyline") # Or graph_attrs = c("rankdir=LR", "splines=line")
plot_csem(csem_results,
          title = "SEM Structural Model Diagram",
          show_structural_model_only = TRUE,
          graph_attrs = "rankdir=LR")
# Define ranks for nodes
node_ranks = list(
  rank1 = c("ITComp"),
  rank2 = c("ITConn", "Modul"),
  rank3 = c("ITPers")
)

graph_attrs = c("rankdir=LR", "ranksep=2", "nodesep=0.1")

plot_csem(csem_results,
          title = "SEM Structural Model Diagram",
          node_ranks = node_ranks,
          show_structural_model_only = TRUE,
          graph_attrs = "rankdir=LR")
plot_csem(csem_results,
          title = "SEM Diagram",
          node_ranks = node_ranks,
          graph_attrs = graph_attrs)
plot_csem(csem_results,
          title = "SEM Diagram")
plot_csem(csem_results,
          title = "SEM Diagram with No Colors",
          remove_colors = TRUE)
plot_csem(csem_results,
          title = "SEM Diagram",
          graph_attrs = "rankdir=LR")
# With correlation_lines
plot_csem(csem_results,
          title = "SEM Diagram with correlation_lines",
          run_correlation_lines = TRUE)
# Save the diagram as a PDF file
plot_csem_save("SEM_Custom_Diagram.pdf")
## Plot saved to SEM_Custom_Diagram.pdf
summarize(csem_results)
## ________________________________________________________________________________
## ----------------------------------- Overview -----------------------------------
## 
##  General information:
##  ------------------------
##  Estimation status                  = Ok
##  Number of observations             = 100
##  Weight estimator                   = PLS-PM
##  Inner weighting scheme             = "path"
##  Type of indicator correlation      = Pearson
##  Path model estimator               = OLS
##  Second-order approach              = NA
##  Type of path model                 = Linear
##  Disattenuated                      = Yes (PLSc)
## 
##  Resample information:
##  ---------------------
##  Resample method                    = "bootstrap"
##  Number of resamples                = 499
##  Number of admissible results       = 474
##  Approach to handle inadmissibles   = "drop"
##  Sign change option                 = "none"
##  Random seed                        = 675256336
## 
##  Construct details:
##  ------------------
##  Name    Modeled as     Order         Mode      
## 
##  ITComp  Common factor  First order   "modeA"   
##  ITConn  Composite      First order   "modeB"   
##  Modul   Composite      First order   "modeB"   
##  ITPers  Composite      First order   "modeB"   
## 
## ----------------------------------- Estimates ----------------------------------
## 
## Estimated path coefficients:
## ============================
##                                                                  CI_percentile   
##   Path               Estimate  Std. error   t-stat.   p-value         95%        
##   ITConn ~ ITComp      0.6493      0.0844    7.6933    0.0000 [ 0.4998; 0.8235 ] 
##   Modul ~ ITComp       0.4317      0.1691    2.5533    0.0107 [ 0.1622; 0.7843 ] 
##   Modul ~ ITConn       0.3250      0.1559    2.0850    0.0371 [ 0.0045; 0.5770 ] 
##   ITPers ~ ITComp     -0.0798      0.2752   -0.2899    0.7719 [-0.5042; 0.3830 ] 
##   ITPers ~ ITConn      0.2602      0.1591    1.6349    0.1021 [-0.0265; 0.5624 ] 
##   ITPers ~ Modul       0.4927      0.1792    2.7499    0.0060 [ 0.1694; 0.7821 ] 
## 
## Estimated loadings:
## ===================
##                                                                    CI_percentile   
##   Loading              Estimate  Std. error   t-stat.   p-value         95%        
##   ITComp =~ ITCOMP1      0.5779      0.1119    5.1645    0.0000 [ 0.3519; 0.7743 ] 
##   ITComp =~ ITCOMP2      0.5776      0.1189    4.8569    0.0000 [ 0.3153; 0.7793 ] 
##   ITComp =~ ITCOMP3      0.8645      0.0889    9.7205    0.0000 [ 0.6358; 0.9771 ] 
##   ITComp =~ ITCOMP4      0.6784      0.0912    7.4380    0.0000 [ 0.4969; 0.8492 ] 
##   ITConn =~ ITCONN1      0.4609      0.1269    3.6318    0.0003 [ 0.1674; 0.6747 ] 
##   ITConn =~ ITCONN2      0.7181      0.1172    6.1266    0.0000 [ 0.4268; 0.8830 ] 
##   ITConn =~ ITCONN3      0.8865      0.0661   13.4112    0.0000 [ 0.7030; 0.9660 ] 
##   ITConn =~ ITCONN4      0.7391      0.0999    7.3966    0.0000 [ 0.4928; 0.8926 ] 
##   Modul =~ MOD1          0.6399      0.1119    5.7191    0.0000 [ 0.3872; 0.8113 ] 
##   Modul =~ MOD2          0.7890      0.0694   11.3673    0.0000 [ 0.6273; 0.8914 ] 
##   Modul =~ MOD3          0.7208      0.0876    8.2287    0.0000 [ 0.5273; 0.8748 ] 
##   Modul =~ MOD4          0.7516      0.0824    9.1234    0.0000 [ 0.5635; 0.8872 ] 
##   ITPers =~ ITPSF1       0.8258      0.1119    7.3814    0.0000 [ 0.5390; 0.9580 ] 
##   ITPers =~ ITPSF2       0.5653      0.1601    3.5316    0.0004 [ 0.1980; 0.8316 ] 
##   ITPers =~ ITPSF3       0.7835      0.1143    6.8573    0.0000 [ 0.4813; 0.9131 ] 
##   ITPers =~ ITPSF4       0.6700      0.1431    4.6836    0.0000 [ 0.3559; 0.8786 ] 
## 
## Estimated weights:
## ==================
##                                                                    CI_percentile   
##   Weight               Estimate  Std. error   t-stat.   p-value         95%        
##   ITComp <~ ITCOMP1      0.2756      0.0495    5.5689    0.0000 [ 0.1734; 0.3662 ] 
##   ITComp <~ ITCOMP2      0.2754      0.0466    5.9063    0.0000 [ 0.1752; 0.3582 ] 
##   ITComp <~ ITCOMP3      0.4122      0.0448    9.1921    0.0000 [ 0.3233; 0.4946 ] 
##   ITComp <~ ITCOMP4      0.3235      0.0484    6.6867    0.0000 [ 0.2393; 0.4345 ] 
##   ITConn <~ ITCONN1      0.1736      0.1456    1.1917    0.2334 [-0.0919; 0.4663 ] 
##   ITConn <~ ITCONN2      0.2297      0.1732    1.3265    0.1847 [-0.1397; 0.5382 ] 
##   ITConn <~ ITCONN3      0.5472      0.1342    4.0773    0.0000 [ 0.2895; 0.8163 ] 
##   ITConn <~ ITCONN4      0.3653      0.1614    2.2631    0.0236 [ 0.0460; 0.6760 ] 
##   Modul <~ MOD1          0.2100      0.1281    1.6390    0.1012 [-0.0383; 0.4595 ] 
##   Modul <~ MOD2          0.4824      0.1514    3.1872    0.0014 [ 0.1406; 0.7303 ] 
##   Modul <~ MOD3          0.1303      0.1533    0.8500    0.3953 [-0.1227; 0.4557 ] 
##   Modul <~ MOD4          0.5203      0.1234    4.2159    0.0000 [ 0.2575; 0.7457 ] 
##   ITPers <~ ITPSF1       0.5670      0.2154    2.6319    0.0085 [ 0.1056; 0.9538 ] 
##   ITPers <~ ITPSF2       0.0399      0.2203    0.1811    0.8563 [-0.3605; 0.4981 ] 
##   ITPers <~ ITPSF3       0.4799      0.1737    2.7630    0.0057 [ 0.1048; 0.7713 ] 
##   ITPers <~ ITPSF4       0.1988      0.2153    0.9234    0.3558 [-0.2270; 0.6165 ] 
## 
## Estimated indicator correlations:
## =================================
##                                                                     CI_percentile   
##   Correlation           Estimate  Std. error   t-stat.   p-value         95%        
##   ITCONN1 ~~ ITCONN2      0.4521      0.1005    4.4971    0.0000 [ 0.2170; 0.6142 ] 
##   ITCONN1 ~~ ITCONN3      0.2813      0.1126    2.4969    0.0125 [ 0.0312; 0.4732 ] 
##   ITCONN1 ~~ ITCONN4      0.0811      0.1094    0.7416    0.4584 [-0.1396; 0.2943 ] 
##   ITCONN2 ~~ ITCONN3      0.4841      0.0973    4.9736    0.0000 [ 0.2788; 0.6613 ] 
##   ITCONN2 ~~ ITCONN4      0.3970      0.0783    5.0676    0.0000 [ 0.2247; 0.5321 ] 
##   ITCONN3 ~~ ITCONN4      0.4908      0.0916    5.3582    0.0000 [ 0.3080; 0.6547 ] 
##   MOD1 ~~ MOD2            0.4652      0.0922    5.0428    0.0000 [ 0.2840; 0.6393 ] 
##   MOD1 ~~ MOD3            0.4036      0.0873    4.6216    0.0000 [ 0.2349; 0.5788 ] 
##   MOD1 ~~ MOD4            0.2939      0.0932    3.1525    0.0016 [ 0.1041; 0.4711 ] 
##   MOD2 ~~ MOD3            0.6237      0.0590   10.5788    0.0000 [ 0.5039; 0.7370 ] 
##   MOD2 ~~ MOD4            0.2453      0.0951    2.5808    0.0099 [ 0.0660; 0.4309 ] 
##   MOD3 ~~ MOD4            0.3939      0.0980    4.0201    0.0001 [ 0.2178; 0.5924 ] 
##   ITPSF1 ~~ ITPSF2        0.5557      0.0769    7.2222    0.0000 [ 0.4057; 0.7004 ] 
##   ITPSF1 ~~ ITPSF3        0.3387      0.0925    3.6625    0.0002 [ 0.1561; 0.4976 ] 
##   ITPSF1 ~~ ITPSF4        0.3727      0.1057    3.5247    0.0004 [ 0.1544; 0.5747 ] 
##   ITPSF2 ~~ ITPSF3        0.2691      0.1162    2.3165    0.0205 [ 0.0229; 0.4781 ] 
##   ITPSF2 ~~ ITPSF4        0.4083      0.1098    3.7197    0.0002 [ 0.1986; 0.6190 ] 
##   ITPSF3 ~~ ITPSF4        0.5075      0.0802    6.3264    0.0000 [ 0.3486; 0.6532 ] 
## 
## ------------------------------------ Effects -----------------------------------
## 
## Estimated total effects:
## ========================
##                                                                  CI_percentile   
##   Total effect       Estimate  Std. error   t-stat.   p-value         95%        
##   ITConn ~ ITComp      0.6493      0.0844    7.6933    0.0000 [ 0.4998; 0.8235 ] 
##   Modul ~ ITComp       0.6427      0.0898    7.1548    0.0000 [ 0.4812; 0.8251 ] 
##   Modul ~ ITConn       0.3250      0.1559    2.0850    0.0371 [ 0.0045; 0.5770 ] 
##   ITPers ~ ITComp      0.4058      0.1383    2.9341    0.0033 [ 0.1725; 0.7066 ] 
##   ITPers ~ ITConn      0.4203      0.1601    2.6246    0.0087 [ 0.0877; 0.7016 ] 
##   ITPers ~ Modul       0.4927      0.1792    2.7499    0.0060 [ 0.1694; 0.7821 ] 
## 
## Estimated indirect effects:
## ===========================
##                                                                  CI_percentile   
##   Indirect effect    Estimate  Std. error   t-stat.   p-value         95%        
##   Modul ~ ITComp       0.2110      0.1068    1.9748    0.0483 [ 0.0032; 0.4012 ] 
##   ITPers ~ ITComp      0.4856      0.2025    2.3984    0.0165 [ 0.2529; 0.8516 ] 
##   ITPers ~ ITConn      0.1601      0.0935    1.7122    0.0869 [ 0.0012; 0.3406 ] 
## ________________________________________________________________________________