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