install.packages("lavaan")
install.packages("semPlot")
install.packages("readxl")
install.packages("psych")
install.packages("MVN")
install.packages("car")## Dimensi data: 876 baris x 23 kolom
## tibble [876 × 23] (S3: tbl_df/tbl/data.frame)
## $ TSC1: num [1:876] 4 4 4 4 4 4 1 1 2 2 ...
## $ TSC2: num [1:876] 4 4 4 4 5 5 4 4 2 2 ...
## $ TSC3: num [1:876] 4 4 5 5 3 3 4 4 2 2 ...
## $ TSC4: num [1:876] 4 4 4 4 4 4 4 4 2 2 ...
## $ TSC5: num [1:876] 4 4 5 5 4 4 4 4 2 2 ...
## $ TE1 : num [1:876] 4 4 5 5 4 4 3 3 1 1 ...
## $ TE2 : num [1:876] 4 4 4 4 4 4 3 3 2 2 ...
## $ TE3 : num [1:876] 4 4 4 4 4 4 3 3 1 1 ...
## $ TE4 : num [1:876] 4 4 5 5 4 4 3 3 1 1 ...
## $ TE5 : num [1:876] 4 4 4 4 4 4 3 3 1 1 ...
## $ EE1 : num [1:876] 4 4 4 4 4 4 4 4 1 1 ...
## $ EE2 : num [1:876] 4 4 5 5 4 4 4 4 1 1 ...
## $ EE3 : num [1:876] 4 4 5 5 4 4 4 4 1 1 ...
## $ EE4 : num [1:876] 4 4 4 4 4 4 4 4 1 1 ...
## $ EE5 : num [1:876] 4 4 5 5 4 4 3 3 1 1 ...
## $ DE1 : num [1:876] 4 4 5 5 4 4 1 1 3 3 ...
## $ DE2 : num [1:876] 4 4 5 5 4 4 1 1 2 2 ...
## $ DE3 : num [1:876] 4 4 5 5 4 4 4 4 2 2 ...
## $ RPA1: num [1:876] 4 4 5 5 4 4 3 3 2 2 ...
## $ RPA2: num [1:876] 4 4 4 4 4 4 3 3 1 2 ...
## $ RPA3: num [1:876] 4 4 5 5 4 4 3 4 2 1 ...
## $ RPA4: num [1:876] 4 4 4 4 4 4 4 3 2 2 ...
## $ RPA5: num [1:876] 4 4 5 5 4 4 4 4 1 1 ...
## TSC1 TSC2 TSC3 TSC4
## Min. :1.000 Min. :2.000 Min. :2.000 Min. :2.000
## 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:3.000
## Median :4.000 Median :4.000 Median :4.000 Median :4.000
## Mean :3.653 Mean :3.809 Mean :3.732 Mean :3.709
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
## TSC5 TE1 TE2 TE3
## Min. :2.000 Min. :1.000 Min. :2.000 Min. :1.000
## 1st Qu.:3.000 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:4.000
## Median :4.000 Median :4.000 Median :4.000 Median :4.000
## Mean :3.822 Mean :4.061 Mean :4.043 Mean :4.121
## 3rd Qu.:4.000 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
## TE4 TE5 EE1 EE2
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:4.000 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:3.000
## Median :4.000 Median :4.000 Median :4.000 Median :4.000
## Mean :4.105 Mean :3.902 Mean :3.812 Mean :3.727
## 3rd Qu.:5.000 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
## EE3 EE4 EE5 DE1
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:4.000
## Median :4.000 Median :4.000 Median :4.000 Median :4.000
## Mean :3.878 Mean :3.687 Mean :3.987 Mean :3.925
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:5.000 3rd Qu.:4.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
## DE2 DE3 RPA1 RPA2
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:4.000
## Median :4.000 Median :4.000 Median :4.000 Median :4.000
## Mean :3.596 Mean :3.817 Mean :3.933 Mean :3.941
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:5.000 3rd Qu.:4.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
## RPA3 RPA4 RPA5
## Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:3.000
## Median :4.000 Median :4.000 Median :4.000
## Mean :3.884 Mean :3.869 Mean :3.842
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :5.000 Max. :5.000 Max. :5.000
Dipilih 23 indikator yang merepresentasikan 5 konstruk laten:
indikator <- data_sem[, c(
"TSC1","TSC2","TSC3","TSC4","TSC5", # Teaching Self-Confidence
"TE1","TE2","TE3","TE4","TE5", # Teaching Enjoyment
"EE1","EE2","EE3","EE4","EE5", # Emotional Exhaustion
"DE1","DE2","DE3", # Depersonalization
"RPA1","RPA2","RPA3","RPA4","RPA5" # Reduced Personal Accomplishment
)]
cat("Jumlah indikator terpilih:", ncol(indikator), "\n")## Jumlah indikator terpilih: 23
## Jumlah responden: 876
Normalitas multivariat diuji menggunakan Mardia’s Test yang mencakup uji skewness dan kurtosis multivariat. SEM dengan estimator MLR (Maximum Likelihood Robust) cukup toleran terhadap pelanggaran normalitas, namun uji ini tetap penting dilakukan.
set.seed(123)
mvn_result <- tryCatch({
mvn(data = indikator, mvnTest = "mardia") # MVN >= 5.x
}, error = function(e) {
mvn(data = as.data.frame(indikator), mvn_test = "mardia") # MVN < 5.x
})
mv_norm <- if (!is.null(mvn_result$multivariateNormality)) {
mvn_result$multivariateNormality
} else {
mvn_result$multivariate_normality
}
print(mv_norm)## Test Statistic p.value Method MVN
## 1 Mardia Skewness 7517.654 <0.001 asymptotic ✗ Not normal
## 2 Mardia Kurtosis 37.429 <0.001 asymptotic ✗ Not normal
Uji Kaiser-Meyer-Olkin (KMO) mengukur kecukupan sampel untuk analisis faktor. Nilai MSA overall > 0.5 diperlukan agar analisis SEM dapat dilanjutkan.
kmo_result <- KMO(cor(indikator))
# Tampilkan Overall MSA
cat("Overall MSA:", round(kmo_result$MSA, 4), "\n\n")## Overall MSA: 0.9413
# Tampilkan MSA per indikator
msa_df <- data.frame(
Indikator = names(kmo_result$MSAi),
MSA = round(kmo_result$MSAi, 4)
)
print(msa_df)## Indikator MSA
## TSC1 TSC1 0.9579
## TSC2 TSC2 0.9600
## TSC3 TSC3 0.9481
## TSC4 TSC4 0.9441
## TSC5 TSC5 0.9607
## TE1 TE1 0.9348
## TE2 TE2 0.9551
## TE3 TE3 0.9388
## TE4 TE4 0.9352
## TE5 TE5 0.9627
## EE1 EE1 0.9544
## EE2 EE2 0.9381
## EE3 EE3 0.9513
## EE4 EE4 0.9374
## EE5 EE5 0.9737
## DE1 DE1 0.8729
## DE2 DE2 0.8645
## DE3 DE3 0.9189
## RPA1 RPA1 0.9124
## RPA2 RPA2 0.9098
## RPA3 RPA3 0.9499
## RPA4 RPA4 0.9442
## RPA5 RPA5 0.9588
Multikolinearitas antar variabel eksogen dideteksi menggunakan Variance Inflation Factor (VIF). Nilai VIF < 3.3 menandakan tidak ada multikolinearitas serius (threshold ketat untuk SEM).
vif_model <- lm(
RPA1 ~ TSC1 + TE1 + EE1 + DE1,
data = data_sem
)
vif_values <- vif(vif_model)
vif_df <- data.frame(
Prediktor = names(vif_values),
VIF = round(vif_values, 4),
Status = ifelse(vif_values < 3.3, "Aman", "Perlu Perhatian")
)
print(vif_df)## Prediktor VIF Status
## TSC1 TSC1 1.2305 Aman
## TE1 TE1 1.3438 Aman
## EE1 EE1 1.3333 Aman
## DE1 DE1 1.1604 Aman
Setiap konstruk laten diukur oleh indikator-indikatornya melalui model reflektif:
model_sem <- '
# MEASUREMENT MODEL (Model Pengukuran)
# TSC: Teaching Self-Confidence
TSC =~ TSC1 + TSC2 + TSC3 + TSC4 + TSC5
# TE: Teaching Enjoyment
TE =~ TE1 + TE2 + TE3 + TE4 + TE5
# EE: Emotional Exhaustion
EE =~ EE1 + EE2 + EE3 + EE4 + EE5
# DE: Depersonalization
DE =~ DE1 + DE2 + DE3
# RPA: Reduced Personal Accomplishment
RPA =~ RPA1 + RPA2 + RPA3 + RPA4 + RPA5
# STRUCTURAL MODEL (Model Struktural)
# TSC mempengaruhi TE (Teaching Enjoyment sebagai mediator)
TE ~ TSC
# Dimensi burnout dipengaruhi oleh TSC dan TE
EE ~ TSC + TE
DE ~ TSC + TE
RPA ~ TSC + TE
'
cat("Model SEM berhasil didefinisikan.\n")## Model SEM berhasil didefinisikan.
## Konstruk eksogen : TSC
## Konstruk endogen : TE, EE, DE, RPA
Model diestimasi menggunakan Maximum Likelihood Robust (MLR) yang tahan terhadap non-normalitas data.
fit_sem <- sem(
model = model_sem,
data = data_sem,
estimator = "MLR"
)
cat("Model berhasil diestimasi dengan estimator MLR.\n")## Model berhasil diestimasi dengan estimator MLR.
fit_idx <- fitMeasures(
fit_sem,
c("chisq","df","pvalue","cfi","tli","rmsea","rmsea.ci.lower","rmsea.ci.upper","srmr")
)
fit_df <- data.frame(
Indeks = c("Chi-Square (χ²)", "Degrees of Freedom", "p-value",
"CFI", "TLI", "RMSEA", "RMSEA CI Lower", "RMSEA CI Upper", "SRMR"),
Nilai = round(fit_idx, 4),
Kriteria = c("> 0.05 (p-value)", "—", "> 0.05",
"> 0.95 (good) / > 0.90 (acceptable)",
"> 0.95 (good) / > 0.90 (acceptable)",
"< 0.05 (good) / < 0.08 (acceptable)",
"—", "—",
"< 0.08"),
Status = c(
ifelse(fit_idx["pvalue"] > 0.05, "✓ Baik", "✗ Tidak Baik"),
"—",
ifelse(fit_idx["pvalue"] > 0.05, "✓ Baik", "✗ Tidak Baik"),
ifelse(fit_idx["cfi"] > 0.95, "✓ Baik",
ifelse(fit_idx["cfi"] > 0.90, "~ Acceptable", "✗ Kurang")),
ifelse(fit_idx["tli"] > 0.95, "✓ Baik",
ifelse(fit_idx["tli"] > 0.90, "~ Acceptable", "✗ Kurang")),
ifelse(fit_idx["rmsea"] < 0.05, "✓ Baik",
ifelse(fit_idx["rmsea"] < 0.08, "~ Acceptable", "✗ Kurang")),
"—", "—",
ifelse(fit_idx["srmr"] < 0.08, "✓ Baik", "✗ Kurang")
)
)
print(fit_df)## Indeks Nilai Kriteria
## chisq Chi-Square (χ²) 863.8841 > 0.05 (p-value)
## df Degrees of Freedom 220.0000 —
## pvalue p-value 0.0000 > 0.05
## cfi CFI 0.9367 > 0.95 (good) / > 0.90 (acceptable)
## tli TLI 0.9272 > 0.95 (good) / > 0.90 (acceptable)
## rmsea RMSEA 0.0578 < 0.05 (good) / < 0.08 (acceptable)
## rmsea.ci.lower RMSEA CI Lower 0.0538 —
## rmsea.ci.upper RMSEA CI Upper 0.0619 —
## srmr SRMR 0.0404 < 0.08
## Status
## chisq ✗ Tidak Baik
## df —
## pvalue ✗ Tidak Baik
## cfi ~ Acceptable
## tli ~ Acceptable
## rmsea ~ Acceptable
## rmsea.ci.lower —
## rmsea.ci.upper —
## srmr ✓ Baik
Panduan Interpretasi:
Indeks Kriteria Baik Kriteria Acceptable CFI > 0.95 > 0.90 TLI > 0.95 > 0.90 RMSEA < 0.05 < 0.08 SRMR < 0.05 < 0.08
# Ambil parameter estimasi
param_all <- parameterestimates(fit_sem, standardized = TRUE)
# Filter measurement model (=~)
loadings <- param_all[param_all$op == "=~",
c("lhs","rhs","est","se","z","pvalue","std.all")]
names(loadings) <- c("Konstruk","Indikator","Estimate","SE","z-value","p-value","Std. Loading")
loadings$`p-value` <- round(loadings$`p-value`, 4)
loadings$`Std. Loading` <- round(loadings$`Std. Loading`, 4)
loadings$Signifikan <- ifelse(loadings$`p-value` < 0.05, "✓ Ya", "✗ Tidak")
print(loadings)## Konstruk Indikator Estimate SE z.value p.value Std..Loading Signifikan
## 1 TSC TSC1 1.000 0.000 NA NA 0.660 <NA>
## 2 TSC TSC2 0.993 0.047 20.990 0 0.703 ✓ Ya
## 3 TSC TSC3 0.938 0.053 17.726 0 0.663 ✓ Ya
## 4 TSC TSC4 0.923 0.058 15.963 0 0.620 ✓ Ya
## 5 TSC TSC5 1.026 0.048 21.198 0 0.712 ✓ Ya
## 6 TE TE1 1.000 0.000 NA NA 0.770 <NA>
## 7 TE TE2 0.925 0.038 24.597 0 0.727 ✓ Ya
## 8 TE TE3 1.033 0.041 25.223 0 0.804 ✓ Ya
## 9 TE TE4 1.086 0.031 34.702 0 0.864 ✓ Ya
## 10 TE TE5 0.903 0.044 20.620 0 0.657 ✓ Ya
## 11 EE EE1 1.000 0.000 NA NA 0.748 <NA>
## 12 EE EE2 1.135 0.045 25.432 0 0.759 ✓ Ya
## 13 EE EE3 1.154 0.052 22.345 0 0.791 ✓ Ya
## 14 EE EE4 1.069 0.049 21.620 0 0.762 ✓ Ya
## 15 EE EE5 1.094 0.049 22.369 0 0.766 ✓ Ya
## 16 DE DE1 1.000 0.000 NA NA 0.670 <NA>
## 17 DE DE2 0.981 0.068 14.496 0 0.653 ✓ Ya
## 18 DE DE3 1.150 0.098 11.794 0 0.748 ✓ Ya
## 19 RPA RPA1 1.000 0.000 NA NA 0.839 <NA>
## 20 RPA RPA2 0.980 0.029 33.806 0 0.852 ✓ Ya
## 21 RPA RPA3 0.848 0.049 17.150 0 0.752 ✓ Ya
## 22 RPA RPA4 0.678 0.051 13.258 0 0.620 ✓ Ya
## 23 RPA RPA5 0.616 0.054 11.459 0 0.548 ✓ Ya
Interpretasi: Loading faktor standar ≥ 0.5 (idealnya ≥ 0.7) menunjukkan indikator valid mengukur konstruknya. Semua indikator signifikan (p < 0.05) menandakan kontribusi nyata terhadap konstruk laten.
# Filter structural model (~)
paths <- param_all[param_all$op == "~",
c("lhs","rhs","est","se","z","pvalue","std.all")]
names(paths) <- c("Endogen","Eksogen","Estimate","SE","z-value","p-value","Std. Beta")
paths$`p-value` <- round(paths$`p-value`, 4)
paths$`Std. Beta` <- round(paths$`Std. Beta`, 4)
paths$Hipotesis <- c("H1","H2","H3","H4","H5","H6","H7")
paths$Signifikan <- ifelse(paths$`p-value` < 0.05, "✓ Didukung", "✗ Ditolak")
print(paths[, c("Hipotesis","Eksogen","Endogen","Std. Beta","p-value","Signifikan")])## Hipotesis Eksogen Endogen Std..Beta p.value Signifikan
## 24 H1 TSC TE 0.662 0 ✓ Didukung
## 25 H2 TSC EE 0.544 0 ✓ Didukung
## 26 H3 TE EE 0.364 0 ✓ Didukung
## 27 H4 TSC DE 0.398 0 ✓ Didukung
## 28 H5 TE DE 0.290 0 ✓ Didukung
## 29 H6 TSC RPA 0.415 0 ✓ Didukung
## 30 H7 TE RPA 0.366 0 ✓ Didukung
Interpretasi koefisien jalur:
- Positif & signifikan: konstruk eksogen meningkatkan konstruk endogen
- Negatif & signifikan: konstruk eksogen menurunkan konstruk endogen
- Tidak signifikan (p > 0.05): tidak ada bukti cukup untuk mendukung hipotesis
rsq <- inspect(fit_sem, "r2")
rsq_df <- data.frame(
Konstruk = names(rsq),
R_Square = round(rsq, 4),
Persentase = paste0(round(rsq * 100, 2), "%"),
Kualitas = ifelse(rsq >= 0.67, "Tinggi (Substansial)",
ifelse(rsq >= 0.33, "Moderat",
ifelse(rsq >= 0.19, "Lemah", "Sangat Lemah")))
)
print(rsq_df)## Konstruk R_Square Persentase Kualitas
## TSC1 TSC1 0.4358 43.58% Moderat
## TSC2 TSC2 0.4939 49.39% Moderat
## TSC3 TSC3 0.4396 43.96% Moderat
## TSC4 TSC4 0.3842 38.42% Moderat
## TSC5 TSC5 0.5062 50.62% Moderat
## TE1 TE1 0.5937 59.37% Moderat
## TE2 TE2 0.5289 52.89% Moderat
## TE3 TE3 0.6459 64.59% Moderat
## TE4 TE4 0.7459 74.59% Tinggi (Substansial)
## TE5 TE5 0.4314 43.14% Moderat
## EE1 EE1 0.5593 55.93% Moderat
## EE2 EE2 0.5765 57.65% Moderat
## EE3 EE3 0.6255 62.55% Moderat
## EE4 EE4 0.5810 58.1% Moderat
## EE5 EE5 0.5865 58.65% Moderat
## DE1 DE1 0.4495 44.95% Moderat
## DE2 DE2 0.4261 42.61% Moderat
## DE3 DE3 0.5591 55.91% Moderat
## RPA1 RPA1 0.7031 70.31% Tinggi (Substansial)
## RPA2 RPA2 0.7252 72.52% Tinggi (Substansial)
## RPA3 RPA3 0.5655 56.55% Moderat
## RPA4 RPA4 0.3845 38.45% Moderat
## RPA5 RPA5 0.3007 30.07% Lemah
## TE TE 0.4379 43.79% Moderat
## EE EE 0.6916 69.16% Tinggi (Substansial)
## DE DE 0.3957 39.57% Moderat
## RPA RPA 0.5072 50.72% Moderat
Interpretasi R²: Nilai R² menunjukkan proporsi varians konstruk endogen yang dijelaskan oleh konstruk eksogen dalam model. Hair et al. (2014) menyarankan R² ≥ 0.19 (lemah), ≥ 0.33 (moderat), ≥ 0.67 (substansial).
## lavaan 0.6-21 ended normally after 60 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of model parameters 56
##
## Number of observations 876
##
## Model Test User Model:
## Standard Scaled
## Test Statistic 863.884 770.948
## Degrees of freedom 220 220
## P-value (Chi-square) 0.000 0.000
## Scaling correction factor 1.121
## Yuan-Bentler correction (Mplus variant)
##
## Model Test Baseline Model:
##
## Test statistic 10422.842 9011.931
## Degrees of freedom 253 253
## P-value 0.000 0.000
## Scaling correction factor 1.157
##
## User Model versus Baseline Model:
##
## Comparative Fit Index (CFI) 0.937 0.937
## Tucker-Lewis Index (TLI) 0.927 0.928
##
## Robust Comparative Fit Index (CFI) 0.939
## Robust Tucker-Lewis Index (TLI) 0.930
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -17541.444 -17541.444
## Scaling correction factor 1.292
## for the MLR correction
## Loglikelihood unrestricted model (H1) -17109.502 -17109.502
## Scaling correction factor 1.155
## for the MLR correction
##
## Akaike (AIC) 35194.889 35194.889
## Bayesian (BIC) 35462.309 35462.309
## Sample-size adjusted Bayesian (SABIC) 35284.466 35284.466
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.058 0.053
## 90 Percent confidence interval - lower 0.054 0.050
## 90 Percent confidence interval - upper 0.062 0.057
## P-value H_0: RMSEA <= 0.050 0.001 0.069
## P-value H_0: RMSEA >= 0.080 0.000 0.000
##
## Robust RMSEA 0.057
## 90 Percent confidence interval - lower 0.052
## 90 Percent confidence interval - upper 0.061
## P-value H_0: Robust RMSEA <= 0.050 0.006
## P-value H_0: Robust RMSEA >= 0.080 0.000
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.040 0.040
##
## 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
## TSC =~
## TSC1 1.000 0.452 0.660
## TSC2 0.993 0.047 20.990 0.000 0.449 0.703
## TSC3 0.938 0.053 17.726 0.000 0.424 0.663
## TSC4 0.923 0.058 15.963 0.000 0.417 0.620
## TSC5 1.026 0.048 21.198 0.000 0.464 0.711
## TE =~
## TE1 1.000 0.548 0.771
## TE2 0.925 0.038 24.597 0.000 0.507 0.727
## TE3 1.033 0.041 25.223 0.000 0.566 0.804
## TE4 1.086 0.031 34.702 0.000 0.595 0.864
## TE5 0.903 0.044 20.620 0.000 0.495 0.657
## EE =~
## EE1 1.000 0.567 0.748
## EE2 1.135 0.045 25.432 0.000 0.644 0.759
## EE3 1.154 0.052 22.345 0.000 0.654 0.791
## EE4 1.069 0.049 21.620 0.000 0.606 0.762
## EE5 1.094 0.049 22.369 0.000 0.620 0.766
## DE =~
## DE1 1.000 0.454 0.670
## DE2 0.981 0.068 14.496 0.000 0.445 0.653
## DE3 1.150 0.098 11.794 0.000 0.522 0.748
## RPA =~
## RPA1 1.000 0.699 0.839
## RPA2 0.980 0.029 33.806 0.000 0.685 0.852
## RPA3 0.848 0.049 17.150 0.000 0.593 0.752
## RPA4 0.678 0.051 13.258 0.000 0.474 0.620
## RPA5 0.616 0.054 11.459 0.000 0.431 0.548
##
## Regressions:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## TE ~
## TSC 0.803 0.059 13.504 0.000 0.662 0.662
## EE ~
## TSC 0.683 0.070 9.725 0.000 0.544 0.544
## TE 0.377 0.055 6.820 0.000 0.364 0.364
## DE ~
## TSC 0.400 0.062 6.490 0.000 0.398 0.398
## TE 0.240 0.049 4.874 0.000 0.290 0.290
## RPA ~
## TSC 0.642 0.080 8.065 0.000 0.415 0.415
## TE 0.467 0.063 7.453 0.000 0.366 0.366
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .EE ~~
## .DE -0.008 0.007 -1.041 0.298 -0.070 -0.070
## .RPA 0.057 0.009 6.301 0.000 0.371 0.371
## .DE ~~
## .RPA -0.021 0.010 -2.224 0.026 -0.123 -0.123
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .TSC1 0.264 0.017 15.169 0.000 0.264 0.564
## .TSC2 0.206 0.013 15.372 0.000 0.206 0.506
## .TSC3 0.229 0.012 18.611 0.000 0.229 0.560
## .TSC4 0.279 0.016 17.228 0.000 0.279 0.616
## .TSC5 0.210 0.012 16.894 0.000 0.210 0.494
## .TE1 0.206 0.014 14.660 0.000 0.206 0.406
## .TE2 0.229 0.014 16.845 0.000 0.229 0.471
## .TE3 0.176 0.013 13.842 0.000 0.176 0.354
## .TE4 0.121 0.010 12.630 0.000 0.121 0.254
## .TE5 0.323 0.020 16.049 0.000 0.323 0.569
## .EE1 0.254 0.018 14.238 0.000 0.254 0.441
## .EE2 0.305 0.024 12.858 0.000 0.305 0.424
## .EE3 0.257 0.018 14.553 0.000 0.257 0.375
## .EE4 0.265 0.019 14.038 0.000 0.265 0.419
## .EE5 0.271 0.019 14.258 0.000 0.271 0.413
## .DE1 0.252 0.017 14.538 0.000 0.252 0.550
## .DE2 0.267 0.015 17.674 0.000 0.267 0.574
## .DE3 0.215 0.022 9.838 0.000 0.215 0.441
## .RPA1 0.206 0.017 12.373 0.000 0.206 0.297
## .RPA2 0.178 0.016 11.248 0.000 0.178 0.275
## .RPA3 0.270 0.030 8.929 0.000 0.270 0.434
## .RPA4 0.360 0.030 12.047 0.000 0.360 0.615
## .RPA5 0.431 0.032 13.593 0.000 0.431 0.699
## TSC 0.204 0.019 10.876 0.000 1.000 1.000
## .TE 0.169 0.016 10.280 0.000 0.562 0.562
## .EE 0.099 0.011 8.934 0.000 0.308 0.308
## .DE 0.124 0.019 6.608 0.000 0.604 0.604
## .RPA 0.241 0.027 8.872 0.000 0.493 0.493
##
## R-Square:
## Estimate
## TSC1 0.436
## TSC2 0.494
## TSC3 0.440
## TSC4 0.384
## TSC5 0.506
## TE1 0.594
## TE2 0.529
## TE3 0.646
## TE4 0.746
## TE5 0.431
## EE1 0.559
## EE2 0.576
## EE3 0.625
## EE4 0.581
## EE5 0.587
## DE1 0.450
## DE2 0.426
## DE3 0.559
## RPA1 0.703
## RPA2 0.725
## RPA3 0.566
## RPA4 0.385
## RPA5 0.301
## TE 0.438
## EE 0.692
## DE 0.396
## RPA 0.507
library(qgraph)
# Ambil parameter standar
param <- parameterestimates(fit_sem, standardized = TRUE)
# --- Measurement loadings ---
load_df <- param[param$op == "=~", c("lhs","rhs","std.all")]
# --- Structural paths ---
path_df <- param[param$op == "~", c("lhs","rhs","std.all")]
# Gabung semua edge: from -> to -> weight
edges <- rbind(
data.frame(from = load_df$lhs, to = load_df$rhs, weight = round(load_df$std.all, 2)),
data.frame(from = path_df$rhs, to = path_df$lhs, weight = round(path_df$std.all, 2))
)
# Semua node unik
all_nodes <- unique(c(as.character(edges$from), as.character(edges$to)))
# Posisi manual (x, y) — koordinat disesuaikan
node_pos <- matrix(c(
# TSC (laten) — kiri tengah
0, 0,
# TE (laten) — tengah bawah
3.5, -3,
# EE (laten) — tengah
3.5, -1,
# DE (laten) — tengah atas
3.5, 1,
# RPA (laten) — tengah paling atas
3.5, 3,
# TSC indicators — kolom paling kiri
-3, 3, # TSC5
-3, 1.5, # TSC4
-3, 0, # TSC3
-3, -1.5, # TSC2
-3, -3, # TSC1
# TE indicators — kolom kanan bawah
7, -4.5, # TE1
7, -3.75,# TE2
7, -3, # TE3
7, -2.25,# TE4
7, -1.5, # TE5
# EE indicators
7, -0.75,# EE1
7, 0, # EE2
7, 0.75,# EE3
7, 1.5, # EE4
7, 2.25,# EE5
# DE indicators
7, 3, # DE1
7, 3.75,# DE2
7, 4.5, # DE3
# RPA indicators
7, 5.25,# RPA1
7, 6, # RPA2
7, 6.75,# RPA3
7, 7.5, # RPA4
7, 8.25 # RPA5
), ncol = 2, byrow = TRUE)
node_order <- c("TSC","TE","EE","DE","RPA",
"TSC5","TSC4","TSC3","TSC2","TSC1",
"TE1","TE2","TE3","TE4","TE5",
"EE1","EE2","EE3","EE4","EE5",
"DE1","DE2","DE3",
"RPA1","RPA2","RPA3","RPA4","RPA5")
rownames(node_pos) <- node_order
# Warna node
node_color <- ifelse(node_order %in% c("TSC","TE","EE","DE","RPA"),
"#2E86C1", "#F39C12")
node_shape <- ifelse(node_order %in% c("TSC","TE","EE","DE","RPA"),
"circle", "square")
# Edge color: struktural = merah tua, pengukuran = abu
edge_color <- ifelse(
paste(edges$from, edges$to) %in%
paste(path_df$rhs, path_df$lhs),
"#C0392B", "gray50"
)
edge_lwd <- ifelse(
paste(edges$from, edges$to) %in%
paste(path_df$rhs, path_df$lhs),
2.5, 1.2
)
tmp_png <- tempfile(fileext = ".png")
png(tmp_png, width = 3200, height = 2000, res = 200)
qgraph(
edges[, c("from","to","weight")],
layout = node_pos[node_order, ],
labels = node_order,
shape = node_shape,
color = node_color,
vsize = ifelse(node_order %in% c("TSC","TE","EE","DE","RPA"), 9, 5),
label.cex = 1.1,
edge.labels = TRUE,
edge.label.cex = 0.85,
edge.color = edge_color,
lwd = edge_lwd,
arrows = TRUE,
directed = TRUE,
fade = FALSE,
border.width = 1.5,
mar = c(5, 5, 7, 5)
)
title("Diagram Jalur SEM — Koefisien Standar\n(Merah = Jalur Struktural, Abu = Loading Pengukuran)",
cex.main = 1.3, font.main = 2, line = 1)
dev.off()## png
## 2
Keterangan diagram: Kotak oranye = indikator (variabel manifest), lingkaran biru = konstruk laten. Angka pada garis adalah koefisien jalur standar (standardized path coefficient).
## Hipotesis Jalur Arah Beta p_value Keputusan
## 1 H1 TSC → TE Positif 0.662 0 ✓ Didukung
## 2 H2 TSC → EE Positif 0.544 0 ✓ Didukung
## 3 H3 TSC → DE Positif 0.364 0 ✓ Didukung
## 4 H4 TSC → RPA Positif 0.398 0 ✓ Didukung
## 5 H5 TE → EE Positif 0.290 0 ✓ Didukung
## 6 H6 TE → DE Positif 0.415 0 ✓ Didukung
## 7 H7 TE → RPA Positif 0.366 0 ✓ Didukung