Sumber daya manusia merupakan salah satu aset penting dalam keberhasilan organisasi. Kinerja karyawan tidak hanya dipengaruhi oleh kemampuan teknis, tetapi juga oleh faktor psikologis dan perilaku organisasi. Salah satu faktor penting yang banyak dikaji dalam perilaku organisasi adalah organizational commitment atau komitmen organisasi.
Organizational commitment menggambarkan sejauh mana seorang karyawan memiliki keterikatan, loyalitas, dan keinginan untuk tetap menjadi bagian dari organisasi. Komitmen organisasi umumnya dibagi menjadi tiga dimensi utama, yaitu affective commitment, continuance commitment, dan normative commitment. Affective commitment berkaitan dengan keterikatan emosional karyawan terhadap organisasi. Continuance commitment berkaitan dengan pertimbangan biaya atau konsekuensi apabila karyawan meninggalkan organisasi. Sementara itu, normative commitment berkaitan dengan rasa kewajiban moral karyawan untuk tetap berkontribusi kepada organisasi.
Selain komitmen organisasi, Organizational Citizenship Behavior (OCB) juga memiliki peran penting dalam mendukung efektivitas organisasi. OCB merupakan perilaku sukarela karyawan yang dilakukan di luar tuntutan formal pekerjaan, seperti membantu rekan kerja, menjaga hubungan kerja yang baik, menunjukkan kepedulian terhadap organisasi, serta berkontribusi terhadap lingkungan kerja yang positif. Meskipun tidak selalu tercantum dalam deskripsi pekerjaan formal, OCB dapat memberikan dampak positif terhadap kinerja organisasi secara keseluruhan.
Dalam konteks organisasi, karyawan yang memiliki komitmen tinggi cenderung lebih bersedia menunjukkan perilaku positif di luar tugas formalnya. Perilaku tersebut kemudian dapat berkontribusi terhadap peningkatan job performance atau kinerja pekerjaan. Dengan demikian, OCB dapat dipandang sebagai mekanisme yang menjelaskan bagaimana komitmen organisasi dapat memengaruhi kinerja karyawan.
Penelitian ini bertujuan untuk menganalisis pengaruh organizational commitment terhadap job performance melalui organizational citizenship behavior. Organizational commitment dalam penelitian ini direpresentasikan oleh tiga konstruk, yaitu affective commitment, continuance commitment, dan normative commitment. Metode yang digunakan adalah Partial Least Squares Structural Equation Modeling (PLS-SEM) karena metode ini mampu menganalisis hubungan antar konstruk laten secara simultan, baik pada model pengukuran maupun model struktural.
Berdasarkan latar belakang yang telah dijelaskan, tujuan penelitian ini adalah sebagai berikut:
Penelitian ini menggunakan model konseptual yang menempatkan Affective Commitment, Continuance Commitment, dan Normative Commitment sebagai variabel eksogen. Organizational Citizenship Behavior berperan sebagai variabel mediasi, sedangkan Job Performance menjadi variabel endogen utama.
Berdasarkan model konseptual tersebut, hipotesis penelitian yang diajukan adalah sebagai berikut:
H1: Affective Commitment berpengaruh positif terhadap Organizational Citizenship Behavior.
H2: Continuance Commitment berpengaruh positif terhadap Organizational Citizenship Behavior.
H3: Normative Commitment berpengaruh positif terhadap Organizational Citizenship Behavior.
H4: Organizational Citizenship Behavior berpengaruh positif terhadap Job Performance.
H5: Affective Commitment berpengaruh positif terhadap Job Performance.
H6: Continuance Commitment berpengaruh positif terhadap Job Performance.
H7: Normative Commitment berpengaruh positif terhadap Job Performance.
H8: Organizational Citizenship Behavior memediasi pengaruh Affective Commitment terhadap Job Performance.
H9: Organizational Citizenship Behavior memediasi pengaruh Continuance Commitment terhadap Job Performance.
H10: Organizational Citizenship Behavior memediasi pengaruh Normative Commitment terhadap Job Performance.
Penelitian ini menggunakan pendekatan kuantitatif dengan metode Partial Least Squares Structural Equation Modeling (PLS-SEM).
Dataset yang digunakan adalah Data_OC_OCB_JP.csv.
Konstruk yang dianalisis terdiri dari:
| Kode | Konstruk | Peran |
|---|---|---|
| AC | Affective Commitment | Eksogen |
| CC | Continuance Commitment | Eksogen |
| NC | Normative Commitment | Eksogen |
| OCB | Organizational Citizenship Behavior | Mediasi |
| JP | Job Performance | Endogen |
Model struktural yang digunakan:
AC ──→
│
CC ──→ OCB ──→ JP
│
NC ──→
AC ─────────→ JP
CC ─────────→ JP
NC ─────────→ JP
Tahapan analisis:
## [1] 336 36
## [1] "No" "Gender" "Marital status" "Age"
## [5] "Education" "Position" "AC1" "AC2"
## [9] "AC3" "AC4" "AC5" "AC6"
## [13] "CC1" "CC2" "CC3" "CC4"
## [17] "CC5" "CC6" "NC1" "NC2"
## [21] "NC3" "NC4" "NC5" "NC6"
## [25] "OCB1" "OCB2" "OCB3" "OCB4"
## [29] "OCB5" "OCB6" "OCB7" "OCB8"
## [33] "JP1" "JP2" "JP3" "JP4"
## spc_tbl_ [336 × 36] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ No : num [1:336] 1 2 3 4 5 6 7 8 9 10 ...
## $ Gender : chr [1:336] "Male" "Male" "Male" "Female" ...
## $ Marital status: chr [1:336] "Married" "Married" "Married" "Married" ...
## $ Age : chr [1:336] "36-45" "36-45" "36-45" "25-35" ...
## $ Education : chr [1:336] "University" "University" "University" "High School" ...
## $ Position : chr [1:336] "Manager/Leader" "Manager/Leader" "Employee" "Chief/Deputy Chief of Staff" ...
## $ AC1 : num [1:336] 5 4 3 6 3 3 5 5 5 6 ...
## $ AC2 : num [1:336] 5 4 3 6 3 5 5 4 5 6 ...
## $ AC3 : num [1:336] 5 4 3 6 3 5 5 5 6 6 ...
## $ AC4 : num [1:336] 4 3 3 6 3 5 4 5 5 5 ...
## $ AC5 : num [1:336] 5 4 2 5 3 3 4 5 5 5 ...
## $ AC6 : num [1:336] 4 4 2 6 3 7 4 4 4 4 ...
## $ CC1 : num [1:336] 5 4 6 6 3 3 4 4 6 6 ...
## $ CC2 : num [1:336] 5 5 6 6 4 3 4 4 6 5 ...
## $ CC3 : num [1:336] 6 6 6 6 3 3 5 4 6 5 ...
## $ CC4 : num [1:336] 6 6 6 6 4 3 5 4 6 4 ...
## $ CC5 : num [1:336] 6 6 6 6 4 5 5 4 6 5 ...
## $ CC6 : num [1:336] 7 6 6 6 4 3 5 4 6 5 ...
## $ NC1 : num [1:336] 5 6 7 6 3 5 3 4 5 4 ...
## $ NC2 : num [1:336] 5 6 6 6 4 5 3 4 5 4 ...
## $ NC3 : num [1:336] 4 4 5 6 4 5 4 5 5 6 ...
## $ NC4 : num [1:336] 5 6 3 7 4 3 5 5 5 6 ...
## $ NC5 : num [1:336] 6 6 6 7 3 5 4 5 5 4 ...
## $ NC6 : num [1:336] 5 6 6 6 3 6 5 4 5 6 ...
## $ OCB1 : num [1:336] 5 6 6 6 4 4 6 4 6 5 ...
## $ OCB2 : num [1:336] 6 6 6 6 4 5 6 4 6 5 ...
## $ OCB3 : num [1:336] 5 5 6 6 4 5 6 4 5 5 ...
## $ OCB4 : num [1:336] 5 6 6 6 4 5 6 4 5 5 ...
## $ OCB5 : num [1:336] 5 6 1 6 4 3 6 5 5 5 ...
## $ OCB6 : num [1:336] 5 6 1 6 4 5 6 5 5 5 ...
## $ OCB7 : num [1:336] 5 5 6 6 4 6 6 5 6 5 ...
## $ OCB8 : num [1:336] 5 6 2 6 4 5 6 5 4 5 ...
## $ JP1 : num [1:336] 6 5 7 6 5 5 5 5 5 6 ...
## $ JP2 : num [1:336] 5 5 6 6 5 4 5 4 6 5 ...
## $ JP3 : num [1:336] 5 6 6 6 4 3 4 4 6 5 ...
## $ JP4 : num [1:336] 4 6 4 6 4 6 5 5 5 5 ...
## - attr(*, "spec")=
## .. cols(
## .. No = col_double(),
## .. Gender = col_character(),
## .. `Marital status` = col_character(),
## .. Age = col_character(),
## .. Education = col_character(),
## .. Position = col_character(),
## .. AC1 = col_double(),
## .. AC2 = col_double(),
## .. AC3 = col_double(),
## .. AC4 = col_double(),
## .. AC5 = col_double(),
## .. AC6 = col_double(),
## .. CC1 = col_double(),
## .. CC2 = col_double(),
## .. CC3 = col_double(),
## .. CC4 = col_double(),
## .. CC5 = col_double(),
## .. CC6 = col_double(),
## .. NC1 = col_double(),
## .. NC2 = col_double(),
## .. NC3 = col_double(),
## .. NC4 = col_double(),
## .. NC5 = col_double(),
## .. NC6 = col_double(),
## .. OCB1 = col_double(),
## .. OCB2 = col_double(),
## .. OCB3 = col_double(),
## .. OCB4 = col_double(),
## .. OCB5 = col_double(),
## .. OCB6 = col_double(),
## .. OCB7 = col_double(),
## .. OCB8 = col_double(),
## .. JP1 = col_double(),
## .. JP2 = col_double(),
## .. JP3 = col_double(),
## .. JP4 = col_double()
## .. )
## - attr(*, "problems")=<pointer: 0x5a005c7a9390>
## # A tibble: 6 × 36
## No Gender `Marital status` Age Education Position AC1 AC2 AC3 AC4
## <dbl> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 1 Male Married 36-45 Universi… Manager… 5 5 5 4
## 2 2 Male Married 36-45 Universi… Manager… 4 4 4 3
## 3 3 Male Married 36-45 Universi… Employee 3 3 3 3
## 4 4 Female Married 25-35 High Sch… Chief/D… 6 6 6 6
## 5 5 Female Married 25-35 High Sch… Manager… 3 3 3 3
## 6 6 Male Married >55 Master Worker 3 5 5 5
## # ℹ 26 more variables: AC5 <dbl>, AC6 <dbl>, CC1 <dbl>, CC2 <dbl>, CC3 <dbl>,
## # CC4 <dbl>, CC5 <dbl>, CC6 <dbl>, NC1 <dbl>, NC2 <dbl>, NC3 <dbl>,
## # NC4 <dbl>, NC5 <dbl>, NC6 <dbl>, OCB1 <dbl>, OCB2 <dbl>, OCB3 <dbl>,
## # OCB4 <dbl>, OCB5 <dbl>, OCB6 <dbl>, OCB7 <dbl>, OCB8 <dbl>, JP1 <dbl>,
## # JP2 <dbl>, JP3 <dbl>, JP4 <dbl>
## No Gender Marital status Age
## Min. : 1.00 Length :336 Length :336 Length :336
## 1st Qu.: 84.75 N.unique : 2 N.unique : 2 N.unique : 5
## Median :168.50 N.blank : 0 N.blank : 0 N.blank : 0
## Mean :168.50 Min.nchar: 4 Min.nchar: 6 Min.nchar: 3
## 3rd Qu.:252.25 Max.nchar: 6 Max.nchar: 7 Max.nchar: 5
## Max. :336.00
## Education Position AC1 AC2
## Length :336 Length :336 Min. :1.000 Min. :1.000
## N.unique : 5 N.unique : 5 1st Qu.:4.000 1st Qu.:4.000
## N.blank : 0 N.blank : 0 Median :5.000 Median :5.000
## Min.nchar: 6 Min.nchar: 6 Mean :4.973 Mean :5.009
## Max.nchar: 11 Max.nchar: 27 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000
## AC3 AC4 AC5 AC6 CC1
## Min. :1.000 Min. :1.00 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:4.000 1st Qu.:4.00 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:4.000
## Median :5.000 Median :5.00 Median :5.000 Median :5.000 Median :5.000
## Mean :4.958 Mean :4.81 Mean :4.905 Mean :5.033 Mean :5.006
## 3rd Qu.:6.000 3rd Qu.:6.00 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.00 Max. :7.000 Max. :7.000 Max. :7.000
## CC2 CC3 CC4 CC5 CC6
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.00 Min. :1.000
## 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:4.00 1st Qu.:5.000
## Median :5.000 Median :5.000 Median :5.000 Median :5.00 Median :5.000
## Mean :5.143 Mean :5.089 Mean :5.176 Mean :5.14 Mean :5.283
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.00 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.00 Max. :7.000
## NC1 NC2 NC3 NC4
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:4.000
## Median :5.000 Median :5.000 Median :5.000 Median :5.000
## Mean :4.982 Mean :4.839 Mean :5.122 Mean :4.795
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
## NC5 NC6 OCB1 OCB2 OCB3
## Min. :2.000 Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.00
## 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:5.000 1st Qu.:4.75
## Median :5.000 Median :5.000 Median :5.000 Median :6.000 Median :5.00
## Mean :4.964 Mean :4.923 Mean :5.143 Mean :5.503 Mean :5.17
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.00
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.00
## OCB4 OCB5 OCB6 OCB7
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:4.000
## Median :5.000 Median :5.000 Median :5.000 Median :5.000
## Mean :5.161 Mean :4.753 Mean :4.705 Mean :4.914
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
## OCB8 JP1 JP2 JP3
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:4.000 1st Qu.:5.000 1st Qu.:4.000 1st Qu.:4.000
## Median :5.000 Median :5.000 Median :5.000 Median :5.000
## Mean :4.943 Mean :5.214 Mean :5.012 Mean :4.833
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
## JP4
## Min. :1.000
## 1st Qu.:4.000
## Median :5.000
## Mean :4.741
## 3rd Qu.:6.000
## Max. :7.000
column_structure <- data.frame(
No = seq_along(names(data)),
Variable = names(data),
Data_Type = sapply(data, function(x) class(x)[1])
)
kable(column_structure, caption = "Struktur Kolom Dataset") %>%
kable_styling(full_width = FALSE)| No | Variable | Data_Type | |
|---|---|---|---|
| No | 1 | No | numeric |
| Gender | 2 | Gender | character |
| Marital status | 3 | Marital status | character |
| Age | 4 | Age | character |
| Education | 5 | Education | character |
| Position | 6 | Position | character |
| AC1 | 7 | AC1 | numeric |
| AC2 | 8 | AC2 | numeric |
| AC3 | 9 | AC3 | numeric |
| AC4 | 10 | AC4 | numeric |
| AC5 | 11 | AC5 | numeric |
| AC6 | 12 | AC6 | numeric |
| CC1 | 13 | CC1 | numeric |
| CC2 | 14 | CC2 | numeric |
| CC3 | 15 | CC3 | numeric |
| CC4 | 16 | CC4 | numeric |
| CC5 | 17 | CC5 | numeric |
| CC6 | 18 | CC6 | numeric |
| NC1 | 19 | NC1 | numeric |
| NC2 | 20 | NC2 | numeric |
| NC3 | 21 | NC3 | numeric |
| NC4 | 22 | NC4 | numeric |
| NC5 | 23 | NC5 | numeric |
| NC6 | 24 | NC6 | numeric |
| OCB1 | 25 | OCB1 | numeric |
| OCB2 | 26 | OCB2 | numeric |
| OCB3 | 27 | OCB3 | numeric |
| OCB4 | 28 | OCB4 | numeric |
| OCB5 | 29 | OCB5 | numeric |
| OCB6 | 30 | OCB6 | numeric |
| OCB7 | 31 | OCB7 | numeric |
| OCB8 | 32 | OCB8 | numeric |
| JP1 | 33 | JP1 | numeric |
| JP2 | 34 | JP2 | numeric |
| JP3 | 35 | JP3 | numeric |
| JP4 | 36 | JP4 | numeric |
demographic_vars <- c(
"Gender",
"Marital_Status",
"Age",
"Education",
"Position"
)
ac_items <- paste0("AC", 1:6)
cc_items <- paste0("CC", 1:6)
nc_items <- paste0("NC", 1:6)
ocb_items <- paste0("OCB", 1:8)
jp_items <- paste0("JP", 1:4)
construct_items <- c(
ac_items,
cc_items,
nc_items,
ocb_items,
jp_items
)
variable_groups <- data.frame(
Construct = c(
rep("Affective Commitment", length(ac_items)),
rep("Continuance Commitment", length(cc_items)),
rep("Normative Commitment", length(nc_items)),
rep("Organizational Citizenship Behavior", length(ocb_items)),
rep("Job Performance", length(jp_items))
),
Code = c(
rep("AC", length(ac_items)),
rep("CC", length(cc_items)),
rep("NC", length(nc_items)),
rep("OCB", length(ocb_items)),
rep("JP", length(jp_items))
),
Item = construct_items
)
kable(variable_groups, caption = "Pengelompokan Item Konstruk") %>%
kable_styling(full_width = FALSE)| Construct | Code | Item |
|---|---|---|
| Affective Commitment | AC | AC1 |
| Affective Commitment | AC | AC2 |
| Affective Commitment | AC | AC3 |
| Affective Commitment | AC | AC4 |
| Affective Commitment | AC | AC5 |
| Affective Commitment | AC | AC6 |
| Continuance Commitment | CC | CC1 |
| Continuance Commitment | CC | CC2 |
| Continuance Commitment | CC | CC3 |
| Continuance Commitment | CC | CC4 |
| Continuance Commitment | CC | CC5 |
| Continuance Commitment | CC | CC6 |
| Normative Commitment | NC | NC1 |
| Normative Commitment | NC | NC2 |
| Normative Commitment | NC | NC3 |
| Normative Commitment | NC | NC4 |
| Normative Commitment | NC | NC5 |
| Normative Commitment | NC | NC6 |
| Organizational Citizenship Behavior | OCB | OCB1 |
| Organizational Citizenship Behavior | OCB | OCB2 |
| Organizational Citizenship Behavior | OCB | OCB3 |
| Organizational Citizenship Behavior | OCB | OCB4 |
| Organizational Citizenship Behavior | OCB | OCB5 |
| Organizational Citizenship Behavior | OCB | OCB6 |
| Organizational Citizenship Behavior | OCB | OCB7 |
| Organizational Citizenship Behavior | OCB | OCB8 |
| Job Performance | JP | JP1 |
| Job Performance | JP | JP2 |
| Job Performance | JP | JP3 |
| Job Performance | JP | JP4 |
required_vars <- c(demographic_vars, construct_items)
variable_check <- data.frame(
Variable = required_vars,
Available = required_vars %in% names(data)
)
kable(variable_check, caption = "Pemeriksaan Ketersediaan Variabel") %>%
kable_styling(full_width = FALSE)| Variable | Available |
|---|---|
| Gender | TRUE |
| Marital_Status | FALSE |
| Age | TRUE |
| Education | TRUE |
| Position | TRUE |
| AC1 | TRUE |
| AC2 | TRUE |
| AC3 | TRUE |
| AC4 | TRUE |
| AC5 | TRUE |
| AC6 | TRUE |
| CC1 | TRUE |
| CC2 | TRUE |
| CC3 | TRUE |
| CC4 | TRUE |
| CC5 | TRUE |
| CC6 | TRUE |
| NC1 | TRUE |
| NC2 | TRUE |
| NC3 | TRUE |
| NC4 | TRUE |
| NC5 | TRUE |
| NC6 | TRUE |
| OCB1 | TRUE |
| OCB2 | TRUE |
| OCB3 | TRUE |
| OCB4 | TRUE |
| OCB5 | TRUE |
| OCB6 | TRUE |
| OCB7 | TRUE |
| OCB8 | TRUE |
| JP1 | TRUE |
| JP2 | TRUE |
| JP3 | TRUE |
| JP4 | TRUE |
## # A tibble: 6 × 4
## Gender Age Education Position
## <chr> <chr> <chr> <chr>
## 1 Male 36-45 University Manager/Leader
## 2 Male 36-45 University Manager/Leader
## 3 Male 36-45 University Employee
## 4 Female 25-35 High School Chief/Deputy Chief of Staff
## 5 Female 25-35 High School Manager/Leader
## 6 Male >55 Master Worker
## # A tibble: 6 × 30
## AC1 AC2 AC3 AC4 AC5 AC6 CC1 CC2 CC3 CC4 CC5 CC6 NC1
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 5 5 5 4 5 4 5 5 6 6 6 7 5
## 2 4 4 4 3 4 4 4 5 6 6 6 6 6
## 3 3 3 3 3 2 2 6 6 6 6 6 6 7
## 4 6 6 6 6 5 6 6 6 6 6 6 6 6
## 5 3 3 3 3 3 3 3 4 3 4 4 4 3
## 6 3 5 5 5 3 7 3 3 3 3 5 3 5
## # ℹ 17 more variables: NC2 <dbl>, NC3 <dbl>, NC4 <dbl>, NC5 <dbl>, NC6 <dbl>,
## # OCB1 <dbl>, OCB2 <dbl>, OCB3 <dbl>, OCB4 <dbl>, OCB5 <dbl>, OCB6 <dbl>,
## # OCB7 <dbl>, OCB8 <dbl>, JP1 <dbl>, JP2 <dbl>, JP3 <dbl>, JP4 <dbl>
describe(item_data) %>%
as.data.frame() %>%
select(n, mean, sd, median, min, max, skew, kurtosis) %>%
kable(digits = 3, caption = "Ringkasan Statistik Item Konstruk") %>%
kable_styling(full_width = FALSE)| n | mean | sd | median | min | max | skew | kurtosis | |
|---|---|---|---|---|---|---|---|---|
| AC1 | 336 | 4.973 | 1.252 | 5 | 1 | 7 | -0.460 | -0.164 |
| AC2 | 336 | 5.009 | 1.261 | 5 | 1 | 7 | -0.666 | 0.171 |
| AC3 | 336 | 4.958 | 1.276 | 5 | 1 | 7 | -0.619 | 0.180 |
| AC4 | 336 | 4.810 | 1.384 | 5 | 1 | 7 | -0.452 | -0.322 |
| AC5 | 336 | 4.905 | 1.353 | 5 | 1 | 7 | -0.542 | -0.192 |
| AC6 | 336 | 5.033 | 1.394 | 5 | 1 | 7 | -0.612 | 0.086 |
| CC1 | 336 | 5.006 | 1.401 | 5 | 1 | 7 | -0.646 | -0.038 |
| CC2 | 336 | 5.143 | 1.337 | 5 | 1 | 7 | -0.545 | -0.106 |
| CC3 | 336 | 5.089 | 1.418 | 5 | 1 | 7 | -0.822 | 0.510 |
| CC4 | 336 | 5.176 | 1.282 | 5 | 1 | 7 | -0.820 | 0.625 |
| CC5 | 336 | 5.140 | 1.354 | 5 | 1 | 7 | -0.829 | 0.652 |
| CC6 | 336 | 5.283 | 1.300 | 5 | 1 | 7 | -0.776 | 0.534 |
| NC1 | 336 | 4.982 | 1.269 | 5 | 1 | 7 | -0.490 | 0.093 |
| NC2 | 336 | 4.839 | 1.240 | 5 | 1 | 7 | -0.406 | -0.026 |
| NC3 | 336 | 5.122 | 1.222 | 5 | 1 | 7 | -0.674 | 0.658 |
| NC4 | 336 | 4.795 | 1.419 | 5 | 1 | 7 | -0.504 | -0.245 |
| NC5 | 336 | 4.964 | 1.228 | 5 | 2 | 7 | -0.356 | -0.472 |
| NC6 | 336 | 4.923 | 1.318 | 5 | 1 | 7 | -0.630 | 0.046 |
| OCB1 | 336 | 5.143 | 1.242 | 5 | 1 | 7 | -0.727 | 0.622 |
| OCB2 | 336 | 5.503 | 1.224 | 6 | 1 | 7 | -1.122 | 1.573 |
| OCB3 | 336 | 5.170 | 1.196 | 5 | 1 | 7 | -0.777 | 0.874 |
| OCB4 | 336 | 5.161 | 1.238 | 5 | 1 | 7 | -0.852 | 0.954 |
| OCB5 | 336 | 4.753 | 1.483 | 5 | 1 | 7 | -0.597 | -0.121 |
| OCB6 | 336 | 4.705 | 1.494 | 5 | 1 | 7 | -0.631 | -0.093 |
| OCB7 | 336 | 4.914 | 1.361 | 5 | 1 | 7 | -0.751 | 0.261 |
| OCB8 | 336 | 4.943 | 1.382 | 5 | 1 | 7 | -0.602 | -0.061 |
| JP1 | 336 | 5.214 | 1.227 | 5 | 1 | 7 | -0.856 | 1.088 |
| JP2 | 336 | 5.012 | 1.302 | 5 | 1 | 7 | -0.734 | 0.472 |
| JP3 | 336 | 4.833 | 1.374 | 5 | 1 | 7 | -0.615 | 0.023 |
| JP4 | 336 | 4.741 | 1.402 | 5 | 1 | 7 | -0.650 | 0.075 |
number_of_items <- variable_groups %>%
group_by(Construct, Code) %>%
summarise(Number_of_Items = n(), .groups = "drop")
kable(number_of_items, caption = "Jumlah Item per Konstruk") %>%
kable_styling(full_width = FALSE)| Construct | Code | Number_of_Items |
|---|---|---|
| Affective Commitment | AC | 6 |
| Continuance Commitment | CC | 6 |
| Job Performance | JP | 4 |
| Normative Commitment | NC | 6 |
| Organizational Citizenship Behavior | OCB | 8 |
missing_value <- data.frame(
Variable = names(data),
Missing_Value = colSums(is.na(data))
)
kable(missing_value, caption = "Pemeriksaan Missing Value") %>%
kable_styling(full_width = FALSE)| Variable | Missing_Value | |
|---|---|---|
| No | No | 0 |
| Gender | Gender | 0 |
| Marital status | Marital status | 0 |
| Age | Age | 0 |
| Education | Education | 0 |
| Position | Position | 0 |
| AC1 | AC1 | 0 |
| AC2 | AC2 | 0 |
| AC3 | AC3 | 0 |
| AC4 | AC4 | 0 |
| AC5 | AC5 | 0 |
| AC6 | AC6 | 0 |
| CC1 | CC1 | 0 |
| CC2 | CC2 | 0 |
| CC3 | CC3 | 0 |
| CC4 | CC4 | 0 |
| CC5 | CC5 | 0 |
| CC6 | CC6 | 0 |
| NC1 | NC1 | 0 |
| NC2 | NC2 | 0 |
| NC3 | NC3 | 0 |
| NC4 | NC4 | 0 |
| NC5 | NC5 | 0 |
| NC6 | NC6 | 0 |
| OCB1 | OCB1 | 0 |
| OCB2 | OCB2 | 0 |
| OCB3 | OCB3 | 0 |
| OCB4 | OCB4 | 0 |
| OCB5 | OCB5 | 0 |
| OCB6 | OCB6 | 0 |
| OCB7 | OCB7 | 0 |
| OCB8 | OCB8 | 0 |
| JP1 | JP1 | 0 |
| JP2 | JP2 | 0 |
| JP3 | JP3 | 0 |
| JP4 | JP4 | 0 |
## [1] 0
item_data_type <- data.frame(
Item = construct_items,
Data_Type = sapply(data[construct_items], function(x) class(x)[1])
)
kable(item_data_type, caption = "Tipe Data Item Konstruk") %>%
kable_styling(full_width = FALSE)| Item | Data_Type | |
|---|---|---|
| AC1 | AC1 | numeric |
| AC2 | AC2 | numeric |
| AC3 | AC3 | numeric |
| AC4 | AC4 | numeric |
| AC5 | AC5 | numeric |
| AC6 | AC6 | numeric |
| CC1 | CC1 | numeric |
| CC2 | CC2 | numeric |
| CC3 | CC3 | numeric |
| CC4 | CC4 | numeric |
| CC5 | CC5 | numeric |
| CC6 | CC6 | numeric |
| NC1 | NC1 | numeric |
| NC2 | NC2 | numeric |
| NC3 | NC3 | numeric |
| NC4 | NC4 | numeric |
| NC5 | NC5 | numeric |
| NC6 | NC6 | numeric |
| OCB1 | OCB1 | numeric |
| OCB2 | OCB2 | numeric |
| OCB3 | OCB3 | numeric |
| OCB4 | OCB4 | numeric |
| OCB5 | OCB5 | numeric |
| OCB6 | OCB6 | numeric |
| OCB7 | OCB7 | numeric |
| OCB8 | OCB8 | numeric |
| JP1 | JP1 | numeric |
| JP2 | JP2 | numeric |
| JP3 | JP3 | numeric |
| JP4 | JP4 | numeric |
likert_range <- data.frame(
Item = construct_items,
Min = sapply(data_clean[construct_items], min, na.rm = TRUE),
Max = sapply(data_clean[construct_items], max, na.rm = TRUE)
)
likert_range <- likert_range %>%
mutate(
Valid_Range = Min >= 1 & Max <= 7
)
kable(likert_range, caption = "Pemeriksaan Rentang Skala Likert") %>%
kable_styling(full_width = FALSE)| Item | Min | Max | Valid_Range | |
|---|---|---|---|---|
| AC1 | AC1 | 1 | 7 | TRUE |
| AC2 | AC2 | 1 | 7 | TRUE |
| AC3 | AC3 | 1 | 7 | TRUE |
| AC4 | AC4 | 1 | 7 | TRUE |
| AC5 | AC5 | 1 | 7 | TRUE |
| AC6 | AC6 | 1 | 7 | TRUE |
| CC1 | CC1 | 1 | 7 | TRUE |
| CC2 | CC2 | 1 | 7 | TRUE |
| CC3 | CC3 | 1 | 7 | TRUE |
| CC4 | CC4 | 1 | 7 | TRUE |
| CC5 | CC5 | 1 | 7 | TRUE |
| CC6 | CC6 | 1 | 7 | TRUE |
| NC1 | NC1 | 1 | 7 | TRUE |
| NC2 | NC2 | 1 | 7 | TRUE |
| NC3 | NC3 | 1 | 7 | TRUE |
| NC4 | NC4 | 1 | 7 | TRUE |
| NC5 | NC5 | 2 | 7 | TRUE |
| NC6 | NC6 | 1 | 7 | TRUE |
| OCB1 | OCB1 | 1 | 7 | TRUE |
| OCB2 | OCB2 | 1 | 7 | TRUE |
| OCB3 | OCB3 | 1 | 7 | TRUE |
| OCB4 | OCB4 | 1 | 7 | TRUE |
| OCB5 | OCB5 | 1 | 7 | TRUE |
| OCB6 | OCB6 | 1 | 7 | TRUE |
| OCB7 | OCB7 | 1 | 7 | TRUE |
| OCB8 | OCB8 | 1 | 7 | TRUE |
| JP1 | JP1 | 1 | 7 | TRUE |
| JP2 | JP2 | 1 | 7 | TRUE |
| JP3 | JP3 | 1 | 7 | TRUE |
| JP4 | JP4 | 1 | 7 | TRUE |
missing_after_conversion <- data.frame(
Item = construct_items,
Missing_Value = colSums(is.na(data_clean[construct_items]))
)
kable(missing_after_conversion, caption = "Missing Value Setelah Konversi Numerik") %>%
kable_styling(full_width = FALSE)| Item | Missing_Value | |
|---|---|---|
| AC1 | AC1 | 0 |
| AC2 | AC2 | 0 |
| AC3 | AC3 | 0 |
| AC4 | AC4 | 0 |
| AC5 | AC5 | 0 |
| AC6 | AC6 | 0 |
| CC1 | CC1 | 0 |
| CC2 | CC2 | 0 |
| CC3 | CC3 | 0 |
| CC4 | CC4 | 0 |
| CC5 | CC5 | 0 |
| CC6 | CC6 | 0 |
| NC1 | NC1 | 0 |
| NC2 | NC2 | 0 |
| NC3 | NC3 | 0 |
| NC4 | NC4 | 0 |
| NC5 | NC5 | 0 |
| NC6 | NC6 | 0 |
| OCB1 | OCB1 | 0 |
| OCB2 | OCB2 | 0 |
| OCB3 | OCB3 | 0 |
| OCB4 | OCB4 | 0 |
| OCB5 | OCB5 | 0 |
| OCB6 | OCB6 | 0 |
| OCB7 | OCB7 | 0 |
| OCB8 | OCB8 | 0 |
| JP1 | JP1 | 0 |
| JP2 | JP2 | 0 |
| JP3 | JP3 | 0 |
| JP4 | JP4 | 0 |
## # A tibble: 6 × 30
## AC1 AC2 AC3 AC4 AC5 AC6 CC1 CC2 CC3 CC4 CC5 CC6 NC1
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 5 5 5 4 5 4 5 5 6 6 6 7 5
## 2 4 4 4 3 4 4 4 5 6 6 6 6 6
## 3 3 3 3 3 2 2 6 6 6 6 6 6 7
## 4 6 6 6 6 5 6 6 6 6 6 6 6 6
## 5 3 3 3 3 3 3 3 4 3 4 4 4 3
## 6 3 5 5 5 3 7 3 3 3 3 5 3 5
## # ℹ 17 more variables: NC2 <dbl>, NC3 <dbl>, NC4 <dbl>, NC5 <dbl>, NC6 <dbl>,
## # OCB1 <dbl>, OCB2 <dbl>, OCB3 <dbl>, OCB4 <dbl>, OCB5 <dbl>, OCB6 <dbl>,
## # OCB7 <dbl>, OCB8 <dbl>, JP1 <dbl>, JP2 <dbl>, JP3 <dbl>, JP4 <dbl>
final_check <- data.frame(
Item = names(sem_data),
Missing_Value = colSums(is.na(sem_data)),
Min = sapply(sem_data, min, na.rm = TRUE),
Max = sapply(sem_data, max, na.rm = TRUE)
)
kable(final_check, caption = "Pemeriksaan Akhir Data SEM") %>%
kable_styling(full_width = FALSE)| Item | Missing_Value | Min | Max | |
|---|---|---|---|---|
| AC1 | AC1 | 0 | 1 | 7 |
| AC2 | AC2 | 0 | 1 | 7 |
| AC3 | AC3 | 0 | 1 | 7 |
| AC4 | AC4 | 0 | 1 | 7 |
| AC5 | AC5 | 0 | 1 | 7 |
| AC6 | AC6 | 0 | 1 | 7 |
| CC1 | CC1 | 0 | 1 | 7 |
| CC2 | CC2 | 0 | 1 | 7 |
| CC3 | CC3 | 0 | 1 | 7 |
| CC4 | CC4 | 0 | 1 | 7 |
| CC5 | CC5 | 0 | 1 | 7 |
| CC6 | CC6 | 0 | 1 | 7 |
| NC1 | NC1 | 0 | 1 | 7 |
| NC2 | NC2 | 0 | 1 | 7 |
| NC3 | NC3 | 0 | 1 | 7 |
| NC4 | NC4 | 0 | 1 | 7 |
| NC5 | NC5 | 0 | 2 | 7 |
| NC6 | NC6 | 0 | 1 | 7 |
| OCB1 | OCB1 | 0 | 1 | 7 |
| OCB2 | OCB2 | 0 | 1 | 7 |
| OCB3 | OCB3 | 0 | 1 | 7 |
| OCB4 | OCB4 | 0 | 1 | 7 |
| OCB5 | OCB5 | 0 | 1 | 7 |
| OCB6 | OCB6 | 0 | 1 | 7 |
| OCB7 | OCB7 | 0 | 1 | 7 |
| OCB8 | OCB8 | 0 | 1 | 7 |
| JP1 | JP1 | 0 | 1 | 7 |
| JP2 | JP2 | 0 | 1 | 7 |
| JP3 | JP3 | 0 | 1 | 7 |
| JP4 | JP4 | 0 | 1 | 7 |
Dataset yang digunakan terdiri dari 336 observasi dan 36 variabel. Variabel dalam dataset terdiri atas variabel identitas/demografis dan item-item konstruk penelitian. Konstruk utama yang digunakan dalam analisis PLS-SEM adalah Affective Commitment (AC), Continuance Commitment (CC), Normative Commitment (NC), Organizational Citizenship Behavior (OCB), dan Job Performance (JP).
Berdasarkan struktur data, item konstruk AC, CC, NC, OCB, dan JP telah terbaca sebagai variabel numerik. Hal ini menunjukkan bahwa data item kuesioner sudah sesuai untuk digunakan dalam analisis PLS-SEM. Total item konstruk yang digunakan adalah 30 item, terdiri dari 6 item AC, 6 item CC, 6 item NC, 8 item OCB, dan 4 item JP.
Hasil pemeriksaan missing value menunjukkan bahwa tidak terdapat nilai hilang pada seluruh variabel. Selain itu, hasil pemeriksaan duplikasi menunjukkan bahwa tidak ditemukan data responden yang duplikat. Dengan demikian, dataset dapat digunakan tanpa perlu dilakukan imputasi missing value maupun penghapusan data duplikat.
Pemeriksaan rentang skala Likert menunjukkan bahwa seluruh item konstruk berada pada rentang nilai 1 sampai 7. Hal ini sesuai dengan asumsi skala pengukuran yang digunakan dalam dataset. Setelah proses konversi item ke tipe numerik, tidak ditemukan missing value tambahan, sehingga proses konversi tidak menimbulkan masalah pada data.
Pada bagian reverse coding, tidak ada item yang dimasukkan ke dalam
daftar reverse_items. Artinya, seluruh item dianalisis
sesuai skor aslinya. Namun, hal ini tetap bergantung pada wording asli
kuesioner. Jika terdapat item yang secara substantif bersifat negatif,
maka item tersebut perlu dibalik skornya sebelum analisis final.
Secara keseluruhan, data telah memenuhi syarat awal untuk dianalisis menggunakan PLS-SEM karena tidak memiliki missing value, tidak memiliki duplikasi, seluruh item konstruk bertipe numerik, dan seluruh nilai item berada dalam rentang skala Likert yang valid.
if ("Gender" %in% names(demographic_data)) {
gender_table <- demographic_data %>%
count(Gender) %>%
mutate(Percentage = round(n / sum(n) * 100, 2))
kable(gender_table, caption = "Distribusi Gender") %>%
kable_styling(full_width = FALSE)
}| Gender | n | Percentage |
|---|---|---|
| Female | 98 | 29.17 |
| Male | 238 | 70.83 |
if ("Marital_Status" %in% names(demographic_data)) {
marital_table <- demographic_data %>%
count(Marital_Status) %>%
mutate(Percentage = round(n / sum(n) * 100, 2))
kable(marital_table, caption = "Distribusi Status Pernikahan") %>%
kable_styling(full_width = FALSE)
}if ("Age" %in% names(demographic_data)) {
age_table <- demographic_data %>%
count(Age) %>%
mutate(Percentage = round(n / sum(n) * 100, 2))
kable(age_table, caption = "Distribusi Usia") %>%
kable_styling(full_width = FALSE)
}| Age | n | Percentage |
|---|---|---|
| 18-24 | 6 | 1.79 |
| 25-35 | 99 | 29.46 |
| 36-45 | 125 | 37.20 |
| 46-55 | 64 | 19.05 |
| >55 | 42 | 12.50 |
if ("Education" %in% names(demographic_data)) {
education_table <- demographic_data %>%
count(Education) %>%
mutate(Percentage = round(n / sum(n) * 100, 2))
kable(education_table, caption = "Distribusi Pendidikan") %>%
kable_styling(full_width = FALSE)
}| Education | n | Percentage |
|---|---|---|
| College | 52 | 15.48 |
| Doctorate | 3 | 0.89 |
| High School | 86 | 25.60 |
| Master | 17 | 5.06 |
| University | 178 | 52.98 |
if ("Position" %in% names(demographic_data)) {
position_table <- demographic_data %>%
count(Position) %>%
mutate(Percentage = round(n / sum(n) * 100, 2))
kable(position_table, caption = "Distribusi Posisi") %>%
kable_styling(full_width = FALSE)
}| Position | n | Percentage |
|---|---|---|
| Board of Directors | 13 | 3.87 |
| Chief/Deputy Chief of Staff | 42 | 12.50 |
| Employee | 56 | 16.67 |
| Manager/Leader | 127 | 37.80 |
| Worker | 98 | 29.17 |
item_descriptive <- describe(sem_data) %>%
as.data.frame() %>%
select(n, mean, sd, median, min, max, skew, kurtosis)
kable(item_descriptive, digits = 3, caption = "Statistik Deskriptif Item Konstruk") %>%
kable_styling(full_width = FALSE)| n | mean | sd | median | min | max | skew | kurtosis | |
|---|---|---|---|---|---|---|---|---|
| AC1 | 336 | 4.973 | 1.252 | 5 | 1 | 7 | -0.460 | -0.164 |
| AC2 | 336 | 5.009 | 1.261 | 5 | 1 | 7 | -0.666 | 0.171 |
| AC3 | 336 | 4.958 | 1.276 | 5 | 1 | 7 | -0.619 | 0.180 |
| AC4 | 336 | 4.810 | 1.384 | 5 | 1 | 7 | -0.452 | -0.322 |
| AC5 | 336 | 4.905 | 1.353 | 5 | 1 | 7 | -0.542 | -0.192 |
| AC6 | 336 | 5.033 | 1.394 | 5 | 1 | 7 | -0.612 | 0.086 |
| CC1 | 336 | 5.006 | 1.401 | 5 | 1 | 7 | -0.646 | -0.038 |
| CC2 | 336 | 5.143 | 1.337 | 5 | 1 | 7 | -0.545 | -0.106 |
| CC3 | 336 | 5.089 | 1.418 | 5 | 1 | 7 | -0.822 | 0.510 |
| CC4 | 336 | 5.176 | 1.282 | 5 | 1 | 7 | -0.820 | 0.625 |
| CC5 | 336 | 5.140 | 1.354 | 5 | 1 | 7 | -0.829 | 0.652 |
| CC6 | 336 | 5.283 | 1.300 | 5 | 1 | 7 | -0.776 | 0.534 |
| NC1 | 336 | 4.982 | 1.269 | 5 | 1 | 7 | -0.490 | 0.093 |
| NC2 | 336 | 4.839 | 1.240 | 5 | 1 | 7 | -0.406 | -0.026 |
| NC3 | 336 | 5.122 | 1.222 | 5 | 1 | 7 | -0.674 | 0.658 |
| NC4 | 336 | 4.795 | 1.419 | 5 | 1 | 7 | -0.504 | -0.245 |
| NC5 | 336 | 4.964 | 1.228 | 5 | 2 | 7 | -0.356 | -0.472 |
| NC6 | 336 | 4.923 | 1.318 | 5 | 1 | 7 | -0.630 | 0.046 |
| OCB1 | 336 | 5.143 | 1.242 | 5 | 1 | 7 | -0.727 | 0.622 |
| OCB2 | 336 | 5.503 | 1.224 | 6 | 1 | 7 | -1.122 | 1.573 |
| OCB3 | 336 | 5.170 | 1.196 | 5 | 1 | 7 | -0.777 | 0.874 |
| OCB4 | 336 | 5.161 | 1.238 | 5 | 1 | 7 | -0.852 | 0.954 |
| OCB5 | 336 | 4.753 | 1.483 | 5 | 1 | 7 | -0.597 | -0.121 |
| OCB6 | 336 | 4.705 | 1.494 | 5 | 1 | 7 | -0.631 | -0.093 |
| OCB7 | 336 | 4.914 | 1.361 | 5 | 1 | 7 | -0.751 | 0.261 |
| OCB8 | 336 | 4.943 | 1.382 | 5 | 1 | 7 | -0.602 | -0.061 |
| JP1 | 336 | 5.214 | 1.227 | 5 | 1 | 7 | -0.856 | 1.088 |
| JP2 | 336 | 5.012 | 1.302 | 5 | 1 | 7 | -0.734 | 0.472 |
| JP3 | 336 | 4.833 | 1.374 | 5 | 1 | 7 | -0.615 | 0.023 |
| JP4 | 336 | 4.741 | 1.402 | 5 | 1 | 7 | -0.650 | 0.075 |
construct_scores <- sem_data %>%
mutate(
AC = rowMeans(select(., all_of(ac_items)), na.rm = TRUE),
CC = rowMeans(select(., all_of(cc_items)), na.rm = TRUE),
NC = rowMeans(select(., all_of(nc_items)), na.rm = TRUE),
OCB = rowMeans(select(., all_of(ocb_items)), na.rm = TRUE),
JP = rowMeans(select(., all_of(jp_items)), na.rm = TRUE)
) %>%
select(AC, CC, NC, OCB, JP)
head(construct_scores)## # A tibble: 6 × 5
## AC CC NC OCB JP
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4.67 5.83 5 5.12 5
## 2 3.83 5.5 5.67 5.75 5.5
## 3 2.67 6 5.5 4.25 5.75
## 4 5.83 6 6.33 6 6
## 5 3 3.67 3.5 4 4.5
## 6 4.67 3.33 4.83 4.75 4.5
construct_descriptive <- describe(construct_scores) %>%
as.data.frame() %>%
select(n, mean, sd, median, min, max, skew, kurtosis)
kable(construct_descriptive, digits = 3, caption = "Statistik Deskriptif Konstruk") %>%
kable_styling(full_width = FALSE)| n | mean | sd | median | min | max | skew | kurtosis | |
|---|---|---|---|---|---|---|---|---|
| AC | 336 | 4.948 | 1.171 | 5.000 | 1.000 | 7 | -0.585 | 0.240 |
| CC | 336 | 5.139 | 1.233 | 5.333 | 1.000 | 7 | -0.678 | 0.258 |
| NC | 336 | 4.938 | 1.088 | 5.000 | 1.667 | 7 | -0.344 | -0.225 |
| OCB | 336 | 5.036 | 1.034 | 5.125 | 1.125 | 7 | -0.530 | 0.290 |
| JP | 336 | 4.950 | 1.085 | 5.000 | 1.500 | 7 | -0.514 | 0.262 |
construct_mean <- construct_scores %>%
summarise(across(everything(), mean, na.rm = TRUE)) %>%
tidyr::pivot_longer(
cols = everything(),
names_to = "Construct",
values_to = "Mean"
)
ggplot(construct_mean, aes(x = Construct, y = Mean)) +
geom_col() +
labs(
title = "Rata-Rata Skor Konstruk",
x = "Konstruk",
y = "Rata-Rata"
) +
ylim(0, 7)construct_correlation <- cor(construct_scores, use = "pairwise.complete.obs")
round(construct_correlation, 3)## AC CC NC OCB JP
## AC 1.000 0.617 0.702 0.494 0.727
## CC 0.617 1.000 0.664 0.566 0.686
## NC 0.702 0.664 1.000 0.617 0.727
## OCB 0.494 0.566 0.617 1.000 0.692
## JP 0.727 0.686 0.727 0.692 1.000
kable(
round(construct_correlation, 3),
caption = "Matriks Korelasi Antar Konstruk"
) %>%
kable_styling(full_width = FALSE)| AC | CC | NC | OCB | JP | |
|---|---|---|---|---|---|
| AC | 1.000 | 0.617 | 0.702 | 0.494 | 0.727 |
| CC | 0.617 | 1.000 | 0.664 | 0.566 | 0.686 |
| NC | 0.702 | 0.664 | 1.000 | 0.617 | 0.727 |
| OCB | 0.494 | 0.566 | 0.617 | 1.000 | 0.692 |
| JP | 0.727 | 0.686 | 0.727 | 0.692 | 1.000 |
Berdasarkan distribusi demografis, responden dalam dataset didominasi oleh laki-laki sebanyak 238 responden atau 70,83%, sedangkan responden perempuan berjumlah 98 responden atau 29,17%. Dari sisi usia, kelompok terbesar adalah responden berusia 36–45 tahun sebanyak 125 responden atau 37,20%, diikuti kelompok usia 25–35 tahun sebanyak 99 responden atau 29,46%.
Dari sisi pendidikan, mayoritas responden memiliki tingkat pendidikan University, yaitu sebanyak 178 responden atau 52,98%. Sementara itu, berdasarkan posisi pekerjaan, kelompok terbesar adalah Manager/Leader sebanyak 127 responden atau 37,80%, diikuti oleh Worker sebanyak 98 responden atau 29,17%. Komposisi ini menunjukkan bahwa responden cukup banyak berasal dari kelompok pekerja dengan pengalaman dan posisi kerja yang relatif matang.
Statistik deskriptif item menunjukkan bahwa sebagian besar item memiliki nilai rata-rata di sekitar angka 4,7 sampai 5,5 pada skala 1–7. Hal ini mengindikasikan bahwa secara umum responden cenderung memberikan penilaian positif terhadap item-item organizational commitment, OCB, dan job performance.
Pada tingkat konstruk, rata-rata konstruk berada pada kategori menengah-tinggi. Nilai rata-rata konstruk adalah AC = 4,948, CC = 5,139, NC = 4,938, OCB = 5,036, dan JP = 4,950. Konstruk dengan rata-rata tertinggi adalah Continuance Commitment (CC), sedangkan rata-rata terendah terdapat pada Normative Commitment (NC) dan Job Performance (JP) yang nilainya relatif berdekatan.
Matriks korelasi antar konstruk menunjukkan bahwa seluruh hubungan antar konstruk bernilai positif. Korelasi antara AC dan JP sebesar 0,727, NC dan JP sebesar 0,727, serta OCB dan JP sebesar 0,692. Hal ini menunjukkan bahwa komitmen organisasi dan OCB memiliki hubungan awal yang cukup kuat dengan job performance.
Korelasi antara OCB dan JP yang bernilai positif menunjukkan bahwa semakin tinggi perilaku Organizational Citizenship Behavior, semakin tinggi pula kecenderungan Job Performance. Selain itu, korelasi antara AC, CC, dan NC juga cukup tinggi, yang wajar karena ketiganya merupakan dimensi dari organizational commitment. Namun, korelasi tersebut masih perlu diuji lebih lanjut dalam model PLS-SEM untuk mengetahui pengaruh langsung dan tidak langsung antar konstruk.
construct_names <- c("AC", "CC", "NC", "OCB", "JP")
inner_model <- matrix(
c(
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
1, 1, 1, 0, 0,
1, 1, 1, 1, 0
),
nrow = 5,
byrow = TRUE
)
colnames(inner_model) <- rownames(inner_model) <- construct_names
inner_model## AC CC NC OCB JP
## AC 0 0 0 0 0
## CC 0 0 0 0 0
## NC 0 0 0 0 0
## OCB 1 1 1 0 0
## JP 1 1 1 1 0
| AC | CC | NC | OCB | JP | |
|---|---|---|---|---|---|
| AC | 0 | 0 | 0 | 0 | 0 |
| CC | 0 | 0 | 0 | 0 | 0 |
| NC | 0 | 0 | 0 | 0 | 0 |
| OCB | 1 | 1 | 1 | 0 | 0 |
| JP | 1 | 1 | 1 | 1 | 0 |
outer_model <- list(
AC = ac_items,
CC = cc_items,
NC = nc_items,
OCB = ocb_items,
JP = jp_items
)
outer_model## $AC
## [1] "AC1" "AC2" "AC3" "AC4" "AC5" "AC6"
##
## $CC
## [1] "CC1" "CC2" "CC3" "CC4" "CC5" "CC6"
##
## $NC
## [1] "NC1" "NC2" "NC3" "NC4" "NC5" "NC6"
##
## $OCB
## [1] "OCB1" "OCB2" "OCB3" "OCB4" "OCB5" "OCB6" "OCB7" "OCB8"
##
## $JP
## [1] "JP1" "JP2" "JP3" "JP4"
outer_model_table <- data.frame(
Construct = rep(names(outer_model), lengths(outer_model)),
Item = unlist(outer_model)
)
kable(
outer_model_table,
caption = "Spesifikasi Outer Model"
) %>%
kable_styling(full_width = FALSE)| Construct | Item | |
|---|---|---|
| AC1 | AC | AC1 |
| AC2 | AC | AC2 |
| AC3 | AC | AC3 |
| AC4 | AC | AC4 |
| AC5 | AC | AC5 |
| AC6 | AC | AC6 |
| CC1 | CC | CC1 |
| CC2 | CC | CC2 |
| CC3 | CC | CC3 |
| CC4 | CC | CC4 |
| CC5 | CC | CC5 |
| CC6 | CC | CC6 |
| NC1 | NC | NC1 |
| NC2 | NC | NC2 |
| NC3 | NC | NC3 |
| NC4 | NC | NC4 |
| NC5 | NC | NC5 |
| NC6 | NC | NC6 |
| OCB1 | OCB | OCB1 |
| OCB2 | OCB | OCB2 |
| OCB3 | OCB | OCB3 |
| OCB4 | OCB | OCB4 |
| OCB5 | OCB | OCB5 |
| OCB6 | OCB | OCB6 |
| OCB7 | OCB | OCB7 |
| OCB8 | OCB | OCB8 |
| JP1 | JP | JP1 |
| JP2 | JP | JP2 |
| JP3 | JP | JP3 |
| JP4 | JP | JP4 |
modes <- c("A", "A", "A", "A", "A")
measurement_modes <- data.frame(
Construct = construct_names,
Mode = modes,
Measurement_Type = rep("Reflective", length(modes))
)
kable(
measurement_modes,
caption = "Mode Pengukuran Konstruk"
) %>%
kable_styling(full_width = FALSE)| Construct | Mode | Measurement_Type |
|---|---|---|
| AC | A | Reflective |
| CC | A | Reflective |
| NC | A | Reflective |
| OCB | A | Reflective |
| JP | A | Reflective |
pls_model <- plspm(
Data = sem_data,
path_matrix = inner_model,
blocks = outer_model,
modes = modes,
scaled = TRUE
)## PARTIAL LEAST SQUARES PATH MODELING (PLS-PM)
##
## ----------------------------------------------------------
## MODEL SPECIFICATION
## 1 Number of Cases 336
## 2 Latent Variables 5
## 3 Manifest Variables 30
## 4 Scale of Data Standardized Data
## 5 Non-Metric PLS FALSE
## 6 Weighting Scheme centroid
## 7 Tolerance Crit 1e-06
## 8 Max Num Iters 100
## 9 Convergence Iters 3
## 10 Bootstrapping FALSE
## 11 Bootstrap samples NULL
##
## ----------------------------------------------------------
## BLOCKS DEFINITION
## Block Type Size Mode
## 1 AC Exogenous 6 A
## 2 CC Exogenous 6 A
## 3 NC Exogenous 6 A
## 4 OCB Endogenous 8 A
## 5 JP Endogenous 4 A
##
## ----------------------------------------------------------
## BLOCKS UNIDIMENSIONALITY
## Mode MVs C.alpha DG.rho eig.1st eig.2nd
## AC A 6 0.947 0.958 4.75 0.527
## CC A 6 0.960 0.968 5.01 0.324
## NC A 6 0.922 0.939 4.32 0.648
## OCB A 8 0.908 0.926 4.89 1.126
## JP A 4 0.833 0.890 2.68 0.617
##
## ----------------------------------------------------------
## OUTER MODEL
## weight loading communality redundancy
## AC
## 1 AC1 0.186 0.917 0.841 0.000
## 1 AC2 0.200 0.925 0.856 0.000
## 1 AC3 0.193 0.925 0.856 0.000
## 1 AC4 0.191 0.912 0.831 0.000
## 1 AC5 0.184 0.856 0.732 0.000
## 1 AC6 0.168 0.797 0.635 0.000
## CC
## 2 CC1 0.179 0.881 0.777 0.000
## 2 CC2 0.181 0.926 0.857 0.000
## 2 CC3 0.194 0.945 0.893 0.000
## 2 CC4 0.182 0.900 0.809 0.000
## 2 CC5 0.183 0.930 0.865 0.000
## 2 CC6 0.176 0.900 0.810 0.000
## NC
## 3 NC1 0.190 0.828 0.686 0.000
## 3 NC2 0.191 0.851 0.725 0.000
## 3 NC3 0.192 0.833 0.694 0.000
## 3 NC4 0.204 0.853 0.727 0.000
## 3 NC5 0.211 0.890 0.793 0.000
## 3 NC6 0.190 0.835 0.698 0.000
## OCB
## 4 OCB1 0.179 0.859 0.737 0.339
## 4 OCB2 0.212 0.821 0.674 0.310
## 4 OCB3 0.163 0.733 0.537 0.247
## 4 OCB4 0.166 0.804 0.646 0.297
## 4 OCB5 0.127 0.724 0.524 0.241
## 4 OCB6 0.106 0.644 0.415 0.191
## 4 OCB7 0.164 0.847 0.717 0.329
## 4 OCB8 0.153 0.785 0.617 0.283
## JP
## 5 JP1 0.303 0.807 0.652 0.478
## 5 JP2 0.235 0.703 0.495 0.363
## 5 JP3 0.339 0.895 0.801 0.588
## 5 JP4 0.336 0.853 0.728 0.534
##
## ----------------------------------------------------------
## CROSSLOADINGS
## AC CC NC OCB JP
## AC
## 1 AC1 0.917 0.558 0.611 0.446 0.661
## 1 AC2 0.925 0.545 0.653 0.489 0.703
## 1 AC3 0.925 0.545 0.644 0.464 0.687
## 1 AC4 0.912 0.533 0.638 0.449 0.686
## 1 AC5 0.856 0.548 0.623 0.462 0.632
## 1 AC6 0.797 0.552 0.567 0.434 0.569
## CC
## 2 CC1 0.594 0.881 0.619 0.521 0.631
## 2 CC2 0.576 0.926 0.608 0.522 0.639
## 2 CC3 0.621 0.945 0.666 0.544 0.699
## 2 CC4 0.511 0.900 0.577 0.565 0.603
## 2 CC5 0.555 0.930 0.584 0.533 0.641
## 2 CC6 0.503 0.900 0.576 0.538 0.590
## NC
## 3 NC1 0.648 0.543 0.828 0.492 0.633
## 3 NC2 0.658 0.584 0.851 0.498 0.634
## 3 NC3 0.563 0.510 0.833 0.549 0.588
## 3 NC4 0.581 0.564 0.853 0.576 0.635
## 3 NC5 0.561 0.582 0.890 0.620 0.629
## 3 NC6 0.563 0.592 0.835 0.521 0.605
## OCB
## 4 OCB1 0.446 0.447 0.539 0.859 0.675
## 4 OCB2 0.536 0.642 0.633 0.821 0.686
## 4 OCB3 0.423 0.405 0.526 0.733 0.570
## 4 OCB4 0.413 0.481 0.515 0.804 0.543
## 4 OCB5 0.283 0.427 0.359 0.724 0.424
## 4 OCB6 0.283 0.264 0.344 0.644 0.358
## 4 OCB7 0.373 0.481 0.519 0.847 0.557
## 4 OCB8 0.367 0.424 0.470 0.785 0.539
## JP
## 5 JP1 0.556 0.569 0.611 0.594 0.807
## 5 JP2 0.385 0.397 0.461 0.564 0.703
## 5 JP3 0.662 0.659 0.663 0.618 0.895
## 5 JP4 0.762 0.610 0.633 0.575 0.853
##
## ----------------------------------------------------------
## INNER MODEL
## $OCB
## Estimate Std. Error t value Pr(>|t|)
## Intercept -1.74e-16 0.0404 -4.31e-15 1.00e+00
## AC 4.63e-02 0.0589 7.87e-01 4.32e-01
## CC 2.78e-01 0.0561 4.96e+00 1.15e-06
## NC 4.24e-01 0.0621 6.83e+00 4.01e-11
##
## $JP
## Estimate Std. Error t value Pr(>|t|)
## Intercept 1.75e-17 0.0284 6.17e-16 1.00e+00
## AC 3.50e-01 0.0414 8.44e+00 1.03e-15
## CC 1.85e-01 0.0409 4.53e+00 8.09e-06
## NC 1.53e-01 0.0466 3.28e+00 1.13e-03
## OCB 3.28e-01 0.0386 8.51e+00 6.16e-16
##
## ----------------------------------------------------------
## CORRELATIONS BETWEEN LVs
## AC CC NC OCB JP
## AC 1.000 0.614 0.701 0.514 0.739
## CC 0.614 1.000 0.663 0.588 0.694
## NC 0.701 0.663 1.000 0.641 0.731
## OCB 0.514 0.588 0.641 1.000 0.715
## JP 0.739 0.694 0.731 0.715 1.000
##
## ----------------------------------------------------------
## SUMMARY INNER MODEL
## Type R2 Block_Communality Mean_Redundancy AVE
## AC Exogenous 0.000 0.792 0.000 0.792
## CC Exogenous 0.000 0.835 0.000 0.835
## NC Exogenous 0.000 0.720 0.000 0.720
## OCB Endogenous 0.459 0.609 0.279 0.609
## JP Endogenous 0.734 0.669 0.491 0.669
##
## ----------------------------------------------------------
## GOODNESS-OF-FIT
## [1] 0.6558
##
## ----------------------------------------------------------
## TOTAL EFFECTS
## relationships direct indirect total
## 1 AC -> CC 0.0000 0.0000 0.0000
## 2 AC -> NC 0.0000 0.0000 0.0000
## 3 AC -> OCB 0.0463 0.0000 0.0463
## 4 AC -> JP 0.3495 0.0152 0.3648
## 5 CC -> NC 0.0000 0.0000 0.0000
## 6 CC -> OCB 0.2782 0.0000 0.2782
## 7 CC -> JP 0.1854 0.0913 0.2767
## 8 NC -> OCB 0.4242 0.0000 0.4242
## 9 NC -> JP 0.1531 0.1392 0.2923
## 10 OCB -> JP 0.3282 0.0000 0.3282
outer_loading <- pls_model$outer_model %>%
select(block, name, weight, loading, communality, redundancy)
kable(
outer_loading,
digits = 3,
caption = "Outer Loading"
) %>%
kable_styling(full_width = FALSE)| block | name | weight | loading | communality | redundancy |
|---|---|---|---|---|---|
| AC | AC1 | 0.186 | 0.917 | 0.841 | 0.000 |
| AC | AC2 | 0.200 | 0.925 | 0.856 | 0.000 |
| AC | AC3 | 0.193 | 0.925 | 0.856 | 0.000 |
| AC | AC4 | 0.191 | 0.912 | 0.831 | 0.000 |
| AC | AC5 | 0.184 | 0.856 | 0.732 | 0.000 |
| AC | AC6 | 0.168 | 0.797 | 0.635 | 0.000 |
| CC | CC1 | 0.179 | 0.881 | 0.777 | 0.000 |
| CC | CC2 | 0.181 | 0.926 | 0.857 | 0.000 |
| CC | CC3 | 0.194 | 0.945 | 0.893 | 0.000 |
| CC | CC4 | 0.182 | 0.900 | 0.809 | 0.000 |
| CC | CC5 | 0.183 | 0.930 | 0.865 | 0.000 |
| CC | CC6 | 0.176 | 0.900 | 0.810 | 0.000 |
| NC | NC1 | 0.190 | 0.828 | 0.686 | 0.000 |
| NC | NC2 | 0.191 | 0.851 | 0.725 | 0.000 |
| NC | NC3 | 0.192 | 0.833 | 0.694 | 0.000 |
| NC | NC4 | 0.204 | 0.853 | 0.727 | 0.000 |
| NC | NC5 | 0.211 | 0.890 | 0.793 | 0.000 |
| NC | NC6 | 0.190 | 0.835 | 0.698 | 0.000 |
| OCB | OCB1 | 0.179 | 0.859 | 0.737 | 0.339 |
| OCB | OCB2 | 0.212 | 0.821 | 0.674 | 0.310 |
| OCB | OCB3 | 0.163 | 0.733 | 0.537 | 0.247 |
| OCB | OCB4 | 0.166 | 0.804 | 0.646 | 0.297 |
| OCB | OCB5 | 0.127 | 0.724 | 0.524 | 0.241 |
| OCB | OCB6 | 0.106 | 0.644 | 0.415 | 0.191 |
| OCB | OCB7 | 0.164 | 0.847 | 0.717 | 0.329 |
| OCB | OCB8 | 0.153 | 0.785 | 0.617 | 0.283 |
| JP | JP1 | 0.303 | 0.807 | 0.652 | 0.478 |
| JP | JP2 | 0.235 | 0.703 | 0.495 | 0.363 |
| JP | JP3 | 0.339 | 0.895 | 0.801 | 0.588 |
| JP | JP4 | 0.336 | 0.853 | 0.728 | 0.534 |
outer_loading_decision <- outer_loading %>%
mutate(
Loading_Criteria = case_when(
loading >= 0.70 ~ "Memenuhi",
loading >= 0.50 & loading < 0.70 ~ "Dipertimbangkan",
loading < 0.50 ~ "Tidak Memenuhi"
)
)
kable(
outer_loading_decision,
digits = 3,
caption = "Keputusan Outer Loading"
) %>%
kable_styling(full_width = FALSE)| block | name | weight | loading | communality | redundancy | Loading_Criteria |
|---|---|---|---|---|---|---|
| AC | AC1 | 0.186 | 0.917 | 0.841 | 0.000 | Memenuhi |
| AC | AC2 | 0.200 | 0.925 | 0.856 | 0.000 | Memenuhi |
| AC | AC3 | 0.193 | 0.925 | 0.856 | 0.000 | Memenuhi |
| AC | AC4 | 0.191 | 0.912 | 0.831 | 0.000 | Memenuhi |
| AC | AC5 | 0.184 | 0.856 | 0.732 | 0.000 | Memenuhi |
| AC | AC6 | 0.168 | 0.797 | 0.635 | 0.000 | Memenuhi |
| CC | CC1 | 0.179 | 0.881 | 0.777 | 0.000 | Memenuhi |
| CC | CC2 | 0.181 | 0.926 | 0.857 | 0.000 | Memenuhi |
| CC | CC3 | 0.194 | 0.945 | 0.893 | 0.000 | Memenuhi |
| CC | CC4 | 0.182 | 0.900 | 0.809 | 0.000 | Memenuhi |
| CC | CC5 | 0.183 | 0.930 | 0.865 | 0.000 | Memenuhi |
| CC | CC6 | 0.176 | 0.900 | 0.810 | 0.000 | Memenuhi |
| NC | NC1 | 0.190 | 0.828 | 0.686 | 0.000 | Memenuhi |
| NC | NC2 | 0.191 | 0.851 | 0.725 | 0.000 | Memenuhi |
| NC | NC3 | 0.192 | 0.833 | 0.694 | 0.000 | Memenuhi |
| NC | NC4 | 0.204 | 0.853 | 0.727 | 0.000 | Memenuhi |
| NC | NC5 | 0.211 | 0.890 | 0.793 | 0.000 | Memenuhi |
| NC | NC6 | 0.190 | 0.835 | 0.698 | 0.000 | Memenuhi |
| OCB | OCB1 | 0.179 | 0.859 | 0.737 | 0.339 | Memenuhi |
| OCB | OCB2 | 0.212 | 0.821 | 0.674 | 0.310 | Memenuhi |
| OCB | OCB3 | 0.163 | 0.733 | 0.537 | 0.247 | Memenuhi |
| OCB | OCB4 | 0.166 | 0.804 | 0.646 | 0.297 | Memenuhi |
| OCB | OCB5 | 0.127 | 0.724 | 0.524 | 0.241 | Memenuhi |
| OCB | OCB6 | 0.106 | 0.644 | 0.415 | 0.191 | Dipertimbangkan |
| OCB | OCB7 | 0.164 | 0.847 | 0.717 | 0.329 | Memenuhi |
| OCB | OCB8 | 0.153 | 0.785 | 0.617 | 0.283 | Memenuhi |
| JP | JP1 | 0.303 | 0.807 | 0.652 | 0.478 | Memenuhi |
| JP | JP2 | 0.235 | 0.703 | 0.495 | 0.363 | Memenuhi |
| JP | JP3 | 0.339 | 0.895 | 0.801 | 0.588 | Memenuhi |
| JP | JP4 | 0.336 | 0.853 | 0.728 | 0.534 | Memenuhi |
construct_reliability <- pls_model$unidim %>%
as.data.frame()
construct_reliability$Construct <- rownames(construct_reliability)
construct_reliability <- construct_reliability %>%
select(Construct, everything())
kable(
construct_reliability,
digits = 3,
caption = "Reliabilitas Konstruk"
) %>%
kable_styling(full_width = FALSE)| Construct | Mode | MVs | C.alpha | DG.rho | eig.1st | eig.2nd | |
|---|---|---|---|---|---|---|---|
| AC | AC | A | 6 | 0.947 | 0.958 | 4.751 | 0.527 |
| CC | CC | A | 6 | 0.960 | 0.968 | 5.011 | 0.324 |
| NC | NC | A | 6 | 0.922 | 0.939 | 4.322 | 0.648 |
| OCB | OCB | A | 8 | 0.908 | 0.926 | 4.886 | 1.126 |
| JP | JP | A | 4 | 0.833 | 0.890 | 2.678 | 0.617 |
reliability_decision <- construct_reliability %>%
mutate(
Cronbach_Alpha_Decision = ifelse(C.alpha >= 0.70, "Memenuhi", "Tidak Memenuhi"),
Composite_Reliability_Decision = ifelse(DG.rho >= 0.70, "Memenuhi", "Tidak Memenuhi")
) %>%
select(
Construct,
C.alpha,
Cronbach_Alpha_Decision,
DG.rho,
Composite_Reliability_Decision
)
kable(
reliability_decision,
digits = 3,
caption = "Keputusan Reliabilitas Konstruk"
) %>%
kable_styling(full_width = FALSE)| Construct | C.alpha | Cronbach_Alpha_Decision | DG.rho | Composite_Reliability_Decision | |
|---|---|---|---|---|---|
| AC | AC | 0.947 | Memenuhi | 0.958 | Memenuhi |
| CC | CC | 0.960 | Memenuhi | 0.968 | Memenuhi |
| NC | NC | 0.922 | Memenuhi | 0.939 | Memenuhi |
| OCB | OCB | 0.908 | Memenuhi | 0.926 | Memenuhi |
| JP | JP | 0.833 | Memenuhi | 0.890 | Memenuhi |
ave_table <- pls_model$inner_summary %>%
as.data.frame()
ave_table$Construct <- rownames(ave_table)
ave_table <- ave_table %>%
select(Construct, AVE) %>%
mutate(
AVE_Decision = ifelse(AVE >= 0.50, "Memenuhi", "Tidak Memenuhi")
)
kable(
ave_table,
digits = 3,
caption = "Average Variance Extracted"
) %>%
kable_styling(full_width = FALSE)| Construct | AVE | AVE_Decision | |
|---|---|---|---|
| AC | AC | 0.792 | Memenuhi |
| CC | CC | 0.835 | Memenuhi |
| NC | NC | 0.720 | Memenuhi |
| OCB | OCB | 0.609 | Memenuhi |
| JP | JP | 0.669 | Memenuhi |
cross_loading <- pls_model$crossloadings
kable(
cross_loading,
digits = 3,
caption = "Cross Loading"
) %>%
kable_styling(full_width = FALSE)| name | block | AC | CC | NC | OCB | JP |
|---|---|---|---|---|---|---|
| AC1 | AC | 0.917 | 0.558 | 0.611 | 0.446 | 0.661 |
| AC2 | AC | 0.925 | 0.545 | 0.653 | 0.489 | 0.703 |
| AC3 | AC | 0.925 | 0.545 | 0.644 | 0.464 | 0.687 |
| AC4 | AC | 0.912 | 0.533 | 0.638 | 0.449 | 0.686 |
| AC5 | AC | 0.856 | 0.548 | 0.623 | 0.462 | 0.632 |
| AC6 | AC | 0.797 | 0.552 | 0.567 | 0.434 | 0.569 |
| CC1 | CC | 0.594 | 0.881 | 0.619 | 0.521 | 0.631 |
| CC2 | CC | 0.576 | 0.926 | 0.608 | 0.522 | 0.639 |
| CC3 | CC | 0.621 | 0.945 | 0.666 | 0.544 | 0.699 |
| CC4 | CC | 0.511 | 0.900 | 0.577 | 0.565 | 0.603 |
| CC5 | CC | 0.555 | 0.930 | 0.584 | 0.533 | 0.641 |
| CC6 | CC | 0.503 | 0.900 | 0.576 | 0.538 | 0.590 |
| NC1 | NC | 0.648 | 0.543 | 0.828 | 0.492 | 0.633 |
| NC2 | NC | 0.658 | 0.584 | 0.851 | 0.498 | 0.634 |
| NC3 | NC | 0.563 | 0.510 | 0.833 | 0.549 | 0.588 |
| NC4 | NC | 0.581 | 0.564 | 0.853 | 0.576 | 0.635 |
| NC5 | NC | 0.561 | 0.582 | 0.890 | 0.620 | 0.629 |
| NC6 | NC | 0.563 | 0.592 | 0.835 | 0.521 | 0.605 |
| OCB1 | OCB | 0.446 | 0.447 | 0.539 | 0.859 | 0.675 |
| OCB2 | OCB | 0.536 | 0.642 | 0.633 | 0.821 | 0.686 |
| OCB3 | OCB | 0.423 | 0.405 | 0.526 | 0.733 | 0.570 |
| OCB4 | OCB | 0.413 | 0.481 | 0.515 | 0.804 | 0.543 |
| OCB5 | OCB | 0.283 | 0.427 | 0.359 | 0.724 | 0.424 |
| OCB6 | OCB | 0.283 | 0.264 | 0.344 | 0.644 | 0.358 |
| OCB7 | OCB | 0.373 | 0.481 | 0.519 | 0.847 | 0.557 |
| OCB8 | OCB | 0.367 | 0.424 | 0.470 | 0.785 | 0.539 |
| JP1 | JP | 0.556 | 0.569 | 0.611 | 0.594 | 0.807 |
| JP2 | JP | 0.385 | 0.397 | 0.461 | 0.564 | 0.703 |
| JP3 | JP | 0.662 | 0.659 | 0.663 | 0.618 | 0.895 |
| JP4 | JP | 0.762 | 0.610 | 0.633 | 0.575 | 0.853 |
latent_scores <- pls_model$scores
latent_correlation <- cor(latent_scores)
sqrt_ave <- sqrt(ave_table$AVE)
names(sqrt_ave) <- ave_table$Construct
fornell_larcker <- latent_correlation
diag(fornell_larcker) <- sqrt_ave[colnames(fornell_larcker)]
kable(
round(fornell_larcker, 3),
caption = "Fornell-Larcker Criterion"
) %>%
kable_styling(full_width = FALSE)| AC | CC | NC | OCB | JP | |
|---|---|---|---|---|---|
| AC | 0.890 | 0.614 | 0.700 | 0.514 | 0.739 |
| CC | 0.614 | 0.914 | 0.663 | 0.588 | 0.694 |
| NC | 0.700 | 0.663 | 0.849 | 0.641 | 0.731 |
| OCB | 0.514 | 0.588 | 0.641 | 0.780 | 0.715 |
| JP | 0.739 | 0.694 | 0.731 | 0.715 | 0.818 |
calculate_htmt <- function(data, construct_list) {
construct_names <- names(construct_list)
htmt_matrix <- matrix(
NA,
nrow = length(construct_names),
ncol = length(construct_names)
)
rownames(htmt_matrix) <- colnames(htmt_matrix) <- construct_names
for (i in seq_along(construct_names)) {
for (j in seq_along(construct_names)) {
if (i == j) {
htmt_matrix[i, j] <- 1
} else {
items_i <- construct_list[[i]]
items_j <- construct_list[[j]]
heterotrait_corr <- abs(cor(data[, items_i], data[, items_j], use = "pairwise.complete.obs"))
mean_heterotrait <- mean(heterotrait_corr, na.rm = TRUE)
monotrait_i <- abs(cor(data[, items_i], use = "pairwise.complete.obs"))
monotrait_j <- abs(cor(data[, items_j], use = "pairwise.complete.obs"))
monotrait_i <- monotrait_i[upper.tri(monotrait_i)]
monotrait_j <- monotrait_j[upper.tri(monotrait_j)]
mean_monotrait_i <- mean(monotrait_i, na.rm = TRUE)
mean_monotrait_j <- mean(monotrait_j, na.rm = TRUE)
htmt_matrix[i, j] <- mean_heterotrait / sqrt(mean_monotrait_i * mean_monotrait_j)
}
}
}
return(htmt_matrix)
}htmt_matrix <- calculate_htmt(sem_data, outer_model)
kable(
round(htmt_matrix, 3),
caption = "HTMT"
) %>%
kable_styling(full_width = FALSE)| AC | CC | NC | OCB | JP | |
|---|---|---|---|---|---|
| AC | 1.000 | 0.645 | 0.751 | 0.541 | 0.815 |
| CC | 0.645 | 1.000 | 0.704 | 0.613 | 0.765 |
| NC | 0.751 | 0.704 | 1.000 | 0.683 | 0.828 |
| OCB | 0.541 | 0.613 | 0.683 | 1.000 | 0.808 |
| JP | 0.815 | 0.765 | 0.828 | 0.808 | 1.000 |
htmt_decision <- as.data.frame(as.table(htmt_matrix)) %>%
filter(Var1 != Var2) %>%
mutate(
Pair = paste(Var1, "-", Var2),
HTMT = Freq,
Decision_085 = ifelse(HTMT < 0.85, "Memenuhi", "Tidak Memenuhi"),
Decision_090 = ifelse(HTMT < 0.90, "Memenuhi", "Tidak Memenuhi")
) %>%
select(Pair, HTMT, Decision_085, Decision_090) %>%
distinct()
kable(
htmt_decision,
digits = 3,
caption = "Keputusan HTMT"
) %>%
kable_styling(full_width = FALSE)| Pair | HTMT | Decision_085 | Decision_090 |
|---|---|---|---|
| CC - AC | 0.645 | Memenuhi | Memenuhi |
| NC - AC | 0.751 | Memenuhi | Memenuhi |
| OCB - AC | 0.541 | Memenuhi | Memenuhi |
| JP - AC | 0.815 | Memenuhi | Memenuhi |
| AC - CC | 0.645 | Memenuhi | Memenuhi |
| NC - CC | 0.704 | Memenuhi | Memenuhi |
| OCB - CC | 0.613 | Memenuhi | Memenuhi |
| JP - CC | 0.765 | Memenuhi | Memenuhi |
| AC - NC | 0.751 | Memenuhi | Memenuhi |
| CC - NC | 0.704 | Memenuhi | Memenuhi |
| OCB - NC | 0.683 | Memenuhi | Memenuhi |
| JP - NC | 0.828 | Memenuhi | Memenuhi |
| AC - OCB | 0.541 | Memenuhi | Memenuhi |
| CC - OCB | 0.613 | Memenuhi | Memenuhi |
| NC - OCB | 0.683 | Memenuhi | Memenuhi |
| JP - OCB | 0.808 | Memenuhi | Memenuhi |
| AC - JP | 0.815 | Memenuhi | Memenuhi |
| CC - JP | 0.765 | Memenuhi | Memenuhi |
| NC - JP | 0.828 | Memenuhi | Memenuhi |
| OCB - JP | 0.808 | Memenuhi | Memenuhi |
Evaluasi outer model dilakukan untuk menilai apakah indikator-indikator yang digunakan telah mampu merepresentasikan konstruk laten dengan baik. Evaluasi ini meliputi outer loading, reliabilitas konstruk, validitas konvergen, cross loading, Fornell-Larcker Criterion, dan HTMT.
Berdasarkan hasil outer loading, sebagian besar indikator memiliki nilai loading di atas 0,70. Pada konstruk Affective Commitment (AC), seluruh indikator AC1 sampai AC6 memiliki loading antara 0,797 sampai 0,925, sehingga seluruh indikator AC memenuhi kriteria. Pada konstruk Continuance Commitment (CC), seluruh indikator CC1 sampai CC6 memiliki loading antara 0,881 sampai 0,945, sehingga seluruh indikator CC juga memenuhi kriteria. Pada konstruk Normative Commitment (NC), seluruh indikator NC1 sampai NC6 memiliki loading antara 0,828 sampai 0,890, sehingga seluruh indikator NC memenuhi kriteria outer loading.
Pada konstruk Organizational Citizenship Behavior (OCB), sebagian besar indikator memiliki loading di atas 0,70. Indikator OCB1, OCB2, OCB3, OCB4, OCB5, OCB7, dan OCB8 memenuhi kriteria. Namun, indikator OCB6 memiliki loading sebesar 0,644, sehingga masuk kategori dipertimbangkan. Nilai ini masih berada di atas 0,50, sehingga indikator tersebut tidak harus langsung dihapus. Keputusan untuk mempertahankan atau menghapus OCB6 sebaiknya mempertimbangkan teori, isi item, serta dampaknya terhadap AVE dan reliabilitas konstruk.
Pada konstruk Job Performance (JP), seluruh indikator JP1 sampai JP4 memenuhi kriteria outer loading. Nilai loading JP berada antara 0,703 sampai 0,895. Meskipun JP2 memiliki nilai loading paling rendah di antara indikator JP, yaitu 0,703, nilainya masih berada di atas batas 0,70 sehingga tetap memenuhi kriteria.
Hasil reliabilitas konstruk menunjukkan bahwa seluruh konstruk memiliki Cronbach’s Alpha dan Composite Reliability (DG.rho) di atas 0,70. Nilai Cronbach’s Alpha masing-masing konstruk adalah AC = 0,947, CC = 0,960, NC = 0,922, OCB = 0,908, dan JP = 0,833. Sementara itu, nilai Composite Reliability masing-masing konstruk adalah AC = 0,958, CC = 0,968, NC = 0,939, OCB = 0,926, dan JP = 0,890. Dengan demikian, seluruh konstruk dapat dinyatakan reliabel.
Validitas konvergen dievaluasi menggunakan nilai Average Variance Extracted (AVE). Seluruh konstruk memiliki nilai AVE di atas 0,50, yaitu AC = 0,792, CC = 0,835, NC = 0,720, OCB = 0,609, dan JP = 0,669. Hal ini menunjukkan bahwa masing-masing konstruk mampu menjelaskan lebih dari 50% varians indikator-indikatornya.
Hasil Fornell-Larcker Criterion menunjukkan bahwa nilai akar AVE pada diagonal utama lebih besar dibandingkan korelasi konstruk tersebut dengan konstruk lainnya. Nilai diagonal adalah AC = 0,890, CC = 0,914, NC = 0,849, OCB = 0,780, dan JP = 0,818. Hasil ini menunjukkan bahwa validitas diskriminan berdasarkan Fornell-Larcker telah terpenuhi.
Hasil HTMT juga menunjukkan bahwa seluruh pasangan konstruk memiliki nilai di bawah 0,85 dan 0,90. Nilai HTMT tertinggi adalah NC - JP = 0,828, diikuti AC - JP = 0,815 dan OCB - JP = 0,808. Karena seluruh nilai masih berada di bawah batas 0,85, maka validitas diskriminan berdasarkan HTMT dapat dinyatakan terpenuhi.
Secara keseluruhan, outer model dalam penelitian ini dapat dinyatakan layak. Indikator-indikator konstruk memiliki reliabilitas dan validitas yang baik. Satu indikator, yaitu OCB6, perlu diberi catatan karena loading-nya berada di bawah 0,70, tetapi indikator tersebut masih dapat dipertahankan karena nilai reliabilitas dan AVE konstruk OCB tetap memenuhi kriteria.
path_coefficient <- pls_model$path_coefs
kable(
round(path_coefficient, 3),
caption = "Path Coefficient"
) %>%
kable_styling(full_width = FALSE)| AC | CC | NC | OCB | JP | |
|---|---|---|---|---|---|
| AC | 0.000 | 0.000 | 0.000 | 0.000 | 0 |
| CC | 0.000 | 0.000 | 0.000 | 0.000 | 0 |
| NC | 0.000 | 0.000 | 0.000 | 0.000 | 0 |
| OCB | 0.046 | 0.278 | 0.424 | 0.000 | 0 |
| JP | 0.350 | 0.185 | 0.153 | 0.328 | 0 |
## $OCB
## Estimate Std. Error t value Pr(>|t|)
## Intercept -1.741330e-16 0.04035662 -4.314857e-15 1.000000e+00
## AC 4.634645e-02 0.05889748 7.869003e-01 4.319016e-01
## CC 2.781665e-01 0.05612918 4.955827e+00 1.150192e-06
## NC 4.242437e-01 0.06209484 6.832189e+00 4.006379e-11
##
## $JP
## Estimate Std. Error t value Pr(>|t|)
## Intercept 1.750744e-17 0.02836384 6.172449e-16 1.000000e+00
## AC 3.495422e-01 0.04143350 8.436222e+00 1.031920e-15
## CC 1.853758e-01 0.04088239 4.534366e+00 8.086858e-06
## NC 1.530503e-01 0.04660926 3.283690e+00 1.134098e-03
## OCB 3.282293e-01 0.03857280 8.509347e+00 6.159504e-16
r_square <- pls_model$inner_summary %>%
as.data.frame()
r_square$Construct <- rownames(r_square)
r_square <- r_square %>%
select(Construct, Type, R2)
kable(
r_square,
digits = 3,
caption = "R-Square"
) %>%
kable_styling(full_width = FALSE)| Construct | Type | R2 | |
|---|---|---|---|
| AC | AC | Exogenous | 0.000 |
| CC | CC | Exogenous | 0.000 |
| NC | NC | Exogenous | 0.000 |
| OCB | OCB | Endogenous | 0.459 |
| JP | JP | Endogenous | 0.734 |
total_effects <- pls_model$effects
kable(
total_effects,
digits = 3,
caption = "Total Effects"
) %>%
kable_styling(full_width = FALSE)| relationships | direct | indirect | total |
|---|---|---|---|
| AC -> CC | 0.000 | 0.000 | 0.000 |
| AC -> NC | 0.000 | 0.000 | 0.000 |
| AC -> OCB | 0.046 | 0.000 | 0.046 |
| AC -> JP | 0.350 | 0.015 | 0.365 |
| CC -> NC | 0.000 | 0.000 | 0.000 |
| CC -> OCB | 0.278 | 0.000 | 0.278 |
| CC -> JP | 0.185 | 0.091 | 0.277 |
| NC -> OCB | 0.424 | 0.000 | 0.424 |
| NC -> JP | 0.153 | 0.139 | 0.292 |
| OCB -> JP | 0.328 | 0.000 | 0.328 |
bootstrap_paths <- pls_boot$boot$paths
kable(
bootstrap_paths,
digits = 3,
caption = "Bootstrapping Path Coefficient"
) %>%
kable_styling(full_width = FALSE)| Original | Mean.Boot | Std.Error | perc.025 | perc.975 | |
|---|---|---|---|---|---|
| AC -> OCB | 0.046 | 0.049 | 0.069 | -0.086 | 0.184 |
| AC -> JP | 0.350 | 0.349 | 0.057 | 0.237 | 0.456 |
| CC -> OCB | 0.278 | 0.279 | 0.069 | 0.141 | 0.410 |
| CC -> JP | 0.185 | 0.186 | 0.050 | 0.091 | 0.286 |
| NC -> OCB | 0.424 | 0.424 | 0.070 | 0.287 | 0.559 |
| NC -> JP | 0.153 | 0.148 | 0.059 | 0.033 | 0.263 |
| OCB -> JP | 0.328 | 0.332 | 0.043 | 0.249 | 0.418 |
direct_effect_decision <- bootstrap_paths %>%
as.data.frame()
direct_effect_decision$Relationship <- rownames(direct_effect_decision)
direct_effect_decision <- direct_effect_decision %>%
select(Relationship, everything())
if ("perc.025" %in% names(direct_effect_decision) & "perc.975" %in% names(direct_effect_decision)) {
direct_effect_decision <- direct_effect_decision %>%
mutate(
Decision = ifelse(
perc.025 > 0 | perc.975 < 0,
"Signifikan",
"Tidak Signifikan"
)
)
}
kable(
direct_effect_decision,
digits = 3,
caption = "Keputusan Hipotesis Direct Effect"
) %>%
kable_styling(full_width = FALSE)| Relationship | Original | Mean.Boot | Std.Error | perc.025 | perc.975 | Decision | |
|---|---|---|---|---|---|---|---|
| AC -> OCB | AC -> OCB | 0.046 | 0.049 | 0.069 | -0.086 | 0.184 | Tidak Signifikan |
| AC -> JP | AC -> JP | 0.350 | 0.349 | 0.057 | 0.237 | 0.456 | Signifikan |
| CC -> OCB | CC -> OCB | 0.278 | 0.279 | 0.069 | 0.141 | 0.410 | Signifikan |
| CC -> JP | CC -> JP | 0.185 | 0.186 | 0.050 | 0.091 | 0.286 | Signifikan |
| NC -> OCB | NC -> OCB | 0.424 | 0.424 | 0.070 | 0.287 | 0.559 | Signifikan |
| NC -> JP | NC -> JP | 0.153 | 0.148 | 0.059 | 0.033 | 0.263 | Signifikan |
| OCB -> JP | OCB -> JP | 0.328 | 0.332 | 0.043 | 0.249 | 0.418 | Signifikan |
latent_scores_df <- as.data.frame(pls_model$scores)
calculate_vif <- function(model_data, dependent, predictors) {
vif_values <- sapply(predictors, function(predictor) {
other_predictors <- setdiff(predictors, predictor)
if (length(other_predictors) == 0) {
return(1)
}
vif_formula <- as.formula(
paste(predictor, "~", paste(other_predictors, collapse = " + "))
)
r2 <- summary(lm(vif_formula, data = model_data))$r.squared
1 / (1 - r2)
})
data.frame(
Dependent = dependent,
Predictor = predictors,
VIF = as.numeric(vif_values)
)
}
vif_ocb <- calculate_vif(
model_data = latent_scores_df,
dependent = "OCB",
predictors = c("AC", "CC", "NC")
)
vif_jp <- calculate_vif(
model_data = latent_scores_df,
dependent = "JP",
predictors = c("AC", "CC", "NC", "OCB")
)
inner_vif <- bind_rows(vif_ocb, vif_jp)
kable(
inner_vif,
digits = 3,
caption = "Inner VIF"
) %>%
kable_styling(full_width = FALSE)| Dependent | Predictor | VIF |
|---|---|---|
| OCB | AC | 2.130 |
| OCB | CC | 1.934 |
| OCB | NC | 2.367 |
| JP | AC | 2.134 |
| JP | CC | 2.078 |
| JP | NC | 2.700 |
| JP | OCB | 1.849 |
inner_vif_decision <- inner_vif %>%
mutate(
Decision_3_3 = ifelse(VIF < 3.3, "Memenuhi", "Tidak Memenuhi"),
Decision_5 = ifelse(VIF < 5, "Memenuhi", "Tidak Memenuhi")
)
kable(
inner_vif_decision,
digits = 3,
caption = "Keputusan Inner VIF"
) %>%
kable_styling(full_width = FALSE)| Dependent | Predictor | VIF | Decision_3_3 | Decision_5 |
|---|---|---|---|---|
| OCB | AC | 2.130 | Memenuhi | Memenuhi |
| OCB | CC | 1.934 | Memenuhi | Memenuhi |
| OCB | NC | 2.367 | Memenuhi | Memenuhi |
| JP | AC | 2.134 | Memenuhi | Memenuhi |
| JP | CC | 2.078 | Memenuhi | Memenuhi |
| JP | NC | 2.700 | Memenuhi | Memenuhi |
| JP | OCB | 1.849 | Memenuhi | Memenuhi |
Evaluasi inner model dilakukan untuk menilai hubungan struktural antar konstruk laten. Model struktural dalam penelitian ini menguji pengaruh Affective Commitment, Continuance Commitment, dan Normative Commitment terhadap Organizational Citizenship Behavior dan Job Performance, serta pengaruh Organizational Citizenship Behavior terhadap Job Performance.
Berdasarkan nilai path coefficient, pengaruh Affective Commitment terhadap OCB memiliki koefisien sebesar 0,046. Nilai ini positif, tetapi sangat kecil. Hasil bootstrapping menunjukkan interval kepercayaan -0,086 sampai 0,184, sehingga interval tersebut melewati nol. Dengan demikian, pengaruh Affective Commitment terhadap OCB dinyatakan tidak signifikan. Oleh karena itu, H1 tidak didukung.
Pengaruh Continuance Commitment terhadap OCB memiliki koefisien sebesar 0,278. Hasil bootstrapping menunjukkan interval kepercayaan 0,141 sampai 0,410, sehingga tidak melewati nol. Dengan demikian, Continuance Commitment berpengaruh positif dan signifikan terhadap OCB. Oleh karena itu, H2 didukung.
Pengaruh Normative Commitment terhadap OCB memiliki koefisien sebesar 0,424. Nilai ini merupakan pengaruh terbesar terhadap OCB dibandingkan AC dan CC. Hasil bootstrapping menunjukkan interval kepercayaan 0,287 sampai 0,559, sehingga pengaruh tersebut signifikan. Dengan demikian, Normative Commitment berpengaruh positif dan signifikan terhadap OCB. Oleh karena itu, H3 didukung.
Pengaruh OCB terhadap Job Performance memiliki koefisien sebesar 0,328. Hasil bootstrapping menunjukkan interval kepercayaan 0,249 sampai 0,418, sehingga pengaruh tersebut signifikan. Artinya, semakin tinggi OCB, semakin tinggi pula Job Performance. Dengan demikian, H4 didukung.
Pengaruh Affective Commitment terhadap Job Performance memiliki koefisien sebesar 0,350. Hasil bootstrapping menunjukkan interval kepercayaan 0,237 sampai 0,456, sehingga pengaruh tersebut signifikan. Nilai ini merupakan pengaruh langsung terbesar terhadap Job Performance. Dengan demikian, H5 didukung.
Pengaruh Continuance Commitment terhadap Job Performance memiliki koefisien sebesar 0,185. Hasil bootstrapping menunjukkan interval kepercayaan 0,091 sampai 0,286, sehingga pengaruh tersebut signifikan. Dengan demikian, H6 didukung.
Pengaruh Normative Commitment terhadap Job Performance memiliki koefisien sebesar 0,153. Hasil bootstrapping menunjukkan interval kepercayaan 0,033 sampai 0,263, sehingga pengaruh tersebut signifikan. Dengan demikian, H7 didukung.
Nilai R-Square menunjukkan bahwa konstruk OCB memiliki R² sebesar 0,459. Artinya, Affective Commitment, Continuance Commitment, dan Normative Commitment secara bersama-sama mampu menjelaskan 45,9% variasi OCB. Sementara itu, konstruk Job Performance memiliki R² sebesar 0,734, yang berarti AC, CC, NC, dan OCB secara bersama-sama mampu menjelaskan 73,4% variasi Job Performance. Nilai ini menunjukkan bahwa model memiliki kemampuan penjelasan yang kuat terhadap Job Performance.
Hasil Inner VIF menunjukkan bahwa seluruh nilai VIF berada di bawah 3,3 dan 5. Nilai VIF tertinggi adalah 2,700 pada jalur NC terhadap JP. Karena seluruh nilai VIF masih berada di bawah batas kritis, maka tidak terdapat masalah multikolinearitas serius pada inner model.
Secara keseluruhan, inner model menunjukkan hasil yang baik. Sebagian besar hubungan langsung antar konstruk signifikan, kecuali hubungan Affective Commitment terhadap OCB. Temuan ini menunjukkan bahwa Affective Commitment lebih berperan langsung dalam meningkatkan Job Performance, sedangkan Continuance Commitment dan Normative Commitment berperan dalam meningkatkan Job Performance baik secara langsung maupun melalui OCB.
paths <- pls_model$path_coefs
direct_ac_jp <- paths["JP", "AC"]
direct_cc_jp <- paths["JP", "CC"]
direct_nc_jp <- paths["JP", "NC"]
ac_ocb <- paths["OCB", "AC"]
cc_ocb <- paths["OCB", "CC"]
nc_ocb <- paths["OCB", "NC"]
ocb_jp <- paths["JP", "OCB"]
indirect_ac <- ac_ocb * ocb_jp
indirect_cc <- cc_ocb * ocb_jp
indirect_nc <- nc_ocb * ocb_jp
indirect_effects <- data.frame(
Relationship = c(
"AC -> OCB -> JP",
"CC -> OCB -> JP",
"NC -> OCB -> JP"
),
Path_A = c(ac_ocb, cc_ocb, nc_ocb),
Path_B = rep(ocb_jp, 3),
Indirect_Effect = c(indirect_ac, indirect_cc, indirect_nc)
)
kable(
indirect_effects,
digits = 3,
caption = "Indirect Effect melalui OCB"
) %>%
kable_styling(full_width = FALSE)| Relationship | Path_A | Path_B | Indirect_Effect |
|---|---|---|---|
| AC -> OCB -> JP | 0.046 | 0.328 | 0.015 |
| CC -> OCB -> JP | 0.278 | 0.328 | 0.091 |
| NC -> OCB -> JP | 0.424 | 0.328 | 0.139 |
total_ac <- direct_ac_jp + indirect_ac
total_cc <- direct_cc_jp + indirect_cc
total_nc <- direct_nc_jp + indirect_nc
mediation_effects <- data.frame(
Relationship = c(
"AC -> OCB -> JP",
"CC -> OCB -> JP",
"NC -> OCB -> JP"
),
Direct_Effect = c(direct_ac_jp, direct_cc_jp, direct_nc_jp),
Indirect_Effect = c(indirect_ac, indirect_cc, indirect_nc),
Total_Effect = c(total_ac, total_cc, total_nc)
)
kable(
mediation_effects,
digits = 3,
caption = "Direct, Indirect, dan Total Effect"
) %>%
kable_styling(full_width = FALSE)| Relationship | Direct_Effect | Indirect_Effect | Total_Effect |
|---|---|---|---|
| AC -> OCB -> JP | 0.350 | 0.015 | 0.365 |
| CC -> OCB -> JP | 0.185 | 0.091 | 0.277 |
| NC -> OCB -> JP | 0.153 | 0.139 | 0.292 |
vaf_table <- mediation_effects %>%
mutate(
VAF = Indirect_Effect / Total_Effect,
VAF_Percentage = VAF * 100
)
kable(
vaf_table,
digits = 3,
caption = "Variance Accounted For"
) %>%
kable_styling(full_width = FALSE)| Relationship | Direct_Effect | Indirect_Effect | Total_Effect | VAF | VAF_Percentage |
|---|---|---|---|---|---|
| AC -> OCB -> JP | 0.350 | 0.015 | 0.365 | 0.042 | 4.171 |
| CC -> OCB -> JP | 0.185 | 0.091 | 0.277 | 0.330 | 32.999 |
| NC -> OCB -> JP | 0.153 | 0.139 | 0.292 | 0.476 | 47.639 |
mediation_type_vaf <- vaf_table %>%
mutate(
Mediation_Type_VAF = case_when(
abs(VAF) < 0.20 ~ "Tidak ada mediasi",
abs(VAF) >= 0.20 & abs(VAF) <= 0.80 ~ "Mediasi parsial",
abs(VAF) > 0.80 ~ "Mediasi penuh"
)
) %>%
select(
Relationship,
Direct_Effect,
Indirect_Effect,
Total_Effect,
VAF,
VAF_Percentage,
Mediation_Type_VAF
)
kable(
mediation_type_vaf,
digits = 3,
caption = "Keputusan Tipe Mediasi Berdasarkan VAF"
) %>%
kable_styling(full_width = FALSE)| Relationship | Direct_Effect | Indirect_Effect | Total_Effect | VAF | VAF_Percentage | Mediation_Type_VAF |
|---|---|---|---|---|---|---|
| AC -> OCB -> JP | 0.350 | 0.015 | 0.365 | 0.042 | 4.171 | Tidak ada mediasi |
| CC -> OCB -> JP | 0.185 | 0.091 | 0.277 | 0.330 | 32.999 | Mediasi parsial |
| NC -> OCB -> JP | 0.153 | 0.139 | 0.292 | 0.476 | 47.639 | Mediasi parsial |
bootstrap_paths <- pls_boot$boot$paths %>%
as.data.frame()
bootstrap_paths$Relationship <- rownames(bootstrap_paths)
bootstrap_paths <- bootstrap_paths %>%
select(Relationship, everything())
bootstrap_paths## Relationship Original Mean.Boot Std.Error perc.025 perc.975
## AC -> OCB AC -> OCB 0.04634645 0.04872844 0.06871671 -0.08633976 0.1841430
## AC -> JP AC -> JP 0.34954218 0.34930348 0.05654340 0.23691757 0.4564622
## CC -> OCB CC -> OCB 0.27816651 0.27897459 0.06896379 0.14112892 0.4101935
## CC -> JP CC -> JP 0.18537576 0.18599615 0.04982557 0.09123003 0.2864905
## NC -> OCB NC -> OCB 0.42424365 0.42422086 0.06999271 0.28712488 0.5589777
## NC -> JP NC -> JP 0.15305033 0.14803284 0.05934324 0.03263174 0.2632675
## OCB -> JP OCB -> JP 0.32822935 0.33183468 0.04297742 0.24905109 0.4181433
direct_effect_decision_mediation <- direct_effect_decision %>%
select(Relationship, Decision)
mediation_path_summary <- data.frame(
Mediation = c(
"AC -> OCB -> JP",
"CC -> OCB -> JP",
"NC -> OCB -> JP"
),
Path_A = c("AC -> OCB", "CC -> OCB", "NC -> OCB"),
Path_B = c("OCB -> JP", "OCB -> JP", "OCB -> JP"),
Direct_Path = c("AC -> JP", "CC -> JP", "NC -> JP")
)
mediation_path_summary <- mediation_path_summary %>%
left_join(
direct_effect_decision_mediation,
by = c("Path_A" = "Relationship")
) %>%
rename(Path_A_Decision = Decision) %>%
left_join(
direct_effect_decision_mediation,
by = c("Path_B" = "Relationship")
) %>%
rename(Path_B_Decision = Decision) %>%
left_join(
direct_effect_decision_mediation,
by = c("Direct_Path" = "Relationship")
) %>%
rename(Direct_Path_Decision = Decision)
kable(
mediation_path_summary,
caption = "Ringkasan Jalur Mediasi"
) %>%
kable_styling(full_width = FALSE)| Mediation | Path_A | Path_B | Direct_Path | Path_A_Decision | Path_B_Decision | Direct_Path_Decision |
|---|---|---|---|---|---|---|
| AC -> OCB -> JP | AC -> OCB | OCB -> JP | AC -> JP | Tidak Signifikan | Signifikan | Signifikan |
| CC -> OCB -> JP | CC -> OCB | OCB -> JP | CC -> JP | Signifikan | Signifikan | Signifikan |
| NC -> OCB -> JP | NC -> OCB | OCB -> JP | NC -> JP | Signifikan | Signifikan | Signifikan |
mediation_decision <- mediation_path_summary %>%
left_join(
mediation_type_vaf %>%
select(Relationship, Mediation_Type_VAF),
by = c("Mediation" = "Relationship")
) %>%
mutate(
Mediation_Decision = case_when(
Path_A_Decision == "Signifikan" &
Path_B_Decision == "Signifikan" &
Direct_Path_Decision == "Signifikan" ~ "Mediasi parsial",
Path_A_Decision == "Signifikan" &
Path_B_Decision == "Signifikan" &
Direct_Path_Decision == "Tidak Signifikan" ~ "Mediasi penuh",
TRUE ~ "Tidak ada mediasi"
)
)
kable(
mediation_decision,
caption = "Keputusan Mediasi"
) %>%
kable_styling(full_width = FALSE)| Mediation | Path_A | Path_B | Direct_Path | Path_A_Decision | Path_B_Decision | Direct_Path_Decision | Mediation_Type_VAF | Mediation_Decision |
|---|---|---|---|---|---|---|---|---|
| AC -> OCB -> JP | AC -> OCB | OCB -> JP | AC -> JP | Tidak Signifikan | Signifikan | Signifikan | Tidak ada mediasi | Tidak ada mediasi |
| CC -> OCB -> JP | CC -> OCB | OCB -> JP | CC -> JP | Signifikan | Signifikan | Signifikan | Mediasi parsial | Mediasi parsial |
| NC -> OCB -> JP | NC -> OCB | OCB -> JP | NC -> JP | Signifikan | Signifikan | Signifikan | Mediasi parsial | Mediasi parsial |
Analisis mediasi dilakukan untuk melihat apakah Organizational Citizenship Behavior berperan sebagai mediator dalam hubungan antara Affective Commitment, Continuance Commitment, dan Normative Commitment terhadap Job Performance.
Pada jalur AC → OCB → JP, indirect effect yang diperoleh adalah 0,015. Nilai direct effect AC terhadap JP adalah 0,350, sedangkan total effect adalah 0,365. Nilai VAF sebesar 0,042 atau 4,171%. Karena nilai VAF berada di bawah 20% dan jalur AC terhadap OCB tidak signifikan, maka OCB tidak memediasi pengaruh Affective Commitment terhadap Job Performance. Dengan demikian, H8 tidak didukung.
Pada jalur CC → OCB → JP, indirect effect yang diperoleh adalah 0,091. Nilai direct effect CC terhadap JP adalah 0,185, sedangkan total effect adalah 0,277. Nilai VAF sebesar 0,330 atau 32,999%. Karena nilai VAF berada pada rentang 20% sampai 80%, serta jalur CC → OCB, OCB → JP, dan CC → JP sama-sama signifikan, maka OCB berperan sebagai mediator parsial dalam hubungan antara Continuance Commitment dan Job Performance. Dengan demikian, H9 didukung.
Pada jalur NC → OCB → JP, indirect effect yang diperoleh adalah 0,139. Nilai direct effect NC terhadap JP adalah 0,153, sedangkan total effect adalah 0,292. Nilai VAF sebesar 0,476 atau 47,639%. Karena nilai VAF berada pada rentang 20% sampai 80%, serta jalur NC → OCB, OCB → JP, dan NC → JP sama-sama signifikan, maka OCB berperan sebagai mediator parsial dalam hubungan antara Normative Commitment dan Job Performance. Dengan demikian, H10 didukung.
Hasil ini menunjukkan bahwa OCB tidak menjadi mekanisme utama yang menjelaskan hubungan Affective Commitment terhadap Job Performance. Affective Commitment lebih dominan memengaruhi Job Performance secara langsung. Sebaliknya, pada Continuance Commitment dan Normative Commitment, OCB memiliki peran mediasi parsial. Artinya, CC dan NC tidak hanya berpengaruh langsung terhadap Job Performance, tetapi juga dapat meningkatkan Job Performance melalui peningkatan Organizational Citizenship Behavior.
Dari ketiga jalur mediasi, pengaruh mediasi terbesar terdapat pada jalur NC → OCB → JP dengan indirect effect sebesar 0,139 dan VAF sebesar 47,639%. Hal ini menunjukkan bahwa Normative Commitment memiliki kontribusi paling kuat dalam mendorong OCB, yang kemudian berdampak pada peningkatan Job Performance.
Hasil penelitian menunjukkan bahwa model pengukuran telah memenuhi kriteria reliabilitas dan validitas, sehingga seluruh konstruk dapat digunakan untuk mengevaluasi hubungan struktural. Dengan terpenuhinya outer model, pembahasan utama dapat difokuskan pada hubungan antara organizational commitment, organizational citizenship behavior, dan job performance.
Temuan pertama menunjukkan bahwa Affective Commitment tidak berpengaruh signifikan terhadap Organizational Citizenship Behavior, tetapi berpengaruh signifikan terhadap Job Performance. Hal ini menunjukkan bahwa keterikatan emosional karyawan terhadap organisasi lebih banyak tercermin dalam pelaksanaan tugas utama dibandingkan dalam perilaku ekstra-peran. Dengan kata lain, karyawan yang merasa memiliki ikatan emosional dengan organisasi cenderung menunjukkan kinerja yang lebih baik, tetapi tidak selalu menunjukkan perilaku sukarela di luar tugas formalnya.
Temuan kedua menunjukkan bahwa Continuance Commitment berpengaruh positif terhadap Organizational Citizenship Behavior dan Job Performance. Hal ini mengindikasikan bahwa karyawan yang memiliki pertimbangan kuat untuk tetap berada di organisasi juga dapat menunjukkan perilaku kerja positif. Meskipun continuance commitment sering dikaitkan dengan pertimbangan biaya atau konsekuensi apabila meninggalkan organisasi, dalam penelitian ini komitmen tersebut tetap berkontribusi terhadap peningkatan OCB dan kinerja.
Temuan ketiga menunjukkan bahwa Normative Commitment merupakan prediktor paling kuat terhadap Organizational Citizenship Behavior. Hasil ini masuk akal karena normative commitment berkaitan dengan rasa kewajiban moral untuk tetap berkontribusi kepada organisasi. Karyawan yang merasa memiliki tanggung jawab moral terhadap organisasi cenderung lebih bersedia melakukan perilaku sukarela, seperti membantu rekan kerja, menjaga hubungan kerja yang baik, dan mendukung tujuan organisasi.
Organizational Citizenship Behavior terbukti berpengaruh positif terhadap Job Performance. Temuan ini menunjukkan bahwa perilaku sukarela di luar tugas formal dapat mendukung peningkatan kinerja pekerjaan. Karyawan yang memiliki OCB tinggi tidak hanya menjalankan tugas utama, tetapi juga berkontribusi pada lingkungan kerja yang lebih kooperatif dan produktif. Kondisi tersebut dapat membantu meningkatkan efektivitas kerja individu maupun organisasi.
Hasil mediasi menunjukkan bahwa OCB tidak memediasi pengaruh Affective Commitment terhadap Job Performance. Hal ini berarti pengaruh Affective Commitment terhadap Job Performance lebih bersifat langsung. Sebaliknya, OCB memediasi secara parsial pengaruh Continuance Commitment dan Normative Commitment terhadap Job Performance. Artinya, kedua dimensi komitmen tersebut dapat meningkatkan kinerja baik secara langsung maupun melalui peningkatan perilaku OCB.
Secara keseluruhan, hasil penelitian menunjukkan bahwa tidak semua dimensi organizational commitment bekerja melalui mekanisme yang sama. Affective Commitment lebih berperan langsung terhadap Job Performance, sedangkan Continuance Commitment dan Normative Commitment bekerja melalui dua jalur, yaitu jalur langsung terhadap Job Performance dan jalur tidak langsung melalui OCB.
Hasil penelitian ini memberikan implikasi bahwa organisasi perlu memperhatikan jenis komitmen yang ingin dibangun pada karyawan. Untuk meningkatkan Job Performance secara langsung, organisasi dapat memperkuat Affective Commitment melalui lingkungan kerja yang mendukung, hubungan kerja yang positif, rasa memiliki, dan keterlibatan karyawan dalam organisasi.
Selain itu, karena Normative Commitment terbukti menjadi prediktor paling kuat terhadap OCB, organisasi perlu membangun budaya kerja yang menumbuhkan rasa tanggung jawab moral dan kesadaran untuk berkontribusi. Nilai-nilai organisasi, kepemimpinan yang adil, serta norma kerja yang positif dapat membantu meningkatkan perilaku OCB.
Organisasi juga perlu mendorong OCB karena perilaku ini terbukti berkontribusi terhadap Job Performance. Upaya tersebut dapat dilakukan dengan menciptakan lingkungan kerja kolaboratif, memberikan apresiasi terhadap kontribusi sukarela, serta membangun budaya saling membantu antar karyawan.
Berdasarkan hasil analisis menggunakan metode Partial Least Squares Structural Equation Modeling (PLS-SEM), model penelitian yang digunakan dalam penelitian ini telah memenuhi kriteria reliabilitas dan validitas. Seluruh konstruk memiliki nilai Cronbach’s Alpha, Composite Reliability, dan Average Variance Extracted (AVE) yang memenuhi batas kriteria yang disarankan. Selain itu, validitas diskriminan berdasarkan Fornell-Larcker Criterion dan HTMT juga menunjukkan hasil yang baik, sehingga konstruk dalam model dapat digunakan untuk mengevaluasi hubungan struktural antar variabel.
Hasil analisis struktural menunjukkan bahwa Affective Commitment tidak berpengaruh signifikan terhadap Organizational Citizenship Behavior. Sebaliknya, Continuance Commitment dan Normative Commitment terbukti berpengaruh positif dan signifikan terhadap Organizational Citizenship Behavior. Temuan ini menunjukkan bahwa rasa kewajiban moral dan pertimbangan untuk tetap berada dalam organisasi lebih berperan dalam mendorong perilaku sukarela karyawan dibandingkan keterikatan emosional semata.
Organizational Citizenship Behavior terbukti berpengaruh positif dan signifikan terhadap Job Performance. Selain itu, Affective Commitment, Continuance Commitment, dan Normative Commitment juga memiliki pengaruh positif dan signifikan terhadap Job Performance. Hasil ini menunjukkan bahwa komitmen organisasi memiliki kontribusi penting terhadap peningkatan kinerja karyawan, baik secara langsung maupun melalui perilaku Organizational Citizenship Behavior.
Hasil analisis mediasi menunjukkan bahwa Organizational Citizenship Behavior tidak memediasi pengaruh Affective Commitment terhadap Job Performance. Namun, Organizational Citizenship Behavior terbukti memediasi secara parsial pengaruh Continuance Commitment dan Normative Commitment terhadap Job Performance. Dengan demikian, peningkatan Job Performance tidak hanya dipengaruhi oleh komitmen organisasi secara langsung, tetapi juga melalui peningkatan perilaku Organizational Citizenship Behavior, terutama pada dimensi Continuance Commitment dan Normative Commitment.
Secara keseluruhan, penelitian ini menunjukkan bahwa Organizational Citizenship Behavior memiliki peran penting dalam hubungan antara organizational commitment dan job performance. Selain itu, hasil penelitian juga menunjukkan bahwa masing-masing dimensi organizational commitment memiliki mekanisme pengaruh yang berbeda terhadap Organizational Citizenship Behavior dan Job Performance.