First, we will load the necessary packages, import the dataset, and convert it into a data frame. We will also check the structure of the dataset to confirm data types and variable names.

# Load necessary package
library(haven)

# Define the file path (use double backslashes or forward slashes)
data_path <- "C:/Users/Neimenovan uporabnik/Documents/04-IMB/00-Magistrska naloga/SPSS work/Analyses – kopija.sav"

# Import the SPSS data file
factor_data <- read_sav(data_path)

# Convert to a data frame
factor_data <- as.data.frame(factor_data)

# View first few rows
head(factor_data)
##   GENDER AGE EDUCATION TENURE POSITION OCAI_TS_1_a OCAI_TS_1_b OCAI_TS_1_c
## 1      2   3         6      5        1          30          10          40
## 2      2   4         7      5        2          20          10          30
## 3      1   3         3      4        1          30          20          30
## 4      2   3         4      5        1          20          20          20
## 5      2   3         6      2        1          60          10          10
## 6      2   3         6      5        1          10          30          50
##   OCAI_TS_1_d OCAI_ZS_1_a OCAI_ZS_1_b OCAI_ZS_1_c OCAI_ZS_1_d OCAI_TS_2_a
## 1          20          40          40          10          10          10
## 2          40          30          40          20          10          10
## 3          20          70          10           0          20          10
## 4          40          30          30          20          20          10
## 5          20          70          10          10          10          40
## 6          10          30          20          20          30          10
##   OCAI_TS_2_b OCAI_TS_2_c OCAI_TS_2_d OCAI_ZS_2_a OCAI_ZS_2_b OCAI_ZS_2_c
## 1          30          50          10          30          20          20
## 2          20          50          20          30          40          10
## 3          10          70          10          80          10           0
## 4          30          40          20          25          25          25
## 5          20          30          10          40          20          30
## 6          30          50          10          40          20          10
##   OCAI_ZS_2_d OCAI_TS_3_a OCAI_TS_3_b OCAI_TS_3_c OCAI_TS_3_d OCAI_ZS_3_a
## 1          30          29    22.39437    22.95775    25.56338     36.5493
## 2          20          30    10.00000    10.00000    50.00000     40.0000
## 3          10          40    20.00000    30.00000    10.00000     50.0000
## 4          25          20    15.00000    50.00000    15.00000     25.0000
## 5          10          50    30.00000    10.00000    10.00000     50.0000
## 6          30          20    30.00000    40.00000    10.00000     30.0000
##   OCAI_ZS_3_b OCAI_ZS_3_c OCAI_ZS_3_d OCAI_TS_4_a OCAI_TS_4_b OCAI_TS_4_c
## 1    22.49296    12.78873    28.16901    21.40845    30.42254    25.84507
## 2    30.00000    15.00000    15.00000    20.00000    10.00000    50.00000
## 3     0.00000     0.00000    50.00000     0.00000    50.00000    50.00000
## 4    25.00000    20.00000    30.00000    20.00000    30.00000    30.00000
## 5    30.00000     0.00000    20.00000    20.00000    30.00000    10.00000
## 6    30.00000    10.00000    30.00000    10.00000    30.00000    40.00000
##   OCAI_TS_4_d OCAI_ZS_4_a OCAI_ZS_4_b OCAI_ZS_4_c OCAI_ZS_4_d OCAI_TS_5_a
## 1    22.32394    41.40845    24.64789    16.22535    17.71831    20.71429
## 2    20.00000    30.00000    40.00000    10.00000    20.00000    10.00000
## 3     0.00000   100.00000     0.00000     0.00000     0.00000    20.00000
## 4    20.00000    30.00000    30.00000    10.00000    30.00000    10.00000
## 5    40.00000    70.00000    10.00000     0.00000    20.00000    30.00000
## 6    20.00000    40.00000    20.00000    20.00000    20.00000    10.00000
##   OCAI_TS_5_b OCAI_TS_5_c OCAI_TS_5_d OCAI_ZS_5_a OCAI_ZS_5_b OCAI_ZS_5_c
## 1    28.04286    30.78571    20.45714    36.85714    24.25714        19.1
## 2    10.00000    40.00000    40.00000    30.00000    30.00000        20.0
## 3    30.00000    50.00000     0.00000   100.00000     0.00000         0.0
## 4    10.00000    70.00000    10.00000    25.00000    25.00000        25.0
## 5    20.00000    40.00000    10.00000    60.00000    20.00000        10.0
## 6    30.00000    40.00000    20.00000    30.00000    20.00000        30.0
##   OCAI_ZS_5_d OCAI_TS_6_a OCAI_TS_6_b OCAI_TS_6_c OCAI_TS_6_d OCAI_ZS_6_a
## 1    19.78571    20.14706    14.67647        37.5    27.67647    36.54412
## 2    20.00000    10.00000    10.00000        60.0    20.00000    25.00000
## 3     0.00000    10.00000    10.00000        70.0    10.00000    80.00000
## 4    25.00000     5.00000    20.00000        50.0    25.00000    25.00000
## 5    10.00000    50.00000    10.00000        20.0    20.00000    60.00000
## 6    20.00000    20.00000    14.67647        37.5    27.67647    36.54412
##   OCAI_ZS_6_b OCAI_ZS_6_c OCAI_ZS_6_d UWES9a UWES9b UWES9c UWES9d UWES9e UWES9f
## 1    19.45588    21.98529    22.01471      4      4      4      4      4      4
## 2    25.00000    20.00000    30.00000      4      4      4      4      4      5
## 3    10.00000     0.00000    10.00000      4      4      4      3      3      4
## 4    25.00000    25.00000    25.00000      2      2      4      4      3      5
## 5    10.00000    10.00000    20.00000      3      4      4      3      4      3
## 6    19.45588    21.98529    22.01471      4      4      4      4      4      4
##   UWES9g UWES9h UWES9i PROMOTIVEa PROMOTIVEb PROMOTIVEc PROMOTIVEd PROHIBITIVa
## 1      4      4      4          3          3          3          3           3
## 2      5      5      5          5          4          5          5           5
## 3      4      3      3          4          4          2          3           2
## 4      4      3      4          4          4          4          4           3
## 5      4      4      5          5          4          4          4           4
## 6      4      4      4          3          3          3          3           3
##   PROHIBITIVb PROHIBITIVc PROHIBITIVd PSSa PSSa_reversed PSSb PSSc
## 1           3           3           3    3             3    4    3
## 2           5           5           5    3             3    2    3
## 3           2           2           2    3             3    2    5
## 4           2           3           4    4             2    2    2
## 5           3           3           4    2             4    4    2
## 6           3           3           3    3             3    4    3
##   PSSc_reversed PSSd PSSe PSSe_reversed PSSf PSSg ZWork_Engagement_Total
## 1             3    3    3             3    3    4             0.31497039
## 2             3    3    3             3    3    3             1.07089934
## 3             1    2    3             3    1    2            -0.44095855
## 4             4    2    3             3    3    4            -0.62994079
## 5             4    3    1             5    4    4            -0.06299408
## 6             3    3    3             3    3    4             0.31497039
##   Clan_Actual_Total ZClan_Actual_Total Adhocracy_Actual_Total
## 1          21.87830         -0.1802896               22.58937
## 2          16.66667         -0.8227343               11.66667
## 3          18.33333         -0.6172821               23.33333
## 4          14.16667         -1.1309126               20.83333
## 5          41.66667          2.2590481               20.00000
## 6          13.33333         -1.2336386               27.44608
##   ZAdhocracy_Actual_Total Market_Actual_Total ZMarket_Actual_Total
## 1            -0.135820156            34.51476            0.4372509
## 2            -2.167736042            40.00000            1.0433076
## 3             0.002576683            50.00000            2.1481929
## 4            -0.462490330            43.33333            1.4116027
## 5            -0.617512667            20.00000           -1.1664631
## 6             0.767657514            42.91667            1.3655658
##   Hierarchy_Actual_Total ZHierarchy_Actual_Total Clan_Desired_Total
## 1              21.003490              -0.2225896           36.89317
## 2              31.666667               1.1214825           30.83333
## 3               8.333333              -1.8196373           70.00000
## 4              21.666667              -0.1389974           26.66667
## 5              18.333333              -0.5591574           58.33333
## 6              16.279412              -0.8180501           34.42402
##   ZClan_Desired_Total Adhocracy_Desired_Total ZAdhocracy_Desired_Total
## 1         -0.03557533                25.14231                0.3325025
## 2         -0.53965096                34.16667                1.8696324
## 3          2.72000000                10.83000               -2.1000000
## 4         -0.88624709                26.66667                0.5921479
## 5          1.74788344                16.66667               -1.1111649
## 6         -0.24096666                21.57598               -0.2749552
##   Market_Desired_Total ZMarket_Desired_Total Hierarchy_Desired_Total
## 1             16.68323           -0.20963760                21.28129
## 2             15.83333           -0.32821783                19.16667
## 3              0.00000           -2.53733451                15.00000
## 4             20.83333            0.36939796                25.83333
## 5             10.00000           -1.14210292                15.00000
## 6             18.66422            0.06675582                25.33578
##   ZHierarchy_Desired_Total Clan_Incongruence Adhocracy_Incongruence
## 1               -0.1748333          15.01487               2.552940
## 2               -0.5148590          14.16667              18.330000
## 3               -1.1848476          43.30000              18.333333
## 4                0.5571227          12.50000               5.833333
## 5               -1.1848476          16.66667               3.333333
## 6                0.4771182          21.09069               5.870098
##   Market_Incongruence Hierarchy_Incongruence ZClan_Incongruence
## 1            17.83153              0.2778011        0.082031782
## 2            24.16667             12.5000000        0.005426467
## 3            38.33000              6.6666667        2.600000000
## 4            22.50000              4.1666667       -0.145098445
## 5            10.00000              3.3333333        0.231213836
## 6            24.25245              9.0563725        0.630768934
##   ZAdhocracy_Incongruence ZMarket_Incongruence ZHierarchy_Incongruence
## 1              -0.4756102            0.5089242             -0.94835369
## 2               2.7100000            1.1948361              1.03246139
## 3               2.7150215            2.7200000              0.08707057
## 4               0.1876513            1.0143845             -0.31809692
## 5              -0.3178228           -0.3390027             -0.45315276
## 6               0.1950847            1.2041241              0.47436303
##   ZPromotive_Voice_Total ZProhibitive_Voice_Total ZPsychological_Safety_Total
## 1             -1.2902837               -0.9920031                  -0.2314811
## 2              1.9530204                2.0964007                  -1.1308420
## 3             -0.8269546               -2.5362051                  -2.9295640
## 4              0.5630329               -0.9920031                  -1.1308420
## 5              1.0263621               -0.2199022                   1.2674538
## 6             -1.2902837               -0.9920031                  -0.2314811
##    Gen_Inco Work_Eng Prom_Voi Proh_Voi Psy_Safe
## 1  8.919284 4.000000     3.00      3.0 3.285714
## 2 17.290833 4.444444     4.75      5.0 2.857143
## 3 26.657500 3.555556     3.25      2.0 2.000000
## 4 11.250000 3.444444     4.00      3.0 2.857143
## 5  8.333333 3.777778     4.25      3.5 4.000000
## 6 15.067402 4.000000     3.00      3.0 3.285714
# Check the structure of the dataset
str(factor_data)
## 'data.frame':    79 obs. of  113 variables:
##  $ GENDER                     : num  2 2 1 2 2 2 2 2 2 2 ...
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ AGE                        : num  3 4 3 3 3 3 4 3 3 3 ...
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ EDUCATION                  : num  6 7 3 4 6 6 6 6 3 6 ...
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ TENURE                     : num  5 5 4 5 2 5 5 5 5 4 ...
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ POSITION                   : num  1 2 1 1 1 1 2 2 1 1 ...
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_TS_1_a                : num  30 20 30 20 60 10 20 20 20 15 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_TS_1_b                : num  10 10 20 20 10 30 35 20 25 15 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_TS_1_c                : num  40 30 30 20 10 50 35 40 30 35 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_TS_1_d                : num  20 40 20 40 20 10 10 20 25 35 ...
##   ..- attr(*, "format.spss")= chr "F3.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_ZS_1_a                : num  40 30 70 30 70 30 25 25 40 30 ...
##   ..- attr(*, "format.spss")= chr "F3.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_ZS_1_b                : num  40 40 10 30 10 20 25 30 40 20 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_ZS_1_c                : num  10 20 0 20 10 20 25 20 10 25 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_ZS_1_d                : num  10 10 20 20 10 30 25 25 10 25 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_TS_2_a                : num  10 10 10 10 40 10 20 25 20 20 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_TS_2_b                : num  30 20 10 30 20 30 30 20 30 25 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_TS_2_c                : num  50 50 70 40 30 50 30 35 40 30 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_TS_2_d                : num  10 20 10 20 10 10 20 20 10 25 ...
##   ..- attr(*, "format.spss")= chr "F3.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_ZS_2_a                : num  30 30 80 25 40 40 25 25 30 35 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_ZS_2_b                : num  20 40 10 25 20 20 25 25 20 20 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_ZS_2_c                : num  20 10 0 25 30 10 25 25 20 20 ...
##   ..- attr(*, "format.spss")= chr "F2.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_ZS_2_d                : num  30 20 10 25 10 30 25 25 30 25 ...
##   ..- attr(*, "format.spss")= chr "F3.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_TS_3_a                : num  29 30 40 20 50 20 25 30 10 20 ...
##   ..- attr(*, "format.spss")= chr "F3.0"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_TS_3_b                : num  22.4 10 20 15 30 ...
##   ..- attr(*, "format.spss")= chr "F16.2"
##   ..- attr(*, "display_width")= int 14
##  $ OCAI_TS_3_c                : num  23 10 30 50 10 ...
##   ..- attr(*, "format.spss")= chr "F17.2"
##   ..- attr(*, "display_width")= int 15
##  $ OCAI_TS_3_d                : num  25.6 50 10 15 10 ...
##   ..- attr(*, "format.spss")= chr "F17.2"
##   ..- attr(*, "display_width")= int 15
##  $ OCAI_ZS_3_a                : num  36.5 40 50 25 50 ...
##   ..- attr(*, "format.spss")= chr "F19.2"
##   ..- attr(*, "display_width")= int 15
##  $ OCAI_ZS_3_b                : num  22.5 30 0 25 30 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_ZS_3_c                : num  12.8 15 0 20 0 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_ZS_3_d                : num  28.2 15 50 30 20 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_TS_4_a                : num  21.4 20 0 20 20 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_TS_4_b                : num  30.4 10 50 30 30 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_TS_4_c                : num  25.8 50 50 30 10 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_TS_4_d                : num  22.3 20 0 20 40 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_ZS_4_a                : num  41.4 30 100 30 70 ...
##   ..- attr(*, "format.spss")= chr "F19.2"
##   ..- attr(*, "display_width")= int 15
##  $ OCAI_ZS_4_b                : num  24.6 40 0 30 10 ...
##   ..- attr(*, "format.spss")= chr "F17.2"
##   ..- attr(*, "display_width")= int 15
##  $ OCAI_ZS_4_c                : num  16.2 10 0 10 0 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_ZS_4_d                : num  17.7 20 0 30 20 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_TS_5_a                : num  20.7 10 20 10 30 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_TS_5_b                : num  28 10 30 10 20 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_TS_5_c                : num  30.8 40 50 70 40 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_TS_5_d                : num  20.5 40 0 10 10 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_ZS_5_a                : num  36.9 30 100 25 60 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_ZS_5_b                : num  24.3 30 0 25 20 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_ZS_5_c                : num  19.1 20 0 25 10 30 25 25 10 25 ...
##   ..- attr(*, "format.spss")= chr "F32.2"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_ZS_5_d                : num  19.8 20 0 25 10 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_TS_6_a                : num  20.1 10 10 5 50 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_TS_6_b                : num  14.7 10 10 20 10 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_TS_6_c                : num  37.5 60 70 50 20 37.5 20 50 50 30 ...
##   ..- attr(*, "format.spss")= chr "F4.2"
##   ..- attr(*, "display_width")= int 12
##  $ OCAI_TS_6_d                : num  27.7 20 10 25 20 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_ZS_6_a                : num  36.5 25 80 25 60 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_ZS_6_b                : num  19.5 25 10 25 10 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_ZS_6_c                : num  22 20 0 25 10 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ OCAI_ZS_6_d                : num  22 30 10 25 20 ...
##   ..- attr(*, "format.spss")= chr "F18.2"
##   ..- attr(*, "display_width")= int 16
##  $ UWES9a                     : num  4 4 4 2 3 4 4 4 2 2 ...
##   ..- attr(*, "label")= chr "UWES9a Pri svojem delu prekipevam od energije."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9b                     : num  4 4 4 2 4 4 4 4 3 2 ...
##   ..- attr(*, "label")= chr "UWES9b Pri delu se počutim svežega /-o in dejavnega/-no."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9c                     : num  4 4 4 4 4 4 4 4 4 3 ...
##   ..- attr(*, "label")= chr "UWES9c Nad svojim delom sem navdušen/-a."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9d                     : num  4 4 3 4 3 4 3 2 3 3 ...
##   ..- attr(*, "label")= chr "UWES9d Moje delo je zame vir navdiha."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9e                     : num  4 4 3 3 4 4 4 4 3 3 ...
##   ..- attr(*, "label")= chr "UWES9e Ko se zjutraj zbudim, se veselim svojega dela."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9f                     : num  4 5 4 5 3 4 4 4 4 3 ...
##   ..- attr(*, "label")= chr "UWES9f Srečen/-na sem, kadar intenzivno delam."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9g                     : num  4 5 4 4 4 4 5 4 4 4 ...
##   ..- attr(*, "label")= chr "UWES9g Ponosen/-na sem na delo, ki ga opravljam."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9h                     : num  4 5 3 3 4 4 4 3 4 4 ...
##   ..- attr(*, "label")= chr "UWES9h Moje delo me kar potegne vase."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9i                     : num  4 5 3 4 5 4 3 4 4 4 ...
##   ..- attr(*, "label")= chr "UWES9i Kadar delam, sem prevzet/-a nad delom."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROMOTIVEa                 : num  3 5 4 4 5 3 4 4 4 4 ...
##   ..- attr(*, "label")= chr "PROMOTIVEa Proaktivno razvijam in podajam rešitve za težave ali druge predloge, ki bi lahko pozitivno vplivali na podjetje."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROMOTIVEb                 : num  3 4 4 4 4 3 4 4 4 3 ...
##   ..- attr(*, "label")= chr "PROMOTIVEb Izražam svoje mnenje in spodbujam druge v skupini, da se vključijo v debate, ki zadevajo podjetje in delo."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROMOTIVEc                 : num  3 5 2 4 4 3 4 4 4 4 ...
##   ..- attr(*, "label")= chr "PROMOTIVEc Svoje mnenje o delu in z njim povezanimi tematikami delim z drugimi v skupini, tudi če so ostali dru"| __truncated__
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROMOTIVEd                 : num  3 5 3 4 4 3 4 3 3 3 ...
##   ..- attr(*, "label")= chr "PROMOTIVEd Proaktivno predlagam nove projekte, ki so koristni za podjetje."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROHIBITIVa                : num  3 5 2 3 4 3 4 4 5 4 ...
##   ..- attr(*, "label")= chr "PROHIBITIVa Iskreno spregovorim o težavah, ki bi lahko povzročile resno škodo podjetju, tudi če se drugi s tem ne strinjajo."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROHIBITIVb                : num  3 5 2 2 3 3 4 4 5 4 ...
##   ..- attr(*, "label")= chr "PROHIBITIVb Proaktivno poročam o težavah pri koordinaciji in organizaciji dela, ki bi lahko škodile delovni učinkovitosti."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROHIBITIVc                : num  3 5 2 3 3 3 3 4 4 4 ...
##   ..- attr(*, "label")= chr "PROHIBITIVc Proaktivno izpostavim težave, ki bi lahko bile škodljive za podjetje, tudi če bi to lahko slabo vpl"| __truncated__
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROHIBITIVd                : num  3 5 2 4 4 3 4 4 4 4 ...
##   ..- attr(*, "label")= chr "PROHIBITIVd Predlagam rešitve za preprečevanje morebitnih težav v podjetju, za katere iskreno mislim, da bi delovale."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PSSa                       : num  3 3 3 4 2 3 3 2 3 3 ...
##   ..- attr(*, "label")= chr "PSSa Če v tem podjetju narediš napako, ti to pogosto zamerijo."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PSSa_reversed              : num  3 3 3 2 4 3 3 4 3 3 ...
##   ..- attr(*, "format.spss")= chr "F8.0"
##   ..- attr(*, "display_width")= int 15
##  $ PSSb                       : num  4 2 2 2 4 4 4 4 2 3 ...
##   ..- attr(*, "label")= chr "PSSb Zaposleni v tem podjetju lahko odprto izpostavljamo težave in zahtevna vprašanja."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 7
##  $ PSSc                       : num  3 3 5 2 2 3 2 2 4 1 ...
##   ..- attr(*, "label")= chr "PSSc Zaposleni v tem podjetju včasih zavračajo/mo druge, ker so drugačni."
##   ..- attr(*, "format.spss")= chr "F1.0"
##  $ PSSc_reversed              : num  3 3 1 4 4 3 4 4 2 5 ...
##   ..- attr(*, "format.spss")= chr "F8.0"
##   ..- attr(*, "display_width")= int 9
##  $ PSSd                       : num  3 3 2 2 3 3 4 3 2 3 ...
##   ..- attr(*, "label")= chr "PSSd V tem podjetju je varno tvegati."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 7
##  $ PSSe                       : num  3 3 3 3 1 3 2 2 1 3 ...
##   ..- attr(*, "label")= chr "PSSe V tem podjetju je težko prositi druge za pomoč."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 7
##  $ PSSe_reversed              : num  3 3 3 3 5 3 4 4 5 3 ...
##   ..- attr(*, "format.spss")= chr "F8.0"
##   ..- attr(*, "display_width")= int 10
##  $ PSSf                       : num  3 3 1 3 4 3 4 3 3 4 ...
##   ..- attr(*, "label")= chr "PSSf Nihče v tem podjetju ne bi namerno ravnal na način, ki bi spodkopal moje prizadevanje."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 7
##  $ PSSg                       : num  4 3 2 4 4 4 4 4 2 3 ...
##   ..- attr(*, "label")= chr "PSSg Pri mojem delu v podjetju so moje edinstvene spretnosti in talenti cenjeni in uporabljeni."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 7
##  $ ZWork_Engagement_Total     : num  0.315 1.071 -0.441 -0.63 -0.063 ...
##   ..- attr(*, "label")= chr "Zscore(Work_Engagement_Total)"
##   ..- attr(*, "format.spss")= chr "F11.2"
##   ..- attr(*, "display_width")= int 13
##  $ Clan_Actual_Total          : num  21.9 16.7 18.3 14.2 41.7 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##   ..- attr(*, "display_width")= int 11
##  $ ZClan_Actual_Total         : num  -0.18 -0.823 -0.617 -1.131 2.259 ...
##   ..- attr(*, "label")= chr "Zscore(Clan_Actual_Total)"
##   ..- attr(*, "format.spss")= chr "F11.2"
##   ..- attr(*, "display_width")= int 11
##  $ Adhocracy_Actual_Total     : num  22.6 11.7 23.3 20.8 20 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##   ..- attr(*, "display_width")= int 13
##  $ ZAdhocracy_Actual_Total    : num  -0.13582 -2.16774 0.00258 -0.46249 -0.61751 ...
##   ..- attr(*, "label")= chr "Zscore(Adhocracy_Actual_Total)"
##   ..- attr(*, "format.spss")= chr "F11.2"
##   ..- attr(*, "display_width")= int 12
##  $ Market_Actual_Total        : num  34.5 40 50 43.3 20 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##   ..- attr(*, "display_width")= int 13
##  $ ZMarket_Actual_Total       : num  0.437 1.043 2.148 1.412 -1.166 ...
##   ..- attr(*, "label")= chr "Zscore(Market_Actual_Total)"
##   ..- attr(*, "format.spss")= chr "F11.2"
##   ..- attr(*, "display_width")= int 11
##  $ Hierarchy_Actual_Total     : num  21 31.67 8.33 21.67 18.33 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##   ..- attr(*, "display_width")= int 11
##  $ ZHierarchy_Actual_Total    : num  -0.223 1.121 -1.82 -0.139 -0.559 ...
##   ..- attr(*, "label")= chr "Zscore(Hierarchy_Actual_Total)"
##   ..- attr(*, "format.spss")= chr "F11.2"
##   ..- attr(*, "display_width")= int 13
##  $ Clan_Desired_Total         : num  36.9 30.8 70 26.7 58.3 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##   ..- attr(*, "display_width")= int 11
##  $ ZClan_Desired_Total        : num  -0.0356 -0.5397 2.72 -0.8862 1.7479 ...
##   ..- attr(*, "label")= chr "Zscore(Clan_Desired_Total)"
##   ..- attr(*, "format.spss")= chr "F11.2"
##   ..- attr(*, "display_width")= int 10
##  $ Adhocracy_Desired_Total    : num  25.1 34.2 10.8 26.7 16.7 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##   ..- attr(*, "display_width")= int 13
##  $ ZAdhocracy_Desired_Total   : num  0.333 1.87 -2.1 0.592 -1.111 ...
##   ..- attr(*, "label")= chr "Zscore(Adhocracy_Desired_Total)"
##   ..- attr(*, "format.spss")= chr "F11.2"
##   ..- attr(*, "display_width")= int 13
##  $ Market_Desired_Total       : num  16.7 15.8 0 20.8 10 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##   ..- attr(*, "display_width")= int 13
##  $ ZMarket_Desired_Total      : num  -0.21 -0.328 -2.537 0.369 -1.142 ...
##   ..- attr(*, "label")= chr "Zscore(Market_Desired_Total)"
##   ..- attr(*, "format.spss")= chr "F11.2"
##  $ Hierarchy_Desired_Total    : num  21.3 19.2 15 25.8 15 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##   ..- attr(*, "display_width")= int 13
##  $ ZHierarchy_Desired_Total   : num  -0.175 -0.515 -1.185 0.557 -1.185 ...
##   ..- attr(*, "label")= chr "Zscore(Hierarchy_Desired_Total)"
##   ..- attr(*, "format.spss")= chr "F11.2"
##   ..- attr(*, "display_width")= int 15
##  $ Clan_Incongruence          : num  15 14.2 43.3 12.5 16.7 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##   ..- attr(*, "display_width")= int 12
##  $ Adhocracy_Incongruence     : num  2.55 18.33 18.33 5.83 3.33 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##   ..- attr(*, "display_width")= int 12
##   [list output truncated]

The dataset was imported and converted into a data frame. The structure check confirms that all required variables are present and in the correct format for analysis (numeric).

We will now select only the relevant variables for CFA. Since CFA requires Likert-scale data, we will include only variables representing Work Engagement, Promotive Voice, Prohibitive Voice, and Psychological Safety.

# Define the variables we need
relevant_columns <- c(
  # Work Engagement
  "UWES9a", "UWES9b", "UWES9c", "UWES9d", "UWES9e", "UWES9h", "UWES9i",
  
  # Promotive Voice
  "PROMOTIVEa", "PROMOTIVEb", "PROMOTIVEc", "PROMOTIVEd",
  
  # Prohibitive Voice
  "PROHIBITIVa", "PROHIBITIVb", "PROHIBITIVc",
  
  # Psychological Safety
  "PSSa_reversed", "PSSb", "PSSc_reversed", "PSSd", "PSSe_reversed", "PSSf", "PSSg"
)

# Select only the relevant columns
factor_data_selected <- factor_data[, relevant_columns]

# Check structure to confirm selection
str(factor_data_selected)
## 'data.frame':    79 obs. of  21 variables:
##  $ UWES9a       : num  4 4 4 2 3 4 4 4 2 2 ...
##   ..- attr(*, "label")= chr "UWES9a Pri svojem delu prekipevam od energije."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9b       : num  4 4 4 2 4 4 4 4 3 2 ...
##   ..- attr(*, "label")= chr "UWES9b Pri delu se počutim svežega /-o in dejavnega/-no."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9c       : num  4 4 4 4 4 4 4 4 4 3 ...
##   ..- attr(*, "label")= chr "UWES9c Nad svojim delom sem navdušen/-a."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9d       : num  4 4 3 4 3 4 3 2 3 3 ...
##   ..- attr(*, "label")= chr "UWES9d Moje delo je zame vir navdiha."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9e       : num  4 4 3 3 4 4 4 4 3 3 ...
##   ..- attr(*, "label")= chr "UWES9e Ko se zjutraj zbudim, se veselim svojega dela."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9h       : num  4 5 3 3 4 4 4 3 4 4 ...
##   ..- attr(*, "label")= chr "UWES9h Moje delo me kar potegne vase."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ UWES9i       : num  4 5 3 4 5 4 3 4 4 4 ...
##   ..- attr(*, "label")= chr "UWES9i Kadar delam, sem prevzet/-a nad delom."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROMOTIVEa   : num  3 5 4 4 5 3 4 4 4 4 ...
##   ..- attr(*, "label")= chr "PROMOTIVEa Proaktivno razvijam in podajam rešitve za težave ali druge predloge, ki bi lahko pozitivno vplivali na podjetje."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROMOTIVEb   : num  3 4 4 4 4 3 4 4 4 3 ...
##   ..- attr(*, "label")= chr "PROMOTIVEb Izražam svoje mnenje in spodbujam druge v skupini, da se vključijo v debate, ki zadevajo podjetje in delo."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROMOTIVEc   : num  3 5 2 4 4 3 4 4 4 4 ...
##   ..- attr(*, "label")= chr "PROMOTIVEc Svoje mnenje o delu in z njim povezanimi tematikami delim z drugimi v skupini, tudi če so ostali dru"| __truncated__
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROMOTIVEd   : num  3 5 3 4 4 3 4 3 3 3 ...
##   ..- attr(*, "label")= chr "PROMOTIVEd Proaktivno predlagam nove projekte, ki so koristni za podjetje."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROHIBITIVa  : num  3 5 2 3 4 3 4 4 5 4 ...
##   ..- attr(*, "label")= chr "PROHIBITIVa Iskreno spregovorim o težavah, ki bi lahko povzročile resno škodo podjetju, tudi če se drugi s tem ne strinjajo."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROHIBITIVb  : num  3 5 2 2 3 3 4 4 5 4 ...
##   ..- attr(*, "label")= chr "PROHIBITIVb Proaktivno poročam o težavah pri koordinaciji in organizaciji dela, ki bi lahko škodile delovni učinkovitosti."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PROHIBITIVc  : num  3 5 2 3 3 3 3 4 4 4 ...
##   ..- attr(*, "label")= chr "PROHIBITIVc Proaktivno izpostavim težave, ki bi lahko bile škodljive za podjetje, tudi če bi to lahko slabo vpl"| __truncated__
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 12
##  $ PSSa_reversed: num  3 3 3 2 4 3 3 4 3 3 ...
##   ..- attr(*, "format.spss")= chr "F8.0"
##   ..- attr(*, "display_width")= int 15
##  $ PSSb         : num  4 2 2 2 4 4 4 4 2 3 ...
##   ..- attr(*, "label")= chr "PSSb Zaposleni v tem podjetju lahko odprto izpostavljamo težave in zahtevna vprašanja."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 7
##  $ PSSc_reversed: num  3 3 1 4 4 3 4 4 2 5 ...
##   ..- attr(*, "format.spss")= chr "F8.0"
##   ..- attr(*, "display_width")= int 9
##  $ PSSd         : num  3 3 2 2 3 3 4 3 2 3 ...
##   ..- attr(*, "label")= chr "PSSd V tem podjetju je varno tvegati."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 7
##  $ PSSe_reversed: num  3 3 3 3 5 3 4 4 5 3 ...
##   ..- attr(*, "format.spss")= chr "F8.0"
##   ..- attr(*, "display_width")= int 10
##  $ PSSf         : num  3 3 1 3 4 3 4 3 3 4 ...
##   ..- attr(*, "label")= chr "PSSf Nihče v tem podjetju ne bi namerno ravnal na način, ki bi spodkopal moje prizadevanje."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 7
##  $ PSSg         : num  4 3 2 4 4 4 4 4 2 3 ...
##   ..- attr(*, "label")= chr "PSSg Pri mojem delu v podjetju so moje edinstvene spretnosti in talenti cenjeni in uporabljeni."
##   ..- attr(*, "format.spss")= chr "F1.0"
##   ..- attr(*, "display_width")= int 7
# View first few rows
head(factor_data_selected)
##   UWES9a UWES9b UWES9c UWES9d UWES9e UWES9h UWES9i PROMOTIVEa PROMOTIVEb
## 1      4      4      4      4      4      4      4          3          3
## 2      4      4      4      4      4      5      5          5          4
## 3      4      4      4      3      3      3      3          4          4
## 4      2      2      4      4      3      3      4          4          4
## 5      3      4      4      3      4      4      5          5          4
## 6      4      4      4      4      4      4      4          3          3
##   PROMOTIVEc PROMOTIVEd PROHIBITIVa PROHIBITIVb PROHIBITIVc PSSa_reversed PSSb
## 1          3          3           3           3           3             3    4
## 2          5          5           5           5           5             3    2
## 3          2          3           2           2           2             3    2
## 4          4          4           3           2           3             2    2
## 5          4          4           4           3           3             4    4
## 6          3          3           3           3           3             3    4
##   PSSc_reversed PSSd PSSe_reversed PSSf PSSg
## 1             3    3             3    3    4
## 2             3    3             3    3    3
## 3             1    2             3    1    2
## 4             4    2             3    3    4
## 5             4    3             5    4    4
## 6             3    3             3    3    4

As we can see, the structure check confirms that all selected variables are correctly formatted.

Before proceeding, we will examine whether there are any missing values in the dataset.

# Check for missing values in each column
missing_values <- colSums(is.na(factor_data_selected))

# Display only variables with missing values
missing_values[missing_values > 0]
## named numeric(0)

We can see, we don’t have any missing values.

Now, we will assess the internal consistency reliability of our measurement scales using Cronbach’s Alpha. This helps determine whether the selected items for each latent construct are reliably measuring the same underlying concept.

# Load necessary package
#install.packages("psych")
library(psych)

# Select only the relevant variables for each construct
Work_Engagement <- factor_data_selected[, c("UWES9a", "UWES9b", "UWES9c", "UWES9d", "UWES9e", "UWES9h", "UWES9i")]
Promotive_Voice <- factor_data_selected[, c("PROMOTIVEa", "PROMOTIVEb", "PROMOTIVEc", "PROMOTIVEd")]
Prohibitive_Voice <- factor_data_selected[, c("PROHIBITIVa", "PROHIBITIVb", "PROHIBITIVc")]
Psychological_Safety <- factor_data_selected[, c("PSSa_reversed", "PSSb", "PSSc_reversed", "PSSd", "PSSe_reversed", "PSSf", "PSSg")]

# Convert all selected variables to numeric (if they are not already)
Work_Engagement <- data.frame(lapply(Work_Engagement, as.numeric))
Promotive_Voice <- data.frame(lapply(Promotive_Voice, as.numeric))
Prohibitive_Voice <- data.frame(lapply(Prohibitive_Voice, as.numeric))
Psychological_Safety <- data.frame(lapply(Psychological_Safety, as.numeric))

# Compute Cronbach's Alpha for each construct
alpha_we <- alpha(Work_Engagement)
alpha_pv <- alpha(Promotive_Voice)
alpha_prv <- alpha(Prohibitive_Voice)
alpha_ps <- alpha(Psychological_Safety)

# Print the reliability results
list(
  Work_Engagement = alpha_we$total$raw_alpha,
  Promotive_Voice = alpha_pv$total$raw_alpha,
  Prohibitive_Voice = alpha_prv$total$raw_alpha,
  Psychological_Safety = alpha_ps$total$raw_alpha
)
## $Work_Engagement
## [1] 0.8587033
## 
## $Promotive_Voice
## [1] 0.866964
## 
## $Prohibitive_Voice
## [1] 0.8759203
## 
## $Psychological_Safety
## [1] 0.703022

Cronbach’s Alpha values above 0.70 indicate acceptable reliability (Nunnally & Bernstein, 1994). Work Engagement, Promotive Voice, and Prohibitive Voice show strong internal consistency (>0.85), while Psychological Safety (α = 0.703) meets the threshold but is lower, suggesting potential item weakness. Since all values exceed 0.70, we can proceed with our analysis.

To assess the assumption of normality, we will compute skewness and kurtosis for each variable, which will help us evaluate the symmetry and peak distribution of the data. Additionally, we will perform the Shapiro-Wilk test to check for univariate normality, where a significant p-value (<0.05) indicates a deviation from normality. Finally, we will conduct Mardia’s test to assess multivariate normality, which is an important assumption for Confirmatory Factor Analysis (CFA). Due to the nature of our data, we expect normality assumptions to be violated, therefore we may need to use robust estimation techniques in subsequent analyses.

# Load required packages
library(psych)
library(moments)  # For skewness & kurtosis
library(MVN)      # For Mardia's Test

# Select only relevant variables for CFA
cfa_data <- factor_data_selected  # Ensure only CFA-related variables are included

# Compute skewness & kurtosis for each variable
skew_values <- apply(cfa_data, 2, skewness)
kurtosis_values <- apply(cfa_data, 2, kurtosis)

# Perform Shapiro-Wilk test for normality (univariate normality check)
shapiro_results <- apply(cfa_data, 2, function(x) shapiro.test(x)$p.value)

# Perform Mardia’s test for multivariate normality
mardia_test <- mvn(data = cfa_data, mvnTest = "mardia")

# Print results
list(
  Skewness = skew_values,
  Kurtosis = kurtosis_values,
  Shapiro_Wilk_pvalues = shapiro_results,
  Mardia_Test = mardia_test$multivariateNormality
)
## $Skewness
##        UWES9a        UWES9b        UWES9c        UWES9d        UWES9e 
##   -0.85284228   -1.60609783   -0.86229176   -0.70548380   -0.49269456 
##        UWES9h        UWES9i    PROMOTIVEa    PROMOTIVEb    PROMOTIVEc 
##   -0.37449777   -1.16880990   -0.56877437   -0.34895972   -0.47391515 
##    PROMOTIVEd   PROHIBITIVa   PROHIBITIVb   PROHIBITIVc PSSa_reversed 
##    0.29201928   -0.91728289   -0.70945546   -0.57460120   -0.38132469 
##          PSSb PSSc_reversed          PSSd PSSe_reversed          PSSf 
##   -0.89532209   -0.40636769   -0.33539453    0.05876489   -0.63417906 
##          PSSg 
##   -1.21173762 
## 
## $Kurtosis
##        UWES9a        UWES9b        UWES9c        UWES9d        UWES9e 
##      3.280179      5.941995      5.412529      3.268939      3.284041 
##        UWES9h        UWES9i    PROMOTIVEa    PROMOTIVEb    PROMOTIVEc 
##      3.894530      6.897122      3.896314      3.169960      3.329744 
##    PROMOTIVEd   PROHIBITIVa   PROHIBITIVb   PROHIBITIVc PSSa_reversed 
##      2.519969      4.365340      4.035467      3.690405      2.286626 
##          PSSb PSSc_reversed          PSSd PSSe_reversed          PSSf 
##      3.642929      2.828873      3.290917      2.900600      2.707043 
##          PSSg 
##      3.887838 
## 
## $Shapiro_Wilk_pvalues
##        UWES9a        UWES9b        UWES9c        UWES9d        UWES9e 
##  4.512410e-10  2.429468e-13  1.130750e-11  1.458676e-09  5.293784e-09 
##        UWES9h        UWES9i    PROMOTIVEa    PROMOTIVEb    PROMOTIVEc 
##  5.252831e-10  1.209860e-10  2.922500e-10  1.591527e-08  1.898477e-09 
##    PROMOTIVEd   PROHIBITIVa   PROHIBITIVb   PROHIBITIVc PSSa_reversed 
##  4.191723e-10  2.581343e-08  3.541372e-08  3.999133e-08  8.997598e-10 
##          PSSb PSSc_reversed          PSSd PSSe_reversed          PSSf 
##  4.849497e-09  3.898825e-06  8.055371e-09  8.031608e-08  4.974672e-08 
##          PSSg 
##  9.064072e-12 
## 
## $Mardia_Test
##              Test        Statistic              p value Result
## 1 Mardia Skewness  2907.0013517892 1.66661597810165e-58     NO
## 2 Mardia Kurtosis 14.2980566123947                    0     NO
## 3             MVN             <NA>                 <NA>     NO

Several variables show moderate skewness and high kurtosis, indicating deviations from normality. The Shapiro-Wilk test is significant for all variables (p < 0.05), confirming non-normality at the univariate level. Mardia’s test also indicates violations of multivariate normality. Since CFA assumes normality, we will use Maximum Likelihood with Robust Standard Errors (MLR) to account for these deviations.

To check for multicollinearity, we will compute Variance Inflation Factor (VIF) for each construct. VIF values above 5 indicate problematic multicollinearity, which could distort CFA results.

# Load the necessary package
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:psych':
## 
##     logit
# Function to compute VIF for a given dataset
compute_vif <- function(df) {
  dependent_var <- names(df)[1]  # Select the first variable as dependent
  independent_vars <- names(df)[-1]  # Remaining variables as independent
  
  # Create the regression formula
  formula <- as.formula(paste(dependent_var, "~", paste(independent_vars, collapse = " + ")))

  # Fit the model
  model <- lm(formula, data = df)
  
  # Compute VIF
  vif_values <- vif(model)
  return(vif_values)
}

# Compute VIF for Work Engagement
Work_Engagement <- factor_data_selected[, c("UWES9a", "UWES9b", "UWES9c", "UWES9d", "UWES9e", "UWES9h", "UWES9i")]
vif_we <- compute_vif(Work_Engagement)
print("VIF for Work Engagement:")
## [1] "VIF for Work Engagement:"
print(vif_we)
##   UWES9b   UWES9c   UWES9d   UWES9e   UWES9h   UWES9i 
## 1.516884 2.230528 2.409410 1.629641 1.553918 1.686472
# Compute VIF for Promotive Voice
Promotive_Voice <- factor_data_selected[, c("PROMOTIVEa", "PROMOTIVEb", "PROMOTIVEc", "PROMOTIVEd")]
vif_pv <- compute_vif(Promotive_Voice)
print("VIF for Promotive Voice:")
## [1] "VIF for Promotive Voice:"
print(vif_pv)
## PROMOTIVEb PROMOTIVEc PROMOTIVEd 
##   1.908965   1.850248   1.607122
# Compute VIF for Prohibitive Voice
Prohibitive_Voice <- factor_data_selected[, c("PROHIBITIVa", "PROHIBITIVb", "PROHIBITIVc")]
vif_prv <- compute_vif(Prohibitive_Voice)
print("VIF for Prohibitive Voice:")
## [1] "VIF for Prohibitive Voice:"
print(vif_prv)
## PROHIBITIVb PROHIBITIVc 
##    2.398712    2.398712
# Compute VIF for Psychological Safety
Psychological_Safety <- factor_data_selected[, c("PSSa_reversed", "PSSb", "PSSc_reversed", "PSSd", "PSSe_reversed", "PSSf", "PSSg")]
vif_ps <- compute_vif(Psychological_Safety)
print("VIF for Psychological Safety:")
## [1] "VIF for Psychological Safety:"
print(vif_ps)
##          PSSb PSSc_reversed          PSSd PSSe_reversed          PSSf 
##      1.251949      1.227405      1.152410      1.183793      1.469235 
##          PSSg 
##      1.292384

All VIF values range between 1.15 and 2.40, well below the threshold of 5, indicating no multicollinearity issues. Since all values are within an acceptable range, we can proceed with Confirmatory Factor Analysis (CFA) without concerns about redundancy.

To evaluate the suitability of our data for factor analysis, we will perform the Kaiser-Meyer-Olkin (KMO) test and Bartlett’s test of sphericity. The KMO test assesses sampling adequacy, where values above 0.70 indicate sufficient data structure for factor analysis. Bartlett’s test checks whether the correlation matrix is significantly different from an identity matrix, with a significant p-value (<0.05) confirming that factor analysis is appropriate.

# Load necessary package
library(psych)

# Perform KMO Test
kmo_result <- KMO(factor_data_selected)
print("Kaiser-Meyer-Olkin (KMO) Test:")
## [1] "Kaiser-Meyer-Olkin (KMO) Test:"
print(kmo_result)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = factor_data_selected)
## Overall MSA =  0.73
## MSA for each item = 
##        UWES9a        UWES9b        UWES9c        UWES9d        UWES9e 
##          0.73          0.73          0.79          0.83          0.82 
##        UWES9h        UWES9i    PROMOTIVEa    PROMOTIVEb    PROMOTIVEc 
##          0.68          0.85          0.75          0.77          0.81 
##    PROMOTIVEd   PROHIBITIVa   PROHIBITIVb   PROHIBITIVc PSSa_reversed 
##          0.71          0.76          0.76          0.63          0.69 
##          PSSb PSSc_reversed          PSSd PSSe_reversed          PSSf 
##          0.77          0.55          0.82          0.59          0.54 
##          PSSg 
##          0.65
# Perform Bartlett's Test
bartlett_result <- cortest.bartlett(cor(factor_data_selected), n = nrow(factor_data_selected))
print("Bartlett's Test of Sphericity:")
## [1] "Bartlett's Test of Sphericity:"
print(bartlett_result)
## $chisq
## [1] 877.936
## 
## $p.value
## [1] 1.887426e-82
## 
## $df
## [1] 210

The KMO test yielded an overall MSA of 0.73, indicating adequate sampling adequacy for factor analysis. Some individual items, particularly PSSc_reversed (0.55) and PSSf (0.54), show weaker adequacy, but the overall result supports proceeding with CFA. Bartlett’s test was highly significant (χ² = 877.94, p < 0.001), confirming that the variables are sufficiently correlated for factor analysis.

We will conduct Confirmatory Factor Analysis (CFA) to assess the measurement model for Work Engagement, Promotive Voice, Prohibitive Voice, and Psychological Safety. The model specifies the expected relationships between observed variables and latent constructs, allowing correlations between factors.

# Load necessary packages
library(lavaan)
## This is lavaan 0.6-19
## lavaan is FREE software! Please report any bugs.
## 
## Attaching package: 'lavaan'
## The following object is masked from 'package:psych':
## 
##     cor2cov
library(psych)
library(GPArotation)
## 
## Attaching package: 'GPArotation'
## The following objects are masked from 'package:psych':
## 
##     equamax, varimin
# Define CFA Model
cfa_model <- '
  # Work Engagement
  Work_Engagement =~ UWES9a + UWES9b + UWES9c + UWES9d + UWES9e + UWES9h + UWES9i

  # Promotive Voice
  Promotive_Voice =~ PROMOTIVEa + PROMOTIVEb + PROMOTIVEc + PROMOTIVEd

  # Prohibitive Voice (Including all three indicators)
  Prohibitive_Voice =~ PROHIBITIVa + PROHIBITIVb + PROHIBITIVc

  # Psychological Safety (Ensuring all specified indicators are included)
  Psychological_Safety =~ PSSa_reversed + PSSb + PSSc_reversed + PSSd + PSSe_reversed + PSSf + PSSg

  # Correlations between factors (since they are theoretically related)
  Work_Engagement ~~ Promotive_Voice
  Work_Engagement ~~ Prohibitive_Voice
  Work_Engagement ~~ Psychological_Safety
  Promotive_Voice ~~ Prohibitive_Voice
  Promotive_Voice ~~ Psychological_Safety
  Prohibitive_Voice ~~ Psychological_Safety
'

# Fit CFA model using Maximum Likelihood Estimation (MLR) with missing data handled via FIML
fit <- cfa(cfa_model, data = factor_data_selected, estimator = "MLR", missing = "fiml")
## Warning: lavaan->lav_model_vcov():  
##    The variance-covariance matrix of the estimated parameters (vcov) does not 
##    appear to be positive definite! The smallest eigenvalue (= -6.504367e-17) 
##    is smaller than zero. This may be a symptom that the model is not 
##    identified.
# Print summary with standardized estimates & fit measures
summary(fit, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-19 ended normally after 67 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        69
## 
##   Number of observations                            79
##   Number of missing patterns                         1
## 
## Model Test User Model:
##                                               Standard      Scaled
##   Test Statistic                               376.905     335.981
##   Degrees of freedom                               183         183
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  1.122
##     Yuan-Bentler correction (Mplus variant)                       
## 
## Model Test Baseline Model:
## 
##   Test statistic                               988.460     822.958
##   Degrees of freedom                               210         210
##   P-value                                        0.000       0.000
##   Scaling correction factor                                  1.201
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.751       0.750
##   Tucker-Lewis Index (TLI)                       0.714       0.714
##                                                                   
##   Robust Comparative Fit Index (CFI)                         0.783
##   Robust Tucker-Lewis Index (TLI)                            0.752
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -1463.848   -1463.848
##   Scaling correction factor                                  1.402
##       for the MLR correction                                      
##   Loglikelihood unrestricted model (H1)      -1275.395   -1275.395
##   Scaling correction factor                                  1.198
##       for the MLR correction                                      
##                                                                   
##   Akaike (AIC)                                3065.696    3065.696
##   Bayesian (BIC)                              3229.188    3229.188
##   Sample-size adjusted Bayesian (SABIC)       3011.627    3011.627
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.116       0.103
##   90 Percent confidence interval - lower         0.099       0.086
##   90 Percent confidence interval - upper         0.132       0.119
##   P-value H_0: RMSEA <= 0.050                    0.000       0.000
##   P-value H_0: RMSEA >= 0.080                    1.000       0.988
##                                                                   
##   Robust RMSEA                                               0.105
##   90 Percent confidence interval - lower                     0.085
##   90 Percent confidence interval - upper                     0.124
##   P-value H_0: Robust RMSEA <= 0.050                         0.000
##   P-value H_0: Robust RMSEA >= 0.080                         0.981
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.110       0.110
## 
## Parameter Estimates:
## 
##   Standard errors                             Sandwich
##   Information bread                           Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                           Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Work_Engagement =~                                                           
##     UWES9a                   1.000                               0.485    0.662
##     UWES9b                   0.783    0.138    5.652    0.000    0.380    0.629
##     UWES9c                   0.911    0.163    5.584    0.000    0.442    0.783
##     UWES9d                   1.172    0.240    4.881    0.000    0.568    0.815
##     UWES9e                   0.944    0.202    4.684    0.000    0.458    0.672
##     UWES9h                   0.745    0.235    3.165    0.002    0.361    0.591
##     UWES9i                   0.901    0.251    3.593    0.000    0.437    0.651
##   Promotive_Voice =~                                                           
##     PROMOTIVEa               1.000                               0.515    0.853
##     PROMOTIVEb               1.090    0.121    9.018    0.000    0.561    0.810
##     PROMOTIVEc               1.014    0.115    8.834    0.000    0.522    0.811
##     PROMOTIVEd               0.786    0.116    6.761    0.000    0.404    0.683
##   Prohibitive_Voice =~                                                         
##     PROHIBITIVa              1.000                               0.664    0.795
##     PROHIBITIVb              1.081    0.112    9.645    0.000    0.718    0.930
##     PROHIBITIVc              0.902    0.096    9.355    0.000    0.599    0.805
##   Psychological_Safety =~                                                      
##     PSSa_reversed            1.000                               0.307    0.476
##     PSSb                     1.487    0.739    2.012    0.044    0.456    0.567
##     PSSc_reversed            1.420    0.636    2.234    0.025    0.435    0.445
##     PSSd                     0.960    0.643    1.493    0.135    0.294    0.439
##     PSSe_reversed            1.310    0.356    3.680    0.000    0.402    0.474
##     PSSf                     1.630    0.727    2.241    0.025    0.500    0.585
##     PSSg                     1.230    0.774    1.589    0.112    0.377    0.560
## 
## Covariances:
##                        Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Work_Engagement ~~                                                        
##     Promotive_Voic        0.033    0.052    0.631    0.528    0.130    0.130
##     Prohibitive_Vc        0.054    0.049    1.097    0.273    0.167    0.167
##     Psychlgcl_Sfty        0.077    0.038    2.012    0.044    0.518    0.518
##   Promotive_Voice ~~                                                        
##     Prohibitive_Vc        0.198    0.056    3.502    0.000    0.579    0.579
##     Psychlgcl_Sfty        0.047    0.030    1.559    0.119    0.295    0.295
##   Prohibitive_Voice ~~                                                      
##     Psychlgcl_Sfty        0.098    0.064    1.521    0.128    0.479    0.479
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .UWES9a            3.633    0.082   44.099    0.000    3.633    4.962
##    .UWES9b            3.797    0.068   55.941    0.000    3.797    6.294
##    .UWES9c            3.899    0.064   61.367    0.000    3.899    6.904
##    .UWES9d            3.633    0.078   46.342    0.000    3.633    5.214
##    .UWES9e            3.696    0.077   48.194    0.000    3.696    5.422
##    .UWES9h            4.076    0.069   59.241    0.000    4.076    6.665
##    .UWES9i            3.924    0.075   51.997    0.000    3.924    5.850
##    .PROMOTIVEa        3.797    0.068   55.941    0.000    3.797    6.294
##    .PROMOTIVEb        3.772    0.078   48.407    0.000    3.772    5.446
##    .PROMOTIVEc        3.696    0.072   51.056    0.000    3.696    5.744
##    .PROMOTIVEd        3.519    0.067   52.800    0.000    3.519    5.940
##    .PROHIBITIVa       3.684    0.094   39.207    0.000    3.684    4.411
##    .PROHIBITIVb       3.684    0.087   42.407    0.000    3.684    4.771
##    .PROHIBITIVc       3.506    0.084   41.880    0.000    3.506    4.712
##    .PSSa_reversed     3.304    0.072   45.636    0.000    3.304    5.134
##    .PSSb              3.595    0.090   39.753    0.000    3.595    4.473
##    .PSSc_reversed     3.658    0.110   33.200    0.000    3.658    3.735
##    .PSSd              2.861    0.075   37.948    0.000    2.861    4.269
##    .PSSe_reversed     3.620    0.095   38.013    0.000    3.620    4.277
##    .PSSf              3.076    0.096   32.034    0.000    3.076    3.604
##    .PSSg              3.658    0.076   48.320    0.000    3.658    5.436
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .UWES9a            0.301    0.076    3.944    0.000    0.301    0.561
##    .UWES9b            0.220    0.052    4.218    0.000    0.220    0.604
##    .UWES9c            0.124    0.026    4.721    0.000    0.124    0.387
##    .UWES9d            0.163    0.057    2.870    0.004    0.163    0.335
##    .UWES9e            0.255    0.054    4.758    0.000    0.255    0.549
##    .UWES9h            0.243    0.041    5.986    0.000    0.243    0.651
##    .UWES9i            0.259    0.064    4.041    0.000    0.259    0.576
##    .PROMOTIVEa        0.099    0.031    3.245    0.001    0.099    0.272
##    .PROMOTIVEb        0.165    0.055    2.987    0.003    0.165    0.343
##    .PROMOTIVEc        0.142    0.043    3.266    0.001    0.142    0.342
##    .PROMOTIVEd        0.187    0.036    5.188    0.000    0.187    0.534
##    .PROHIBITIVa       0.256    0.152    1.683    0.092    0.256    0.368
##    .PROHIBITIVb       0.081    0.047    1.707    0.088    0.081    0.136
##    .PROHIBITIVc       0.195    0.053    3.670    0.000    0.195    0.352
##    .PSSa_reversed     0.320    0.065    4.929    0.000    0.320    0.773
##    .PSSb              0.438    0.075    5.875    0.000    0.438    0.678
##    .PSSc_reversed     0.770    0.197    3.898    0.000    0.770    0.802
##    .PSSd              0.362    0.064    5.701    0.000    0.362    0.807
##    .PSSe_reversed     0.555    0.138    4.016    0.000    0.555    0.775
##    .PSSf              0.479    0.125    3.826    0.000    0.479    0.657
##    .PSSg              0.311    0.077    4.056    0.000    0.311    0.686
##     Work_Engagemnt    0.235    0.090    2.602    0.009    1.000    1.000
##     Promotive_Voic    0.265    0.072    3.683    0.000    1.000    1.000
##     Prohibitive_Vc    0.441    0.127    3.460    0.001    1.000    1.000
##     Psychlgcl_Sfty    0.094    0.069    1.364    0.172    1.000    1.000
# Extract fit indices
fitMeasures(fit, c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr"))
##   chisq      df  pvalue     cfi     tli   rmsea    srmr 
## 376.905 183.000   0.000   0.751   0.714   0.116   0.110

The initial model fit was poor (CFI = 0.751, TLI = 0.714, RMSEA = 0.116, SRMR = 0.110), indicating issues with model specification. A warning suggests possible model identification problems. Modification indices will be examined to refine the model and improve fit.

# Extract Modification Indices (MI)
mod_indices <- modificationIndices(fit)

# Display the top modification suggestions (sorted by MI value)
mod_indices[order(mod_indices$mi, decreasing = TRUE), ][1:10, ]
##                   lhs op           rhs     mi    epc sepc.lv sepc.all sepc.nox
## 91    Work_Engagement =~          PSSg 19.954  0.874   0.424    0.630    0.630
## 141            UWES9a ~~        UWES9b 14.102  0.123   0.123    0.479    0.479
## 175            UWES9b ~~ PSSc_reversed 11.458 -0.168  -0.168   -0.409   -0.409
## 333     PSSa_reversed ~~ PSSe_reversed  9.679  0.166   0.166    0.393    0.393
## 313       PROHIBITIVa ~~          PSSf  9.392  0.141   0.141    0.401    0.401
## 87    Work_Engagement =~ PSSc_reversed  9.154 -0.879  -0.426   -0.435   -0.435
## 154            UWES9a ~~ PSSa_reversed  8.607  0.112   0.112    0.360    0.360
## 329       PROHIBITIVc ~~          PSSg  7.015  0.085   0.085    0.346    0.346
## 126 Prohibitive_Voice =~          PSSg  6.831 -0.350  -0.233   -0.346   -0.346
## 294        PROMOTIVEc ~~          PSSf  6.783  0.093   0.093    0.355    0.355

The modification indices (MI) suggest potential correlated errors and misspecified relationships in the model. The highest MI (19.954) indicates that PSSg may load onto Work Engagement, but since Psychological Safety and Work Engagement are distinct constructs, adding this cross-loading would not be theoretically justified. Other modifications, such as correlating errors between UWES9a and UWES9b (MI = 14.102), suggest shared variance that could be due to item similarity or structural relationship.

Based on that, we will refine the CFA model by removing PSSc_reversed, PSSf, and PSSg from the Psychological Safety construct. This adjustment aims to improve model fit while maintaining construct validity. The updated model will be tested using maximum likelihood (ML) estimation, and we will evaluate its overall fit.

library(lavaan)

# Define the adjusted CFA model
cfa_model <- '
  Work_Engagement =~ UWES9a + UWES9b + UWES9c + UWES9d + UWES9e + UWES9h + UWES9i
  Promotive_Voice =~ PROMOTIVEa + PROMOTIVEb + PROMOTIVEc + PROMOTIVEd
  Prohibitive_Voice =~ PROHIBITIVa + PROHIBITIVb + PROHIBITIVc
  Psychological_Safety =~ PSSa_reversed + PSSb + PSSd + PSSe_reversed
'

# Run CFA
fit <- cfa(cfa_model, data = factor_data_selected, estimator = "ML")

# Print the results
summary(fit, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-19 ended normally after 64 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        42
## 
##   Number of observations                            79
## 
## Model Test User Model:
##                                                       
##   Test statistic                               222.150
##   Degrees of freedom                               129
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                               789.034
##   Degrees of freedom                               153
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.854
##   Tucker-Lewis Index (TLI)                       0.826
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -1195.355
##   Loglikelihood unrestricted model (H1)      -1084.280
##                                                       
##   Akaike (AIC)                                2474.710
##   Bayesian (BIC)                              2574.227
##   Sample-size adjusted Bayesian (SABIC)       2441.798
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.096
##   90 Percent confidence interval - lower         0.074
##   90 Percent confidence interval - upper         0.117
##   P-value H_0: RMSEA <= 0.050                    0.001
##   P-value H_0: RMSEA >= 0.080                    0.887
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.106
## 
## 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
##   Work_Engagement =~                                                           
##     UWES9a                   1.000                               0.478    0.653
##     UWES9b                   0.788    0.163    4.820    0.000    0.377    0.625
##     UWES9c                   0.919    0.160    5.760    0.000    0.440    0.779
##     UWES9d                   1.200    0.200    5.995    0.000    0.574    0.824
##     UWES9e                   0.950    0.187    5.093    0.000    0.455    0.667
##     UWES9h                   0.763    0.165    4.635    0.000    0.365    0.597
##     UWES9i                   0.922    0.183    5.031    0.000    0.441    0.657
##   Promotive_Voice =~                                                           
##     PROMOTIVEa               1.000                               0.514    0.852
##     PROMOTIVEb               1.095    0.133    8.232    0.000    0.563    0.813
##     PROMOTIVEc               1.014    0.124    8.199    0.000    0.521    0.810
##     PROMOTIVEd               0.785    0.120    6.530    0.000    0.404    0.682
##   Prohibitive_Voice =~                                                         
##     PROHIBITIVa              1.000                               0.646    0.774
##     PROHIBITIVb              1.140    0.131    8.668    0.000    0.736    0.954
##     PROHIBITIVc              0.914    0.121    7.578    0.000    0.591    0.794
##   Psychological_Safety =~                                                      
##     PSSa_reversed            1.000                               0.423    0.657
##     PSSb                     0.828    0.285    2.901    0.004    0.350    0.435
##     PSSd                     0.532    0.228    2.338    0.019    0.225    0.336
##     PSSe_reversed            1.224    0.340    3.605    0.000    0.517    0.611
## 
## Covariances:
##                        Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Work_Engagement ~~                                                        
##     Promotive_Voic        0.032    0.032    0.986    0.324    0.128    0.128
##     Prohibitive_Vc        0.049    0.040    1.242    0.214    0.160    0.160
##     Psychlgcl_Sfty        0.062    0.034    1.857    0.063    0.308    0.308
##   Promotive_Voice ~~                                                        
##     Prohibitive_Vc        0.188    0.051    3.660    0.000    0.566    0.566
##     Psychlgcl_Sfty        0.080    0.036    2.229    0.026    0.370    0.370
##   Prohibitive_Voice ~~                                                      
##     Psychlgcl_Sfty        0.163    0.052    3.140    0.002    0.597    0.597
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .UWES9a            0.307    0.055    5.627    0.000    0.307    0.573
##    .UWES9b            0.222    0.039    5.721    0.000    0.222    0.610
##    .UWES9c            0.126    0.026    4.907    0.000    0.126    0.394
##    .UWES9d            0.156    0.035    4.399    0.000    0.156    0.321
##    .UWES9e            0.258    0.046    5.577    0.000    0.258    0.555
##    .UWES9h            0.241    0.042    5.798    0.000    0.241    0.644
##    .UWES9i            0.255    0.046    5.613    0.000    0.255    0.568
##    .PROMOTIVEa        0.100    0.025    4.038    0.000    0.100    0.274
##    .PROMOTIVEb        0.163    0.035    4.630    0.000    0.163    0.339
##    .PROMOTIVEc        0.142    0.030    4.663    0.000    0.142    0.343
##    .PROMOTIVEd        0.188    0.034    5.570    0.000    0.188    0.535
##    .PROHIBITIVa       0.280    0.053    5.293    0.000    0.280    0.401
##    .PROHIBITIVb       0.054    0.036    1.517    0.129    0.054    0.090
##    .PROHIBITIVc       0.205    0.040    5.102    0.000    0.205    0.370
##    .PSSa_reversed     0.235    0.057    4.115    0.000    0.235    0.568
##    .PSSb              0.524    0.093    5.639    0.000    0.524    0.811
##    .PSSd              0.398    0.067    5.937    0.000    0.398    0.887
##    .PSSe_reversed     0.449    0.098    4.580    0.000    0.449    0.626
##     Work_Engagemnt    0.229    0.074    3.093    0.002    1.000    1.000
##     Promotive_Voic    0.264    0.059    4.492    0.000    1.000    1.000
##     Prohibitive_Vc    0.417    0.106    3.954    0.000    1.000    1.000
##     Psychlgcl_Sfty    0.179    0.069    2.577    0.010    1.000    1.000

The adjusted model demonstrates an improved fit, with CFI = 0.854 and TLI = 0.826, indicating acceptable model fit, though still below the preferred threshold of 0.90. The RMSEA (0.096) and SRMR (0.106) suggest moderate model fit. Factor loadings remain strong and statistically significant, supporting the retained indicators.

To further refine the CFA model, we will remove PSSd from the Psychological Safety construct, as prior modification indices suggested its weak contribution. The new model will be tested to evaluate if this adjustment improves the model fit.

# Load necessary packages
library(lavaan)
library(GPArotation)

# Define the CFA model (without PSSd)
cfa_model <- '
  Work_Engagement =~ UWES9a + UWES9b + UWES9c + UWES9d + UWES9e + UWES9h + UWES9i
  Promotive_Voice =~ PROMOTIVEa + PROMOTIVEb + PROMOTIVEc + PROMOTIVEd
  Prohibitive_Voice =~ PROHIBITIVa + PROHIBITIVb + PROHIBITIVc
  Psychological_Safety =~ PSSa_reversed + PSSb + PSSe_reversed
'

# Fit the CFA model
fit <- cfa(cfa_model, data = factor_data_selected, estimator = "ML")

# Print summary with standardized estimates
summary(fit, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-19 ended normally after 59 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        40
## 
##   Number of observations                            79
## 
## Model Test User Model:
##                                                       
##   Test statistic                               193.076
##   Degrees of freedom                               113
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                               754.601
##   Degrees of freedom                               136
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.871
##   Tucker-Lewis Index (TLI)                       0.844
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -1117.570
##   Loglikelihood unrestricted model (H1)      -1021.032
##                                                       
##   Akaike (AIC)                                2315.140
##   Bayesian (BIC)                              2409.918
##   Sample-size adjusted Bayesian (SABIC)       2283.796
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.095
##   90 Percent confidence interval - lower         0.071
##   90 Percent confidence interval - upper         0.117
##   P-value H_0: RMSEA <= 0.050                    0.002
##   P-value H_0: RMSEA >= 0.080                    0.858
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.100
## 
## 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
##   Work_Engagement =~                                                           
##     UWES9a                   1.000                               0.474    0.648
##     UWES9b                   0.790    0.166    4.759    0.000    0.374    0.621
##     UWES9c                   0.926    0.162    5.697    0.000    0.439    0.777
##     UWES9d                   1.215    0.204    5.944    0.000    0.576    0.827
##     UWES9e                   0.959    0.190    5.054    0.000    0.455    0.667
##     UWES9h                   0.775    0.167    4.631    0.000    0.368    0.601
##     UWES9i                   0.934    0.186    5.012    0.000    0.443    0.660
##   Promotive_Voice =~                                                           
##     PROMOTIVEa               1.000                               0.515    0.853
##     PROMOTIVEb               1.095    0.133    8.253    0.000    0.564    0.814
##     PROMOTIVEc               1.012    0.123    8.200    0.000    0.521    0.810
##     PROMOTIVEd               0.784    0.120    6.522    0.000    0.403    0.681
##   Prohibitive_Voice =~                                                         
##     PROHIBITIVa              1.000                               0.644    0.771
##     PROHIBITIVb              1.145    0.133    8.626    0.000    0.738    0.956
##     PROHIBITIVc              0.917    0.121    7.555    0.000    0.590    0.793
##   Psychological_Safety =~                                                      
##     PSSa_reversed            1.000                               0.422    0.655
##     PSSb                     0.713    0.278    2.564    0.010    0.301    0.374
##     PSSe_reversed            1.385    0.382    3.625    0.000    0.584    0.690
## 
## Covariances:
##                        Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Work_Engagement ~~                                                        
##     Promotive_Voic        0.031    0.032    0.981    0.327    0.128    0.128
##     Prohibitive_Vc        0.049    0.039    1.241    0.215    0.160    0.160
##     Psychlgcl_Sfty        0.039    0.031    1.261    0.207    0.197    0.197
##   Promotive_Voice ~~                                                        
##     Prohibitive_Vc        0.187    0.051    3.652    0.000    0.565    0.565
##     Psychlgcl_Sfty        0.086    0.037    2.346    0.019    0.397    0.397
##   Prohibitive_Voice ~~                                                      
##     Psychlgcl_Sfty        0.159    0.052    3.054    0.002    0.587    0.587
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .UWES9a            0.311    0.055    5.646    0.000    0.311    0.580
##    .UWES9b            0.224    0.039    5.732    0.000    0.224    0.615
##    .UWES9c            0.126    0.026    4.914    0.000    0.126    0.396
##    .UWES9d            0.154    0.035    4.355    0.000    0.154    0.317
##    .UWES9e            0.258    0.046    5.575    0.000    0.258    0.555
##    .UWES9h            0.239    0.041    5.787    0.000    0.239    0.639
##    .UWES9i            0.254    0.045    5.601    0.000    0.254    0.564
##    .PROMOTIVEa        0.099    0.025    4.029    0.000    0.099    0.273
##    .PROMOTIVEb        0.162    0.035    4.624    0.000    0.162    0.338
##    .PROMOTIVEc        0.143    0.031    4.675    0.000    0.143    0.345
##    .PROMOTIVEd        0.188    0.034    5.576    0.000    0.188    0.537
##    .PROHIBITIVa       0.283    0.053    5.312    0.000    0.283    0.405
##    .PROHIBITIVb       0.052    0.036    1.450    0.147    0.052    0.087
##    .PROHIBITIVc       0.205    0.040    5.103    0.000    0.205    0.371
##    .PSSa_reversed     0.236    0.058    4.051    0.000    0.236    0.571
##    .PSSb              0.556    0.095    5.840    0.000    0.556    0.860
##    .PSSe_reversed     0.375    0.104    3.623    0.000    0.375    0.524
##     Work_Engagemnt    0.225    0.074    3.058    0.002    1.000    1.000
##     Promotive_Voic    0.265    0.059    4.498    0.000    1.000    1.000
##     Prohibitive_Vc    0.415    0.105    3.937    0.000    1.000    1.000
##     Psychlgcl_Sfty    0.178    0.070    2.534    0.011    1.000    1.000
# Extract modification indices
mod_indices <- modificationIndices(fit)

# Display the top modification suggestions
mod_indices[order(mod_indices$mi, decreasing = TRUE), ][1:10, ]
##                      lhs op           rhs     mi    epc sepc.lv sepc.all
## 96                UWES9a ~~        UWES9b 15.090  0.130   0.130    0.492
## 109               UWES9a ~~ PSSa_reversed 14.933  0.141   0.141    0.518
## 140               UWES9c ~~ PSSe_reversed 12.059  0.111   0.111    0.510
## 53       Work_Engagement =~          PSSb  8.337  0.590   0.280    0.348
## 58       Promotive_Voice =~        UWES9d  6.444 -0.280  -0.144   -0.207
## 118               UWES9b ~~    PROMOTIVEb  6.382  0.064   0.064    0.335
## 60       Promotive_Voice =~        UWES9h  6.264  0.299   0.154    0.252
## 95  Psychological_Safety =~   PROHIBITIVc  6.185 -0.569  -0.240   -0.322
## 113               UWES9b ~~        UWES9d  5.655 -0.067  -0.067   -0.360
## 205           PROMOTIVEc ~~   PROHIBITIVa  5.605  0.064   0.064    0.317
##     sepc.nox
## 96     0.492
## 109    0.518
## 140    0.510
## 53     0.348
## 58    -0.207
## 118    0.335
## 60     0.252
## 95    -0.322
## 113   -0.360
## 205    0.317

After removing PSSd, the model fit improved slightly, with CFI = 0.871 and TLI = 0.844, approaching the acceptable threshold. RMSEA (0.095) and SRMR (0.100) suggest moderate fit. Standardized factor loadings remain strong, indicating that retained indicators adequately measure their constructs. To further refine the model, we will remove PSSb from Psychological Safety. We will then reassess the model to determine if this adjustment improves fit indices and construct validity.

# Load necessary libraries
library(lavaan)
library(psych)
library(GPArotation)

# Define CFA model without PSSb
cfa_model <- '
  Work_Engagement =~ UWES9a + UWES9b + UWES9c + UWES9d + UWES9e + UWES9h + UWES9i
  Promotive_Voice =~ PROMOTIVEa + PROMOTIVEb + PROMOTIVEc + PROMOTIVEd
  Prohibitive_Voice =~ PROHIBITIVa + PROHIBITIVb + PROHIBITIVc
  Psychological_Safety =~ PSSa_reversed + PSSe_reversed
'

# Fit CFA model
fit <- cfa(cfa_model, data = factor_data_selected, std.lv = TRUE)

# Print summary with standardized estimates
summary(fit, fit.measures = TRUE, standardized = TRUE, rsquare = TRUE)
## lavaan 0.6-19 ended normally after 43 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        38
## 
##   Number of observations                            79
## 
## Model Test User Model:
##                                                       
##   Test statistic                               166.462
##   Degrees of freedom                                98
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                               720.750
##   Degrees of freedom                               120
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.886
##   Tucker-Lewis Index (TLI)                       0.860
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -1026.349
##   Loglikelihood unrestricted model (H1)       -943.118
##                                                       
##   Akaike (AIC)                                2128.699
##   Bayesian (BIC)                              2218.738
##   Sample-size adjusted Bayesian (SABIC)       2098.922
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.094
##   90 Percent confidence interval - lower         0.069
##   90 Percent confidence interval - upper         0.118
##   P-value H_0: RMSEA <= 0.050                    0.004
##   P-value H_0: RMSEA >= 0.080                    0.831
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.088
## 
## 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
##   Work_Engagement =~                                                           
##     UWES9a                   0.472    0.078    6.079    0.000    0.472    0.645
##     UWES9b                   0.373    0.065    5.760    0.000    0.373    0.618
##     UWES9c                   0.438    0.056    7.796    0.000    0.438    0.776
##     UWES9d                   0.577    0.067    8.586    0.000    0.577    0.829
##     UWES9e                   0.455    0.072    6.360    0.000    0.455    0.668
##     UWES9h                   0.369    0.066    5.602    0.000    0.369    0.604
##     UWES9i                   0.444    0.071    6.287    0.000    0.444    0.662
##   Promotive_Voice =~                                                           
##     PROMOTIVEa               0.515    0.057    9.017    0.000    0.515    0.854
##     PROMOTIVEb               0.564    0.067    8.401    0.000    0.564    0.814
##     PROMOTIVEc               0.520    0.063    8.320    0.000    0.520    0.809
##     PROMOTIVEd               0.403    0.062    6.544    0.000    0.403    0.680
##   Prohibitive_Voice =~                                                         
##     PROHIBITIVa              0.644    0.082    7.877    0.000    0.644    0.772
##     PROHIBITIVb              0.737    0.068   10.772    0.000    0.737    0.954
##     PROHIBITIVc              0.591    0.072    8.200    0.000    0.591    0.795
##   Psychological_Safety =~                                                      
##     PSSa_reversed            0.400    0.087    4.619    0.000    0.400    0.622
##     PSSe_reversed            0.637    0.122    5.235    0.000    0.637    0.752
## 
## Covariances:
##                        Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Work_Engagement ~~                                                        
##     Promotive_Voic        0.127    0.126    1.005    0.315    0.127    0.127
##     Prohibitive_Vc        0.160    0.122    1.319    0.187    0.160    0.160
##     Psychlgcl_Sfty        0.112    0.147    0.761    0.447    0.112    0.112
##   Promotive_Voice ~~                                                        
##     Prohibitive_Vc        0.565    0.089    6.333    0.000    0.565    0.565
##     Psychlgcl_Sfty        0.420    0.132    3.192    0.001    0.420    0.420
##   Prohibitive_Voice ~~                                                      
##     Psychlgcl_Sfty        0.559    0.117    4.798    0.000    0.559    0.559
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .UWES9a            0.313    0.055    5.657    0.000    0.313    0.584
##    .UWES9b            0.225    0.039    5.741    0.000    0.225    0.618
##    .UWES9c            0.127    0.026    4.931    0.000    0.127    0.399
##    .UWES9d            0.152    0.035    4.325    0.000    0.152    0.313
##    .UWES9e            0.258    0.046    5.573    0.000    0.258    0.554
##    .UWES9h            0.237    0.041    5.779    0.000    0.237    0.635
##    .UWES9i            0.253    0.045    5.596    0.000    0.253    0.562
##    .PROMOTIVEa        0.099    0.025    4.015    0.000    0.099    0.271
##    .PROMOTIVEb        0.162    0.035    4.626    0.000    0.162    0.338
##    .PROMOTIVEc        0.143    0.031    4.692    0.000    0.143    0.346
##    .PROMOTIVEd        0.189    0.034    5.581    0.000    0.189    0.538
##    .PROHIBITIVa       0.282    0.053    5.293    0.000    0.282    0.404
##    .PROHIBITIVb       0.053    0.036    1.476    0.140    0.053    0.089
##    .PROHIBITIVc       0.204    0.040    5.071    0.000    0.204    0.369
##    .PSSa_reversed     0.254    0.061    4.162    0.000    0.254    0.614
##    .PSSe_reversed     0.311    0.126    2.471    0.013    0.311    0.434
##     Work_Engagemnt    1.000                               1.000    1.000
##     Promotive_Voic    1.000                               1.000    1.000
##     Prohibitive_Vc    1.000                               1.000    1.000
##     Psychlgcl_Sfty    1.000                               1.000    1.000
## 
## R-Square:
##                    Estimate
##     UWES9a            0.416
##     UWES9b            0.382
##     UWES9c            0.601
##     UWES9d            0.687
##     UWES9e            0.446
##     UWES9h            0.365
##     UWES9i            0.438
##     PROMOTIVEa        0.729
##     PROMOTIVEb        0.662
##     PROMOTIVEc        0.654
##     PROMOTIVEd        0.462
##     PROHIBITIVa       0.596
##     PROHIBITIVb       0.911
##     PROHIBITIVc       0.631
##     PSSa_reversed     0.386
##     PSSe_reversed     0.566
# Extract and display modification indices
mod_indices <- modificationIndices(fit)
mod_indices_sorted <- mod_indices[order(mod_indices$mi, decreasing = TRUE), ]
print(mod_indices_sorted[1:10, ]) # Show top 10 modification indices
##                      lhs op           rhs     mi    epc sepc.lv sepc.all
## 104               UWES9a ~~ PSSa_reversed 16.751  0.151   0.151    0.535
## 91                UWES9a ~~        UWES9b 15.317  0.131   0.131    0.494
## 132               UWES9c ~~ PSSe_reversed 13.693  0.118   0.118    0.592
## 55       Promotive_Voice =~        UWES9d  6.526 -0.144  -0.144   -0.207
## 112               UWES9b ~~    PROMOTIVEb  6.408  0.064   0.064    0.336
## 90  Psychological_Safety =~   PROHIBITIVc  6.286 -0.230  -0.230   -0.309
## 57       Promotive_Voice =~        UWES9h  6.247  0.153   0.153    0.251
## 131               UWES9c ~~ PSSa_reversed  5.762 -0.060  -0.060   -0.332
## 191           PROMOTIVEc ~~   PROHIBITIVa  5.694  0.064   0.064    0.320
## 107               UWES9b ~~        UWES9d  5.570 -0.066  -0.066   -0.358
##     sepc.nox
## 104    0.535
## 91     0.494
## 132    0.592
## 55    -0.207
## 112    0.336
## 90    -0.309
## 57     0.251
## 131   -0.332
## 191    0.320
## 107   -0.358

After excluding PSSb, the model fit shows improvement, with CFI = 0.886 and TLI = 0.860, indicating a better but still moderate fit. RMSEA = 0.094 and SRMR = 0.088 suggest an acceptable level of error. To further refine the model, PSSa_reversed is removed from Psychological Safety due to low loadings and poor fit in previous iterations. We will reassess the model fit and modification indices to determine if further changes are needed.

# Load necessary libraries
library(lavaan)
library(psych)
library(GPArotation)

# Define CFA model (Removing PSSa_reversed)
cfa_model <- '
  Work_Engagement =~ UWES9a + UWES9b + UWES9c + UWES9d + UWES9e + UWES9h + UWES9i
  Promotive_Voice =~ PROMOTIVEa + PROMOTIVEb + PROMOTIVEc + PROMOTIVEd
  Prohibitive_Voice =~ PROHIBITIVa + PROHIBITIVb + PROHIBITIVc
  Psychological_Safety =~ PSSe_reversed
'

# Fit CFA model
fit <- cfa(cfa_model, data = factor_data_selected, std.lv = TRUE)

# Print summary with standardized estimates
summary(fit, fit.measures = TRUE, standardized = TRUE, rsquare = TRUE)
## lavaan 0.6-19 ended normally after 34 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        35
## 
##   Number of observations                            79
## 
## Model Test User Model:
##                                                       
##   Test statistic                               140.135
##   Degrees of freedom                                85
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                               672.331
##   Degrees of freedom                               105
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.903
##   Tucker-Lewis Index (TLI)                       0.880
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)               -960.131
##   Loglikelihood unrestricted model (H1)       -890.063
##                                                       
##   Akaike (AIC)                                1990.261
##   Bayesian (BIC)                              2073.192
##   Sample-size adjusted Bayesian (SABIC)       1962.835
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.091
##   90 Percent confidence interval - lower         0.063
##   90 Percent confidence interval - upper         0.117
##   P-value H_0: RMSEA <= 0.050                    0.011
##   P-value H_0: RMSEA >= 0.080                    0.753
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.088
## 
## 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
##   Work_Engagement =~                                                           
##     UWES9a                   0.472    0.078    6.073    0.000    0.472    0.644
##     UWES9b                   0.372    0.065    5.755    0.000    0.372    0.617
##     UWES9c                   0.438    0.056    7.791    0.000    0.438    0.775
##     UWES9d                   0.578    0.067    8.590    0.000    0.578    0.829
##     UWES9e                   0.455    0.072    6.362    0.000    0.455    0.668
##     UWES9h                   0.370    0.066    5.608    0.000    0.370    0.605
##     UWES9i                   0.444    0.071    6.290    0.000    0.444    0.662
##   Promotive_Voice =~                                                           
##     PROMOTIVEa               0.516    0.057    9.046    0.000    0.516    0.855
##     PROMOTIVEb               0.564    0.067    8.400    0.000    0.564    0.814
##     PROMOTIVEc               0.520    0.063    8.312    0.000    0.520    0.808
##     PROMOTIVEd               0.402    0.062    6.531    0.000    0.402    0.679
##   Prohibitive_Voice =~                                                         
##     PROHIBITIVa              0.648    0.082    7.928    0.000    0.648    0.776
##     PROHIBITIVb              0.732    0.069   10.630    0.000    0.732    0.948
##     PROHIBITIVc              0.595    0.072    8.255    0.000    0.595    0.799
##   Psychological_Safety =~                                                      
##     PSSe_reversed            0.846    0.067   12.570    0.000    0.846    1.000
## 
## Covariances:
##                        Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Work_Engagement ~~                                                        
##     Promotive_Voic        0.126    0.126    1.003    0.316    0.126    0.126
##     Prohibitive_Vc        0.163    0.122    1.336    0.182    0.163    0.163
##     Psychlgcl_Sfty        0.075    0.119    0.628    0.530    0.075    0.075
##   Promotive_Voice ~~                                                        
##     Prohibitive_Vc        0.569    0.089    6.372    0.000    0.569    0.569
##     Psychlgcl_Sfty        0.347    0.106    3.266    0.001    0.347    0.347
##   Prohibitive_Voice ~~                                                      
##     Psychlgcl_Sfty        0.408    0.099    4.141    0.000    0.408    0.408
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .UWES9a            0.314    0.055    5.658    0.000    0.314    0.585
##    .UWES9b            0.225    0.039    5.742    0.000    0.225    0.619
##    .UWES9c            0.127    0.026    4.934    0.000    0.127    0.399
##    .UWES9d            0.152    0.035    4.322    0.000    0.152    0.313
##    .UWES9e            0.257    0.046    5.572    0.000    0.257    0.554
##    .UWES9h            0.237    0.041    5.777    0.000    0.237    0.634
##    .UWES9i            0.253    0.045    5.595    0.000    0.253    0.562
##    .PROMOTIVEa        0.098    0.024    3.996    0.000    0.098    0.268
##    .PROMOTIVEb        0.162    0.035    4.637    0.000    0.162    0.338
##    .PROMOTIVEc        0.144    0.031    4.708    0.000    0.144    0.347
##    .PROMOTIVEd        0.189    0.034    5.589    0.000    0.189    0.539
##    .PROHIBITIVa       0.277    0.053    5.220    0.000    0.277    0.397
##    .PROHIBITIVb       0.061    0.037    1.654    0.098    0.061    0.102
##    .PROHIBITIVc       0.200    0.040    4.981    0.000    0.200    0.361
##    .PSSe_reversed     0.000                               0.000    0.000
##     Work_Engagemnt    1.000                               1.000    1.000
##     Promotive_Voic    1.000                               1.000    1.000
##     Prohibitive_Vc    1.000                               1.000    1.000
##     Psychlgcl_Sfty    1.000                               1.000    1.000
## 
## R-Square:
##                    Estimate
##     UWES9a            0.415
##     UWES9b            0.381
##     UWES9c            0.601
##     UWES9d            0.687
##     UWES9e            0.446
##     UWES9h            0.366
##     UWES9i            0.438
##     PROMOTIVEa        0.732
##     PROMOTIVEb        0.662
##     PROMOTIVEc        0.653
##     PROMOTIVEd        0.461
##     PROHIBITIVa       0.603
##     PROHIBITIVb       0.898
##     PROHIBITIVc       0.639
##     PSSe_reversed     1.000
# Extract and display modification indices
mod_indices <- modificationIndices(fit)
mod_indices_sorted <- mod_indices[order(mod_indices$mi, decreasing = TRUE), ]
print(mod_indices_sorted[1:10, ]) # Show top 10 modification indices
##                      lhs op           rhs     mi    epc sepc.lv sepc.all
## 86                UWES9a ~~        UWES9b 15.351  0.132   0.132    0.495
## 124               UWES9c ~~ PSSe_reversed  8.441  0.101   0.101       NA
## 52       Promotive_Voice =~        UWES9d  6.517 -0.144  -0.144   -0.207
## 106               UWES9b ~~    PROMOTIVEb  6.460  0.064   0.064    0.337
## 54       Promotive_Voice =~        UWES9h  6.189  0.152   0.152    0.249
## 74  Psychological_Safety =~        UWES9c  5.880  0.110   0.110    0.195
## 177           PROMOTIVEc ~~   PROHIBITIVa  5.789  0.065   0.065    0.324
## 101               UWES9b ~~        UWES9d  5.554 -0.066  -0.066   -0.358
## 154               UWES9h ~~ PSSe_reversed  4.915 -0.097  -0.097       NA
## 85  Psychological_Safety =~   PROHIBITIVc  4.898 -0.137  -0.137   -0.184
##     sepc.nox
## 86     0.495
## 124       NA
## 52    -0.207
## 106    0.337
## 54     0.249
## 74     0.195
## 177    0.324
## 101   -0.358
## 154       NA
## 85    -0.184

After removing PSSa_reversed, model fit improves, with CFI = 0.903 and TLI = 0.880, surpassing the 0.90 threshold for good fit. RMSEA = 0.091 and SRMR = 0.088 suggest an acceptable fit. Factor loadings remain stable, confirming the retained indicators measure their respective constructs well. Modification indices still suggest some residual correlations, but no severe misspecifications are evident. This refined model is now well-structured for further analysis.

To visually represent the final CFA model, we will generate a path diagram displaying standardized factor loadings.

library(semPlot)
semPaths(fit, rotation = 2, what = "std", layout = "tree", edge.label.cex = 1, sort = TRUE)
## Warning in qgraph::qgraph(Edgelist, labels = nLab, bidirectional = Bidir, : The
## following arguments are not documented and likely not arguments of qgraph and
## thus ignored: sort

To assess the composite reliability (CR) of each latent variable, we will compute CR values based on standardized loadings and residual variances. CR indicates the internal consistency of constructs, with values above 0.7 generally considered acceptable.

# Extract standardized loadings
loadings <- inspect(fit, "std")$lambda  

# Extract residual variances (theta)
theta <- inspect(fit, "std")$theta  

# Function to compute CR
compute_CR <- function(loadings, theta) {
  valid_indices <- which(!is.na(loadings))  # Remove NA values
  sum_loadings_sq <- sum(loadings[valid_indices])^2
  sum_error_variance <- sum(theta[valid_indices])
  CR <- sum_loadings_sq / (sum_loadings_sq + sum_error_variance)
  return(CR)
}

# Compute CR for each latent variable
CR_values <- sapply(1:ncol(loadings), function(i) compute_CR(loadings[, i], theta[, i]))

# Print results
CR_values
## [1] 0.9752383 0.9414866 0.9410310 0.7617532

The CR values for Work Engagement (0.975), Promotive Voice (0.941), and Prohibitive Voice (0.941) indicate excellent internal consistency and Psychological Safety (0.762) just above the acceptable threshold.

To evaluate convergent validity, we will calculate the Average Variance Extracted (AVE) for each latent variable. AVE measures the proportion of variance explained by a construct’s indicators relative to the total variance, with a recommended threshold of 0.5 or higher for adequate convergent validity.

# Function to calculate AVE 
calculate_AVE <- function(loadings) { 
  squared_loadings <- loadings^2 
  AVE <- colMeans(squared_loadings) 
  return(AVE) 
} 
 
# Extract standardized factor loadings 
std_loadings <- inspect(fit, "std")$lambda 
 
# Compute AVE for each latent variable 
AVE_values <- calculate_AVE(std_loadings) 
 
# Print AVE results 
print(AVE_values) 
##      Work_Engagement      Promotive_Voice    Prohibitive_Voice 
##           0.22227576           0.16713769           0.14267508 
## Psychological_Safety 
##           0.06666667

The AVE values for Work Engagement (0.222), Promotive Voice (0.167), Prohibitive Voice (0.143), and Psychological Safety (0.067) are all well below the recommended threshold of 0.5, indicating poor convergent validity.