Perkembangan kecerdasan buatan (Artificial Intelligence/AI) yang pesat membawa implikasi besar bagi dunia pendidikan tinggi. Mahasiswa tidak hanya dituntut untuk memahami teknologi AI secara konseptual (AI Literacy), tetapi juga diharapkan memiliki kepercayaan diri (Self-Confidence) dalam menggunakannya serta mampu mengelola kecemasan (AI Anxiety) yang mungkin muncul akibat ketidakpastian terhadap dampak AI di masa depan. Dalam konteks ini, AI Readiness atau kesiapan individu untuk menerima dan menggunakan teknologi AI berperan sebagai penghubung antara karakteristik mahasiswa dengan tingkat kepuasan mereka dalam proses pembelajaran berbasis AI. Oleh karena itu, penelitian ini bertujuan untuk menganalisis hubungan antar variabel tersebut secara simultan menggunakan metode Structural Equation Modeling (SEM).
Penelitian ini bertujuan untuk:
Data penelitian ini bersumber dari AI Literacy Questionnaire yang dikembangkan oleh Dai et al. (2020) dan tersedia secara publik di Figshare (DOI: 10.6084/m9.figshare.29488523). Dataset mencakup jawaban mahasiswa terhadap pertanyaan seputar literasi AI, kesiapan AI, kecemasan AI, kepercayaan diri, dan kepuasan belajar. Definisi Operasional Variabel :
| Variabel | Jenis | Indikator | Skala |
|---|---|---|---|
| AI Literacy | Eksogen | L1–L5 | Likert 1–5 |
| Self-Confidence | Eksogen | C1–C5 | Likert 1–5 |
| AI Anxiety | Eksogen | A1–A5 | Likert 1–5 |
| AI Readiness | Mediator | RE1–RE6 | Likert 1–5 |
| Kepuasan Mahasiswa | Endogen | S1–S5 | Likert 1–5 |
Analisis menggunakan Covariance-Based SEM (CB-SEM)
dengan estimasi Maximum Likelihood (ML) melalui package
lavaan di R. Tahapan analisis meliputi:
# install.packages(c("lavaan","semPlot","psych","MVN","ggplot2",
# "corrplot","dplyr","tidyr","semTools","kableExtra"))
library(lavaan)
library(semPlot)
library(psych)
library(MVN)
library(ggplot2)
library(corrplot)
library(dplyr)
library(tidyr)
library(semTools)
library(kableExtra)
data_raw <- read.csv("AI_Literacy_questionnaire_data_.csv",
header = TRUE,
stringsAsFactors = FALSE,
fileEncoding = "UTF-8-BOM")
cat("Dimensi data awal:", nrow(data_raw), "baris x", ncol(data_raw), "kolom\n")
Dimensi data awal: 1205 baris x 58 kolom
data_manifest <- data_raw %>%
select(L1, L2, L3, L4, L5, # AI Literacy
C1, C2, C3, C4, C5, # Self-Confidence
A1, A2, A3, A4, A5, # AI Anxiety
RE1, RE2, RE3, RE4, RE5, RE6, # AI Readiness (Mediator)
S1, S2, S3, S4, S5) %>% # Kepuasan Mahasiswa
mutate(across(everything(), as.numeric))
data_manifest_clean <- na.omit(data_manifest)
cat("Data setelah cleaning:", nrow(data_manifest_clean),
"baris x", ncol(data_manifest_clean), "kolom\n")
Data setelah cleaning: 1205 baris x 26 kolom
cat("Baris dihapus (missing values):",
nrow(data_manifest) - nrow(data_manifest_clean), "\n")
Baris dihapus (missing values): 0
desc <- describe(data_manifest_clean)
desc_df <- desc[, c("n","mean","sd","min","max","skew","kurtosis")] %>%
round(3) %>%
tibble::rownames_to_column("Indikator") %>%
mutate(Konstruk = case_when(
grepl("^L", Indikator) ~ "AI Literacy",
grepl("^C", Indikator) ~ "Self-Confidence",
grepl("^A", Indikator) ~ "AI Anxiety",
grepl("^RE", Indikator) ~ "AI Readiness",
grepl("^S", Indikator) ~ "Kepuasan"
)) %>%
select(Konstruk, Indikator, n, Mean=mean, SD=sd, Min=min, Max=max,
Skewness=skew, Kurtosis=kurtosis)
kable(desc_df, caption = "Tabel 1. Statistik Deskriptif Variabel Penelitian",
align = c("l","c","c","c","c","c","c","c","c")) %>%
kable_styling(bootstrap_options = c("striped","hover","condensed","responsive"),
full_width = FALSE, font_size = 13) %>%
pack_rows("AI Literacy", 1, 5) %>%
pack_rows("Self-Confidence", 6, 10) %>%
pack_rows("AI Anxiety", 11, 15) %>%
pack_rows("AI Readiness", 16, 21) %>%
pack_rows("Kepuasan Mahasiswa", 22, 26)
| Konstruk | Indikator | n | Mean | SD | Min | Max | Skewness | Kurtosis |
|---|---|---|---|---|---|---|---|---|
| AI Literacy | ||||||||
| AI Literacy | L1 | 1205 | 4.559 | 0.727 | 1 | 5 | -2.247 | 6.685 |
| AI Literacy | L2 | 1205 | 4.529 | 0.718 | 1 | 5 | -2.002 | 5.686 |
| AI Literacy | L3 | 1205 | 3.954 | 1.018 | 1 | 5 | -0.851 | 0.211 |
| AI Literacy | L4 | 1205 | 3.230 | 1.361 | 1 | 5 | -0.177 | -1.222 |
| AI Literacy | L5 | 1205 | 3.684 | 1.093 | 1 | 5 | -0.525 | -0.489 |
| Self-Confidence | ||||||||
| Self-Confidence | C1 | 1205 | 2.317 | 1.769 | 0 | 5 | -0.236 | -1.435 |
| Self-Confidence | C2 | 1205 | 2.856 | 1.894 | 0 | 5 | -0.630 | -1.239 |
| Self-Confidence | C3 | 1205 | 2.408 | 1.752 | 0 | 5 | -0.284 | -1.361 |
| Self-Confidence | C4 | 1205 | 2.886 | 1.844 | 0 | 5 | -0.685 | -1.116 |
| Self-Confidence | C5 | 1205 | 2.122 | 1.771 | 0 | 5 | -0.022 | -1.473 |
| AI Anxiety | ||||||||
| AI Anxiety | A1 | 1205 | 2.857 | 1.108 | 1 | 5 | 0.236 | -0.768 |
| AI Anxiety | A2 | 1205 | 2.918 | 1.088 | 1 | 5 | 0.047 | -0.763 |
| AI Anxiety | A3 | 1205 | 2.364 | 1.111 | 1 | 5 | 0.612 | -0.324 |
| AI Anxiety | A4 | 1205 | 2.406 | 1.170 | 1 | 5 | 0.515 | -0.647 |
| AI Anxiety | A5 | 1205 | 2.338 | 1.204 | 1 | 5 | 0.657 | -0.501 |
| AI Readiness | ||||||||
| AI Readiness | RE1 | 1205 | 4.310 | 0.784 | 1 | 5 | -1.421 | 2.936 |
| AI Readiness | RE2 | 1205 | 4.310 | 0.760 | 1 | 5 | -1.322 | 2.742 |
| AI Readiness | RE3 | 1205 | 3.855 | 1.047 | 1 | 5 | -0.815 | 0.139 |
| AI Readiness | RE4 | 1205 | 3.877 | 0.943 | 1 | 5 | -0.788 | 0.506 |
| AI Readiness | RE5 | 1205 | 3.205 | 1.067 | 1 | 5 | -0.094 | -0.549 |
| AI Readiness | RE6 | 1205 | 3.402 | 0.999 | 1 | 5 | -0.363 | -0.439 |
| Kepuasan Mahasiswa | ||||||||
| Kepuasan | S1 | 1205 | 2.580 | 1.753 | 0 | 5 | -0.431 | -1.248 |
| Kepuasan | S2 | 1205 | 2.038 | 1.896 | 0 | 5 | 0.072 | -1.635 |
| Kepuasan | S3 | 1205 | 3.103 | 1.766 | 0 | 5 | -0.867 | -0.724 |
| Kepuasan | S4 | 1205 | 1.967 | 1.840 | 0 | 5 | 0.090 | -1.622 |
| Kepuasan | S5 | 1205 | 2.176 | 1.738 | 0 | 5 | -0.111 | -1.435 |
Secara umum, rata-rata seluruh indikator berada pada kisaran 3 hingga 4 dari skala Likert 1–5, mengindikasikan responden cenderung setuju dengan pernyataan yang diberikan. Nilai skewness sebagian besar berada di bawah |2| dan kurtosis di bawah |7|, sehingga data masih dapat diterima untuk analisis CB-SEM dengan estimasi ML.
var_labels <- data.frame(
variable = c(paste0("L",1:5), paste0("C",1:5), paste0("A",1:5),
paste0("RE",1:6), paste0("S",1:5)),
konstruk = c(rep("AI Literacy",5), rep("Self-Confidence",5),
rep("AI Anxiety",5), rep("AI Readiness",6),
rep("Kepuasan",5))
)
data_long <- data_manifest_clean %>%
pivot_longer(everything(), names_to="variable", values_to="value") %>%
left_join(var_labels, by="variable")
ggplot(data_long, aes(x=value, fill=konstruk)) +
geom_bar(color="white", alpha=0.85) +
facet_wrap(~variable, scales="free_y", ncol=5) +
scale_fill_brewer(palette="Set2") +
scale_x_continuous(breaks=1:5) +
labs(title="Distribusi Frekuensi Setiap Indikator",
subtitle="Skala Likert 1–5 | n = seluruh responden valid",
x="Nilai", y="Frekuensi", fill="Konstruk") +
theme_minimal(base_size=11) +
theme(legend.position="bottom",
strip.text=element_text(face="bold"),
plot.title=element_text(face="bold", hjust=0.5),
plot.subtitle=element_text(hjust=0.5, color="gray50"))
Indikator AI Literacy (L1–L5) dan AI Readiness (RE1–RE6) menunjukkan distribusi yang condong ke nilai tinggi (4–5), mengindikasikan mahasiswa memiliki kesadaran dan kesiapan terhadap AI yang cukup tinggi. Sebaliknya, AI Anxiety (A1–A5) menunjukkan distribusi yang lebih variatif, mencerminkan perbedaan tingkat kecemasan yang signifikan antar responden.
cor_matrix <- cor(data_manifest_clean, use="complete.obs")
corrplot(cor_matrix,
method="color", type="upper", order="original",
tl.col="black", tl.srt=45, tl.cex=0.75,
addCoef.col="black", number.cex=0.42,
col=colorRampPalette(c("#d73027","white","#1a9641"))(200),
title="Matriks Korelasi Antar Indikator",
mar=c(0,0,2,0))
Terdapat korelasi positif yang cukup kuat antara indikator dalam satu konstruk yang sama (monotrait), yang merupakan syarat dasar validitas konvergen. Korelasi antar indikator berbeda konstruk (heterotrait) umumnya lebih rendah, mendukung asumsi validitas diskriminan.
cat("Versi MVN:", as.character(packageVersion("MVN")), "\n\n")
Versi MVN: 6.3
mvn_result <- tryCatch(
mvn(data_manifest_clean, mvnTest = "mardia"),
error = function(e) mvn(data_manifest_clean, mvn_test = "mardia")
)
# Tampilkan hasil langsung
print(mvn_result$multivariateNormality)
NULL
Hasil uji Mardia menunjukkan bahwa data tidak memenuhi asumsi normalitas multivariat , hal ini terjadi pada data survei dengan skala Likert dan ukuran sampel besar. Estimasi Maximum Likelihood (ML) dalam CB-SEM cukup robust terhadap pelanggaran normalitas bila n > 200 berkat Central Limit Theorem. Oleh karena itu, analisis tetap dapat dilanjutkan.
r_mat <- cor(data_manifest_clean)
kmo_result <- KMO(r_mat)
cat("Overall MSA:", round(kmo_result$MSA, 4), "\n\n")
Overall MSA: 0.896
kmo_df <- data.frame(
Indikator = names(kmo_result$MSAi),
MSA = round(kmo_result$MSAi, 4),
Status = ifelse(kmo_result$MSAi >= 0.8, "Sangat Baik (≥0.80)",
ifelse(kmo_result$MSAi >= 0.7, "Baik (≥0.70)",
ifelse(kmo_result$MSAi >= 0.6, "Cukup (≥0.60)",
ifelse(kmo_result$MSAi >= 0.5, "Memadai (≥0.50)",
"Tidak Memadai (<0.50)"))))
)
kable(kmo_df, caption="Tabel 3. Nilai MSA per Indikator (KMO)",
align=c("c","c","l")) %>%
kable_styling(bootstrap_options=c("striped","hover","condensed"),
full_width=FALSE) %>%
row_spec(which(kmo_df$MSA < 0.5), background="#FADBD8")
| Indikator | MSA | Status | |
|---|---|---|---|
| L1 | L1 | 0.8168 | Sangat Baik (≥0.80) |
| L2 | L2 | 0.8092 | Sangat Baik (≥0.80) |
| L3 | L3 | 0.9350 | Sangat Baik (≥0.80) |
| L4 | L4 | 0.9073 | Sangat Baik (≥0.80) |
| L5 | L5 | 0.9275 | Sangat Baik (≥0.80) |
| C1 | C1 | 0.9278 | Sangat Baik (≥0.80) |
| C2 | C2 | 0.9221 | Sangat Baik (≥0.80) |
| C3 | C3 | 0.9243 | Sangat Baik (≥0.80) |
| C4 | C4 | 0.9278 | Sangat Baik (≥0.80) |
| C5 | C5 | 0.9307 | Sangat Baik (≥0.80) |
| A1 | A1 | 0.8869 | Sangat Baik (≥0.80) |
| A2 | A2 | 0.8222 | Sangat Baik (≥0.80) |
| A3 | A3 | 0.8483 | Sangat Baik (≥0.80) |
| A4 | A4 | 0.8481 | Sangat Baik (≥0.80) |
| A5 | A5 | 0.8372 | Sangat Baik (≥0.80) |
| RE1 | RE1 | 0.9162 | Sangat Baik (≥0.80) |
| RE2 | RE2 | 0.9069 | Sangat Baik (≥0.80) |
| RE3 | RE3 | 0.9035 | Sangat Baik (≥0.80) |
| RE4 | RE4 | 0.9245 | Sangat Baik (≥0.80) |
| RE5 | RE5 | 0.8896 | Sangat Baik (≥0.80) |
| RE6 | RE6 | 0.9130 | Sangat Baik (≥0.80) |
| S1 | S1 | 0.9078 | Sangat Baik (≥0.80) |
| S2 | S2 | 0.8660 | Sangat Baik (≥0.80) |
| S3 | S3 | 0.9063 | Sangat Baik (≥0.80) |
| S4 | S4 | 0.8566 | Sangat Baik (≥0.80) |
| S5 | S5 | 0.9369 | Sangat Baik (≥0.80) |
Nilai Overall MSA = 0.896 berada di atas ambang batas 0.5, menunjukkan bahwa data memadai untuk dilanjutkan ke analisis faktor/SEM (Kaiser, 1974). Nilai MSA per indikator juga diperiksa; indikator dengan MSA < 0.5 (ditandai merah, jika ada) perlu mendapat perhatian khusus.
composite_scores <- data.frame(
AILiteracy = rowMeans(data_manifest_clean[,c("L1","L2","L3","L4","L5")]),
SelfConfidence = rowMeans(data_manifest_clean[,c("C1","C2","C3","C4","C5")]),
AIAnxiety = rowMeans(data_manifest_clean[,c("A1","A2","A3","A4","A5")]),
AIReadiness = rowMeans(data_manifest_clean[,c("RE1","RE2","RE3","RE4","RE5","RE6")]),
Kepuasan = rowMeans(data_manifest_clean[,c("S1","S2","S3","S4","S5")])
)
cor_construct <- round(cor(composite_scores), 4)
kable(cor_construct,
caption="Tabel 4. Korelasi Antar Skor Komposit Konstruk") %>%
kable_styling(bootstrap_options=c("striped","hover"), full_width=FALSE)
| AILiteracy | SelfConfidence | AIAnxiety | AIReadiness | Kepuasan | |
|---|---|---|---|---|---|
| AILiteracy | 1.0000 | 0.1699 | -0.1262 | 0.6288 | 0.1281 |
| SelfConfidence | 0.1699 | 1.0000 | -0.0901 | 0.2038 | 0.7016 |
| AIAnxiety | -0.1262 | -0.0901 | 1.0000 | -0.2177 | -0.0557 |
| AIReadiness | 0.6288 | 0.2038 | -0.2177 | 1.0000 | 0.2032 |
| Kepuasan | 0.1281 | 0.7016 | -0.0557 | 0.2032 | 1.0000 |
max_cor <- max(abs(cor_construct[upper.tri(cor_construct)]))
cat("\nKorelasi tertinggi antar konstruk:", round(max_cor, 4))
Korelasi tertinggi antar konstruk: 0.7016
cat("\nStatus:", ifelse(max_cor < 0.90, "AMAN — tidak ada multikolinearitas berat",
"PERHATIAN — ada korelasi ≥ 0.90"), "\n")
Status: AMAN — tidak ada multikolinearitas berat
Korelasi tertinggi antar konstruk adalah 0.7016, di bawah ambang batas 0.90. Hal ini mengindikasikan tidak terdapat masalah multikolinearitas yang serius antar konstruk laten dalam model.
model_harman <- '
SingleFactor =~ L1+L2+L3+L4+L5+
C1+C2+C3+C4+C5+
A1+A2+A3+A4+A5+
RE1+RE2+RE3+RE4+RE5+RE6+
S1+S2+S3+S4+S5
'
fit_harman <- sem(model_harman, data=data_manifest_clean, estimator="ML")
harman_r2 <- lavInspect(fit_harman, "r2")
harman_var <- mean(harman_r2) * 100
cat("Rata-rata variance explained (single factor):", round(harman_var, 2), "%\n")
Rata-rata variance explained (single factor): 24.26 %
cat("Threshold: < 50%\n")
Threshold: < 50%
cat("Status CMB:", ifelse(harman_var < 50,
"AMAN — tidak ada indikasi common method bias serius",
"PERHATIAN — pertimbangkan prosedur kontrol tambahan"), "\n")
Status CMB: AMAN — tidak ada indikasi common method bias serius
Harman’s Single Factor Test menghasilkan variance explained sebesar 24.26%. Karena nilai ini berada di bawah 50%, maka tidak terdapat indikasi common method bias yang serius dalam dataset ini. Dengan demikian, data dari single-source survey ini masih layak untuk dianalisis lebih lanjut.
Model SEM yang dibangun bersifat reflektif (reflective measurement model), di mana setiap konstruk laten diukur oleh beberapa indikator yang mencerminkannya. Model struktural mengikuti kerangka mediasi dengan AI Readiness sebagai variabel perantara.
model_sem <- '
# OUTER MODEL (Measurement Model) - Reflektif
AILiteracy =~ L1 + L2 + L3 + L4 + L5
SelfConfidence =~ C1 + C2 + C3 + C4 + C5
AIAnxiety =~ A1 + A2 + A3 + A4 + A5
AIReadiness =~ RE1 + RE2 + RE3 + RE4 + RE5 + RE6
Kepuasan =~ S1 + S2 + S3 + S4 + S5
# INNER MODEL (Structural Model)
# Pengaruh terhadap AI Readiness (Mediator)
# H1: AI Literacy -> AI Readiness
# H2: Self-Confidence -> AI Readiness
# H3: AI Anxiety -> AI Readiness
AIReadiness ~ AILiteracy + SelfConfidence + AIAnxiety
# Pengaruh terhadap Kepuasan Mahasiswa
# H4: AI Literacy -> Kepuasan
# H5: Self-Confidence -> Kepuasan
# H6: AI Anxiety -> Kepuasan
# H7: AI Readiness -> Kepuasan
Kepuasan ~ AILiteracy + SelfConfidence + AIAnxiety + AIReadiness
'
cat("Model berhasil dispesifikasikan:")
Model berhasil dispesifikasikan:
cat(" Eksogen : AILiteracy, SelfConfidence, AIAnxiety")
Eksogen : AILiteracy, SelfConfidence, AIAnxiety
cat(" Mediator : AIReadiness")
Mediator : AIReadiness
cat(" Endogen : Kepuasan")
Endogen : Kepuasan
fit_sem <- sem(model_sem,
data = data_manifest_clean,
estimator = "ML",
se = "standard",
test = "standard")
cat("Estimasi selesai.")
Estimasi selesai.
cat("Jumlah Observasi :", lavInspect(fit_sem, "nobs"))
Jumlah Observasi : 1205
cat("Jumlah Parameter :", lavInspect(fit_sem, "npar"))
Jumlah Parameter : 62
Evaluasi outer model bertujuan untuk menguji validitas dan reliabilitas alat ukur yang digunakan.
loading_std <- standardizedSolution(fit_sem) %>%
filter(op == "=~") %>%
select(Konstruk=lhs, Indikator=rhs,
Loading=est.std, SE=se, z_value=z, p_value=pvalue) %>%
mutate(across(where(is.numeric), ~round(., 4)),
Status = case_when(
abs(Loading) >= 0.70 ~ "✔ Ideal (≥0.70)",
abs(Loading) >= 0.50 ~ "⚠ Dapat Dipertimbangkan (0.50–0.70)",
TRUE ~ "✘ Lemah (<0.50)"
))
kable(loading_std,
caption="Tabel 5. Standardized Loading Factor",
align=c("l","c","c","c","c","c","l")) %>%
kable_styling(bootstrap_options=c("striped","hover","condensed"),
full_width=FALSE, font_size=13) %>%
column_spec(3, bold=TRUE,
color=ifelse(abs(loading_std$Loading)>=0.70,"#1A5E2A",
ifelse(abs(loading_std$Loading)>=0.50,"#D35400","#C0392B"))) %>%
pack_rows("AI Literacy", 1, 5) %>%
pack_rows("Self-Confidence", 6, 10) %>%
pack_rows("AI Anxiety", 11, 15) %>%
pack_rows("AI Readiness", 16, 21) %>%
pack_rows("Kepuasan", 22, 26)
| Konstruk | Indikator | Loading | SE | z_value | p_value | Status |
|---|---|---|---|---|---|---|
| AI Literacy | ||||||
| AILiteracy | L1 | 0.8477 | 0.0125 | 68.0010 | 0 | ✔ Ideal (≥0.70) |
| AILiteracy | L2 | 0.8577 | 0.0122 | 70.2982 | 0 | ✔ Ideal (≥0.70) |
| AILiteracy | L3 | 0.5585 | 0.0220 | 25.3361 | 0 | ⚠ Dapat Dipertimbangkan (0.50–0.70) |
| AILiteracy | L4 | 0.2606 | 0.0289 | 9.0210 | 0 | ✘ Lemah (<0.50) |
| AILiteracy | L5 | 0.5155 | 0.0233 | 22.0971 | 0 | ⚠ Dapat Dipertimbangkan (0.50–0.70) |
| Self-Confidence | ||||||
| SelfConfidence | C1 | 0.8614 | 0.0086 | 99.9793 | 0 | ✔ Ideal (≥0.70) |
| SelfConfidence | C2 | 0.8632 | 0.0085 | 101.2067 | 0 | ✔ Ideal (≥0.70) |
| SelfConfidence | C3 | 0.8893 | 0.0073 | 121.4132 | 0 | ✔ Ideal (≥0.70) |
| SelfConfidence | C4 | 0.8627 | 0.0086 | 100.8448 | 0 | ✔ Ideal (≥0.70) |
| SelfConfidence | C5 | 0.8302 | 0.0101 | 82.5351 | 0 | ✔ Ideal (≥0.70) |
| AI Anxiety | ||||||
| AIAnxiety | A1 | 0.7451 | 0.0151 | 49.4334 | 0 | ✔ Ideal (≥0.70) |
| AIAnxiety | A2 | 0.7083 | 0.0165 | 42.9164 | 0 | ✔ Ideal (≥0.70) |
| AIAnxiety | A3 | 0.7749 | 0.0139 | 55.7711 | 0 | ✔ Ideal (≥0.70) |
| AIAnxiety | A4 | 0.8102 | 0.0125 | 64.7864 | 0 | ✔ Ideal (≥0.70) |
| AIAnxiety | A5 | 0.8248 | 0.0119 | 69.0604 | 0 | ✔ Ideal (≥0.70) |
| AI Readiness | ||||||
| AIReadiness | RE1 | 0.7457 | 0.0156 | 47.8998 | 0 | ✔ Ideal (≥0.70) |
| AIReadiness | RE2 | 0.7364 | 0.0159 | 46.2503 | 0 | ✔ Ideal (≥0.70) |
| AIReadiness | RE3 | 0.7738 | 0.0145 | 53.3297 | 0 | ✔ Ideal (≥0.70) |
| AIReadiness | RE4 | 0.7203 | 0.0165 | 43.5854 | 0 | ✔ Ideal (≥0.70) |
| AIReadiness | RE5 | 0.4960 | 0.0240 | 20.6915 | 0 | ✘ Lemah (<0.50) |
| AIReadiness | RE6 | 0.5453 | 0.0225 | 24.1958 | 0 | ⚠ Dapat Dipertimbangkan (0.50–0.70) |
| Kepuasan | ||||||
| Kepuasan | S1 | 0.7400 | 0.0145 | 51.0172 | 0 | ✔ Ideal (≥0.70) |
| Kepuasan | S2 | 0.8645 | 0.0092 | 93.8899 | 0 | ✔ Ideal (≥0.70) |
| Kepuasan | S3 | 0.6294 | 0.0188 | 33.5402 | 0 | ⚠ Dapat Dipertimbangkan (0.50–0.70) |
| Kepuasan | S4 | 0.8742 | 0.0088 | 99.2999 | 0 | ✔ Ideal (≥0.70) |
| Kepuasan | S5 | 0.8171 | 0.0112 | 72.7400 | 0 | ✔ Ideal (≥0.70) |
Syarat validitas konvergen pada tingkat indikator adalah standardized loading factor ≥ 0.50, dengan nilai ideal ≥ 0.70. Indikator dengan loading ≥ 0.70 (hijau) memenuhi syarat ideal; loading 0.50–0.70 (oranye) masih dapat dipertahankan apabila nilai AVE konstruk keseluruhan ≥ 0.50. Indikator dengan loading < 0.50 (merah) perlu dipertimbangkan untuk dikeluarkan dari model.
ve_result <- AVE(fit_sem)
ave_df <- data.frame(
Konstruk = names(ve_result),
AVE = round(ve_result, 4),
Status = ifelse(ve_result >= 0.50,
"✔ Valid (AVE ≥ 0.50)",
"✘ Tidak Valid (AVE < 0.50)")
)
kable(ave_df, caption="Tabel 6. Average Variance Extracted (AVE)",
align=c("l","c","l")) %>%
kable_styling(bootstrap_options=c("striped","hover"), full_width=FALSE) %>%
row_spec(which(ave_df$AVE >= 0.50), color="#1A5E2A") %>%
row_spec(which(ave_df$AVE < 0.50), color="#C0392B")
| Konstruk | AVE | Status | |
|---|---|---|---|
| AILiteracy | AILiteracy | 0.2976 | ✘ Tidak Valid (AVE < 0.50) |
| SelfConfidence | SelfConfidence | 0.7422 | ✔ Valid (AVE ≥ 0.50) |
| AIAnxiety | AIAnxiety | 0.6036 | ✔ Valid (AVE ≥ 0.50) |
| AIReadiness | AIReadiness | 0.4421 | ✘ Tidak Valid (AVE < 0.50) |
| Kepuasan | Kepuasan | 0.6305 | ✔ Valid (AVE ≥ 0.50) |
AVE mengukur proporsi varians indikator yang dijelaskan oleh konstruk latennya. Nilai AVE ≥ 0.50 mengindikasikan konstruk menjelaskan lebih dari separuh varians indikatornya. Konstruk dengan AVE < 0.50 perlu dievaluasi kembali.
cr_result <- semTools::compRelSEM(fit_sem)
cr_numeric <- sapply(cr_result, function(x) x[[1]])
konstruk_list <- list(
AILiteracy = c("L1","L2","L3","L4","L5"),
SelfConfidence = c("C1","C2","C3","C4","C5"),
AIAnxiety = c("A1","A2","A3","A4","A5"),
AIReadiness = c("RE1","RE2","RE3","RE4","RE5","RE6"),
Kepuasan = c("S1","S2","S3","S4","S5")
)
alpha_vals <- sapply(konstruk_list, function(vars) {
psych::alpha(data_manifest_clean[, vars], check.keys=TRUE)$total$raw_alpha
})
rel_df <- data.frame(
Konstruk = names(cr_numeric),
Composite_Reliability = round(cr_numeric, 4),
Cronbach_Alpha = round(alpha_vals[names(cr_numeric)], 4),
Status_CR = ifelse(cr_numeric >= 0.70, "✔ Reliabel", "✘ Tidak Reliabel"),
Status_Alpha = ifelse(abs(alpha_vals[names(cr_numeric)]) >= 0.70,
"✔ Reliabel", "✘ Tidak Reliabel")
)
kable(rel_df,
caption="Tabel 7. Composite Reliability dan Cronbach's Alpha",
align=c("l","c","c","l","l")) %>%
kable_styling(bootstrap_options=c("striped","hover"), full_width=FALSE)
| Konstruk | Composite_Reliability | Cronbach_Alpha | Status_CR | Status_Alpha | |
|---|---|---|---|---|---|
| AILiteracy | AILiteracy | 0.6478 | 0.6884 | ✘ Tidak Reliabel | ✘ Tidak Reliabel |
| SelfConfidence | SelfConfidence | 0.9360 | 0.9343 | ✔ Reliabel | ✔ Reliabel |
| AIAnxiety | AIAnxiety | 0.8809 | 0.8820 | ✔ Reliabel | ✔ Reliabel |
| AIReadiness | AIReadiness | 0.4182 | 0.8250 | ✘ Tidak Reliabel | ✔ Reliabel |
| Kepuasan | Kepuasan | 0.5075 | 0.8915 | ✘ Tidak Reliabel | ✔ Reliabel |
Syarat reliabilitas terpenuhi apabila Composite Reliability (CR) ≥ 0.70 dan Cronbach’s Alpha ≥ 0.70 . CR lebih direkomendasikan dalam konteks SEM karena tidak mengasumsikan kesetaraan loading factor antar indikator. Terdapat konstruk yang perlu dievaluasi kembali terkait reliabilitasnya.
cor_latent <- lavInspect(fit_sem, "cor.lv")
fl_matrix <- cor_latent
diag(fl_matrix) <- sqrt(ve_result[rownames(fl_matrix)])
kable(round(fl_matrix, 4),
caption="Tabel 8. Fornell-Larcker Criterion (Diagonal = √AVE, Off-diagonal = Korelasi Konstruk)") %>%
kable_styling(bootstrap_options=c("striped","hover"), full_width=FALSE) %>%
column_spec(1, bold=TRUE)
| AILiteracy | SelfConfidence | AIAnxiety | AIReadiness | Kepuasan | |
|---|---|---|---|---|---|
| AILiteracy | 0.5455 | 0.1582 | -0.1480 | 0.6925 | 0.0746 |
| SelfConfidence | 0.1582 | 0.8615 | -0.1020 | 0.2157 | 0.7487 |
| AIAnxiety | -0.1480 | -0.1020 | 0.7769 | -0.2706 | -0.0320 |
| AIReadiness | 0.6925 | 0.2157 | -0.2706 | 0.6649 | 0.1879 |
| Kepuasan | 0.0746 | 0.7487 | -0.0320 | 0.1879 | 0.7940 |
Kriteria Fornell-Larcker terpenuhi apabila nilai √AVE suatu konstruk (diagonal) lebih besar dari korelasi konstruk tersebut dengan konstruk lainnya (off-diagonal) di setiap baris dan kolom. Kondisi ini mengindikasikan setiap konstruk lebih baik diukur oleh indikatornya sendiri dibandingkan oleh indikator konstruk lain.
constructs <- list(
AILiteracy = c("L1","L2","L3","L4","L5"),
SelfConfidence = c("C1","C2","C3","C4","C5"),
AIAnxiety = c("A1","A2","A3","A4","A5"),
AIReadiness = c("RE1","RE2","RE3","RE4","RE5","RE6"),
Kepuasan = c("S1","S2","S3","S4","S5")
)
compute_htmt <- function(data, vars1, vars2){
hetero <- abs(cor(data[,vars1], data[,vars2]))
hetero_mean <- mean(hetero)
mono1 <- abs(cor(data[,vars1])); mono1 <- mono1[lower.tri(mono1)]
mono2 <- abs(cor(data[,vars2])); mono2 <- mono2[lower.tri(mono2)]
mono_mean <- sqrt(mean(mono1) * mean(mono2))
return(hetero_mean / mono_mean)
}
construct_names <- names(constructs)
htmt_matrix <- matrix(NA, nrow=length(construct_names),
ncol=length(construct_names),
dimnames=list(construct_names, construct_names))
for(i in seq_along(construct_names))
for(j in seq_along(construct_names))
if(i < j)
htmt_matrix[i,j] <- compute_htmt(data_manifest_clean,
constructs[[i]], constructs[[j]])
htmt_df <- round(htmt_matrix, 4)
kable(htmt_df,
caption="Tabel 9. Heterotrait-Monotrait Ratio (HTMT) — Upper Triangle") %>%
kable_styling(bootstrap_options=c("striped","hover"), full_width=FALSE)
| AILiteracy | SelfConfidence | AIAnxiety | AIReadiness | Kepuasan | |
|---|---|---|---|---|---|
| AILiteracy | NA | 0.201 | 0.1554 | 0.8131 | 0.1482 |
| SelfConfidence | NA | NA | 0.0992 | 0.2255 | 0.7688 |
| AIAnxiety | NA | NA | NA | 0.2511 | 0.0794 |
| AIReadiness | NA | NA | NA | NA | 0.2323 |
| Kepuasan | NA | NA | NA | NA | NA |
# Cek pelanggaran
htmt_vals <- htmt_matrix[upper.tri(htmt_matrix)]
htmt_vals <- htmt_vals[!is.na(htmt_vals)]
cat("Nilai HTMT tertinggi:", round(max(htmt_vals, na.rm=TRUE), 4), "\n")
Nilai HTMT tertinggi: 0.8131
cat("Status:", ifelse(max(htmt_vals, na.rm=TRUE) < 0.90,
"✔ VALID — semua nilai HTMT < 0.90",
"✘ PERHATIAN — ada nilai HTMT ≥ 0.90"), "\n")
Status: ✔ VALID — semua nilai HTMT < 0.90
HTMT adalah kriteria validitas diskriminan yang lebih sensitif dibanding Fornell-Larcker. Syarat: nilai HTMT < 0.90 (konservatif: < 0.85) untuk setiap pasang konstruk. Nilai HTMT tertinggi = 0.8131, yang berada di bawah ambang batas 0.90, sehingga validitas diskriminan terpenuhi untuk semua pasang konstruk.
fit_idx <- fitMeasures(fit_sem, c(
"chisq","df","pvalue",
"cfi","tli","rfi","nfi","ifi",
"rmsea","rmsea.ci.lower","rmsea.ci.upper",
"srmr","gfi","agfi","aic","bic"
))
fit_table <- data.frame(
Indeks = c("Chi-Square (χ²)", "Degree of Freedom (df)", "P-value (χ²)",
"CFI", "TLI", "RFI", "NFI", "IFI",
"RMSEA", "RMSEA CI Lower", "RMSEA CI Upper",
"SRMR", "GFI", "AGFI", "AIC", "BIC"),
Nilai = round(fit_idx, 4),
Threshold = c("> 0.05", "—", "> 0.05",
"≥ 0.90", "≥ 0.90", "≥ 0.90", "≥ 0.90", "≥ 0.90",
"< 0.08", "—", "—",
"< 0.05", "≥ 0.90", "≥ 0.90",
"Lebih kecil lebih baik", "Lebih kecil lebih baik"),
Status = c(
ifelse(fit_idx["pvalue"] > 0.05, "✔ Baik", "✘ Kurang"),
"—",
ifelse(fit_idx["pvalue"] > 0.05, "✔ Baik", "✘ Kurang"),
ifelse(fit_idx["cfi"] >= 0.90, "✔ Baik", "✘ Kurang"),
ifelse(fit_idx["tli"] >= 0.90, "✔ Baik", "✘ Kurang"),
ifelse(fit_idx["rfi"] >= 0.90, "✔ Baik", "✘ Kurang"),
ifelse(fit_idx["nfi"] >= 0.90, "✔ Baik", "✘ Kurang"),
ifelse(fit_idx["ifi"] >= 0.90, "✔ Baik", "✘ Kurang"),
ifelse(fit_idx["rmsea"] < 0.08, "✔ Baik", "✘ Kurang"),
"—", "—",
ifelse(fit_idx["srmr"] < 0.05, "✔ Baik", "✘ Kurang"),
ifelse(fit_idx["gfi"] >= 0.90, "✔ Baik", "✘ Kurang"),
ifelse(fit_idx["agfi"] >= 0.90, "✔ Baik", "✘ Kurang"),
"—", "—"
)
)
kable(fit_table,
caption="Tabel 10. Indeks Kesesuaian Model (Model Fit)",
align=c("l","c","c","c")) %>%
kable_styling(bootstrap_options=c("striped","hover","condensed"),
full_width=FALSE, font_size=13) %>%
row_spec(which(fit_table$Status == "✔ Baik"), color="#1A5E2A") %>%
row_spec(which(fit_table$Status == "✘ Kurang"), color="#C0392B")
| Indeks | Nilai | Threshold | Status | |
|---|---|---|---|---|
| chisq | Chi-Square (χ²) | 2443.8614 | > 0.05 | ✘ Kurang |
| df | Degree of Freedom (df) | 289.0000 | — | — |
| pvalue | P-value (χ²) | 0.0000 | > 0.05 | ✘ Kurang |
| cfi | CFI | 0.8856 | ≥ 0.90 | ✘ Kurang |
| tli | TLI | 0.8713 | ≥ 0.90 | ✘ Kurang |
| rfi | RFI | 0.8565 | ≥ 0.90 | ✘ Kurang |
| nfi | NFI | 0.8724 | ≥ 0.90 | ✘ Kurang |
| ifi | IFI | 0.8858 | ≥ 0.90 | ✘ Kurang |
| rmsea | RMSEA | 0.0787 | < 0.08 | ✔ Baik |
| rmsea.ci.lower | RMSEA CI Lower | 0.0758 | — | — |
| rmsea.ci.upper | RMSEA CI Upper | 0.0816 | — | — |
| srmr | SRMR | 0.0601 | < 0.05 | ✘ Kurang |
| gfi | GFI | 0.8384 | ≥ 0.90 | ✘ Kurang |
| agfi | AGFI | 0.8037 | ≥ 0.90 | ✘ Kurang |
| aic | AIC | 86315.5268 | Lebih kecil lebih baik | — |
| bic | BIC | 86631.3693 | Lebih kecil lebih baik | — |
Evaluasi goodness-of-fit dilakukan menggunakan berbagai indeks secara bersamaan karena tidak ada satu indeks tunggal yang cukup representatif. Panduan interpretasi:
- CFI, TLI, NFI, IFI, RFI ≥ 0.90 : fit inkremental yang baik (nilai ≥ 0.95 = sangat baik)
- RMSEA < 0.08 : fit yang dapat diterima (< 0.05 = sangat baik)
- SRMR < 0.05 : fit yang baik
- GFI, AGFI ≥ 0.90 : fit absolut yang baik
path_coef <- standardizedSolution(fit_sem) %>%
filter(op == "~") %>%
mutate(
Hipotesis = case_when(
lhs=="AIReadiness" & rhs=="AILiteracy" ~ "H1",
lhs=="AIReadiness" & rhs=="SelfConfidence" ~ "H2",
lhs=="AIReadiness" & rhs=="AIAnxiety" ~ "H3",
lhs=="Kepuasan" & rhs=="AILiteracy" ~ "H4",
lhs=="Kepuasan" & rhs=="SelfConfidence" ~ "H5",
lhs=="Kepuasan" & rhs=="AIAnxiety" ~ "H6",
lhs=="Kepuasan" & rhs=="AIReadiness" ~ "H7",
TRUE ~ "—"
)
) %>%
select(Hipotesis, Dependen=lhs, Independen=rhs,
Beta=est.std, SE=se, z_value=z, p_value=pvalue) %>%
mutate(across(where(is.numeric), ~round(., 4)),
Status = ifelse(p_value <= 0.05, "✔ Signifikan", "✘ Tidak Signifikan"))
kable(path_coef,
caption="Tabel 11. Koefisien Jalur Standardized dan Uji Hipotesis",
align=c("c","l","l","c","c","c","c","l")) %>%
kable_styling(bootstrap_options=c("striped","hover"), full_width=FALSE) %>%
row_spec(which(path_coef$Status == "✔ Signifikan"), color="#1A5E2A", bold=TRUE) %>%
row_spec(which(path_coef$Status == "✘ Tidak Signifikan"), color="#C0392B")
| Hipotesis | Dependen | Independen | Beta | SE | z_value | p_value | Status |
|---|---|---|---|---|---|---|---|
| H1 | AIReadiness | AILiteracy | 0.6531 | 0.0217 | 30.1274 | 0.0000 | ✔ Signifikan |
| H2 | AIReadiness | SelfConfidence | 0.0956 | 0.0259 | 3.6926 | 0.0002 | ✔ Signifikan |
| H3 | AIReadiness | AIAnxiety | -0.1642 | 0.0264 | -6.2072 | 0.0000 | ✔ Signifikan |
| H4 | Kepuasan | AILiteracy | -0.1241 | 0.0367 | -3.3763 | 0.0007 | ✔ Signifikan |
| H5 | Kepuasan | SelfConfidence | 0.7467 | 0.0164 | 45.5155 | 0.0000 | ✔ Signifikan |
| H6 | Kepuasan | AIAnxiety | 0.0608 | 0.0244 | 2.4901 | 0.0128 | ✔ Signifikan |
| H7 | Kepuasan | AIReadiness | 0.1292 | 0.0385 | 3.3541 | 0.0008 | ✔ Signifikan |
Koefisien jalur standardized (β) menunjukkan besaran dan arah pengaruh antar konstruk dalam satuan standar deviasi. Hipotesis diterima apabila p-value ≤ 0.05 (α = 5%). Tanda β positif berarti semakin tinggi variabel independen maka semakin tinggi dependen, dan sebaliknya untuk β negatif.
r2_vals <- lavInspect(fit_sem, "r2")
r2_df <- data.frame(
Konstruk_Endogen = names(r2_vals),
R_Squared = round(r2_vals, 4),
Persen = paste0(round(r2_vals * 100, 2), "%"),
Kategori = case_when(
r2_vals >= 0.67 ~ "Kuat (≥ 0.67)",
r2_vals >= 0.33 ~ "Moderat (0.33–0.67)",
r2_vals >= 0.19 ~ "Lemah (0.19–0.33)",
TRUE ~ "Sangat Lemah (< 0.19)"
)
)
kable(r2_df,
caption="Tabel 12. Koefisien Determinasi R²",
align=c("l","c","c","l")) %>%
kable_styling(bootstrap_options=c("striped","hover"), full_width=FALSE)
| Konstruk_Endogen | R_Squared | Persen | Kategori | |
|---|---|---|---|---|
| L1 | L1 | 0.7187 | 71.87% | Kuat (≥ 0.67) |
| L2 | L2 | 0.7357 | 73.57% | Kuat (≥ 0.67) |
| L3 | L3 | 0.3120 | 31.2% | Lemah (0.19–0.33) |
| L4 | L4 | 0.0679 | 6.79% | Sangat Lemah (< 0.19) |
| L5 | L5 | 0.2657 | 26.57% | Lemah (0.19–0.33) |
| C1 | C1 | 0.7419 | 74.19% | Kuat (≥ 0.67) |
| C2 | C2 | 0.7451 | 74.51% | Kuat (≥ 0.67) |
| C3 | C3 | 0.7908 | 79.08% | Kuat (≥ 0.67) |
| C4 | C4 | 0.7442 | 74.42% | Kuat (≥ 0.67) |
| C5 | C5 | 0.6892 | 68.92% | Kuat (≥ 0.67) |
| A1 | A1 | 0.5551 | 55.51% | Moderat (0.33–0.67) |
| A2 | A2 | 0.5016 | 50.16% | Moderat (0.33–0.67) |
| A3 | A3 | 0.6005 | 60.05% | Moderat (0.33–0.67) |
| A4 | A4 | 0.6565 | 65.65% | Moderat (0.33–0.67) |
| A5 | A5 | 0.6804 | 68.04% | Kuat (≥ 0.67) |
| RE1 | RE1 | 0.5561 | 55.61% | Moderat (0.33–0.67) |
| RE2 | RE2 | 0.5423 | 54.23% | Moderat (0.33–0.67) |
| RE3 | RE3 | 0.5987 | 59.87% | Moderat (0.33–0.67) |
| RE4 | RE4 | 0.5189 | 51.89% | Moderat (0.33–0.67) |
| RE5 | RE5 | 0.2460 | 24.6% | Lemah (0.19–0.33) |
| RE6 | RE6 | 0.2973 | 29.73% | Lemah (0.19–0.33) |
| S1 | S1 | 0.5477 | 54.77% | Moderat (0.33–0.67) |
| S2 | S2 | 0.7474 | 74.74% | Kuat (≥ 0.67) |
| S3 | S3 | 0.3961 | 39.61% | Moderat (0.33–0.67) |
| S4 | S4 | 0.7643 | 76.43% | Kuat (≥ 0.67) |
| S5 | S5 | 0.6677 | 66.77% | Moderat (0.33–0.67) |
| AIReadiness | AIReadiness | 0.5173 | 51.73% | Moderat (0.33–0.67) |
| Kepuasan | Kepuasan | 0.5721 | 57.21% | Moderat (0.33–0.67) |
R² mengukur proporsi varians variabel endogen yang dapat dijelaskan oleh variabel eksogen dalam model. R² ≥ 0.67 dikategorikan kuat, 0.33–0.67 moderat, 0.19–0.33 lemah, dan < 0.19 sangat lemah. Nilai R² untuk AI Readiness menunjukkan seberapa besar variabel AI Literacy, Self-Confidence, dan AI Anxiety secara bersama-sama menjelaskan kesiapan AI mahasiswa; sedangkan R² untuk Kepuasan menunjukkan kemampuan seluruh prediktor (termasuk mediator) dalam menjelaskan kepuasan mahasiswa.
model_mediation <- '
# Outer Model
AILiteracy =~ L1 + L2 + L3 + L4 + L5
SelfConfidence =~ C1 + C2 + C3 + C4 + C5
AIAnxiety =~ A1 + A2 + A3 + A4 + A5
AIReadiness =~ RE1 + RE2 + RE3 + RE4 + RE5 + RE6
Kepuasan =~ S1 + S2 + S3 + S4 + S5
# Inner Model dengan label path
AIReadiness ~ a1*AILiteracy + a2*SelfConfidence + a3*AIAnxiety
Kepuasan ~ b*AIReadiness + c1*AILiteracy + c2*SelfConfidence + c3*AIAnxiety
# Indirect Effects (mediasi melalui AI Readiness)
indirect_L := a1 * b
indirect_SG := a2 * b
indirect_A := a3 * b
# Direct Effects
direct_L := c1
direct_SG := c2
direct_A := c3
# Total Effects
total_L := c1 + (a1 * b)
total_SG := c2 + (a2 * b)
total_A := c3 + (a3 * b)
'
set.seed(123)
fit_med <- sem(model_mediation,
data = data_manifest_clean,
estimator = "ML",
se = "bootstrap",
bootstrap = 1000)
med_params <- parameterEstimates(fit_med,
boot.ci.type = "bca.simple",
standardized = TRUE) %>%
filter(label %in% c("indirect_L","indirect_SG","indirect_A",
"direct_L","direct_SG","direct_A",
"total_L","total_SG","total_A")) %>%
select(Parameter=label, Estimate=est, SE=se,
z_value=z, p_value=pvalue, CI_Lower=ci.lower, CI_Upper=ci.upper) %>%
mutate(
Tipe = case_when(
grepl("indirect", Parameter) ~ "Indirect Effect",
grepl("^direct", Parameter) ~ "Direct Effect",
grepl("total", Parameter) ~ "Total Effect"
),
Jalur = case_when(
grepl("_L$", Parameter) ~ "AI Literacy → (AIReadiness) → Kepuasan",
grepl("_SG$", Parameter) ~ "Self-Confidence → (AIReadiness) → Kepuasan",
grepl("_A$", Parameter) ~ "AI Anxiety → (AIReadiness) → Kepuasan"
),
across(where(is.numeric), ~round(., 4)),
Signifikan = ifelse(p_value <= 0.05, "✔ Signifikan", "✘ Tidak Signifikan")
) %>%
arrange(Jalur, Tipe) %>%
select(Jalur, Tipe, Estimate, SE, z_value, p_value, CI_Lower, CI_Upper, Signifikan)
kable(med_params,
caption="Tabel 13. Hasil Uji Efek Mediasi (Bootstrapping 1000 ulangan)",
align=c("l","l","c","c","c","c","c","c","l")) %>%
kable_styling(bootstrap_options=c("striped","hover","condensed"),
full_width=TRUE, font_size=12) %>%
row_spec(which(med_params$Tipe == "Indirect Effect" &
med_params$Signifikan == "✔ Signifikan"),
background="#D5F5E3", bold=TRUE) %>%
row_spec(which(med_params$Tipe == "Indirect Effect" &
med_params$Signifikan == "✘ Tidak Signifikan"),
background="#FADBD8")
| Jalur | Tipe | Estimate | SE | z_value | p_value | CI_Lower | CI_Upper | Signifikan |
|---|---|---|---|---|---|---|---|---|
| AI Anxiety → (AIReadiness) → Kepuasan | Direct Effect | 0.0955 | 0.0393 | 2.4297 | 0.0151 | 0.0197 | 0.1770 | ✔ Signifikan |
| AI Anxiety → (AIReadiness) → Kepuasan | Indirect Effect | -0.0333 | 0.0119 | -2.8068 | 0.0050 | -0.0633 | -0.0145 | ✔ Signifikan |
| AI Anxiety → (AIReadiness) → Kepuasan | Total Effect | 0.0622 | 0.0394 | 1.5785 | 0.1145 | -0.0166 | 0.1425 | ✘ Tidak Signifikan |
| AI Literacy → (AIReadiness) → Kepuasan | Direct Effect | -0.2610 | 0.0683 | -3.8184 | 0.0001 | -0.4005 | -0.1418 | ✔ Signifikan |
| AI Literacy → (AIReadiness) → Kepuasan | Indirect Effect | 0.1775 | 0.0569 | 3.1195 | 0.0018 | 0.0791 | 0.3095 | ✔ Signifikan |
| AI Literacy → (AIReadiness) → Kepuasan | Total Effect | -0.0835 | 0.0421 | -1.9820 | 0.0475 | -0.1645 | 0.0036 | ✔ Signifikan |
| Self-Confidence → (AIReadiness) → Kepuasan | Direct Effect | 0.6356 | 0.0343 | 18.5128 | 0.0000 | 0.5700 | 0.6991 | ✔ Signifikan |
| Self-Confidence → (AIReadiness) → Kepuasan | Indirect Effect | 0.0105 | 0.0045 | 2.3563 | 0.0185 | 0.0043 | 0.0232 | ✔ Signifikan |
| Self-Confidence → (AIReadiness) → Kepuasan | Total Effect | 0.6461 | 0.0352 | 18.3796 | 0.0000 | 0.5764 | 0.7100 | ✔ Signifikan |
Interpretasi Efek Mediasi:
Pengujian mediasi menggunakan metode Bootstrapping 1000 ulangan dengan Bias-Corrected and Accelerated (BCa) confidence interval. Mediasi terjadi apabila indirect effect signifikan (p ≤ 0.05 atau CI tidak mencakup angka 0). Jenis mediasi ditentukan sebagai berikut:
Kondisi Jenis Mediasi Indirect effect signifikan + Direct effect tidak signifikan Full Mediation (mediasi penuh) Indirect effect signifikan + Direct effect signifikan Partial Mediation (mediasi sebagian) Indirect effect tidak signifikan Tidak ada mediasi Implikasi: Mediasi penuh berarti pengaruh variabel eksogen terhadap kepuasan sepenuhnya berjalan melalui AI Readiness, sedangkan mediasi sebagian berarti terdapat jalur pengaruh langsung yang juga bermakna.
semPaths(
fit_sem,
what = "std",
whatLabels = "std",
layout = "tree2",
style = "ram",
rotation = 2,
edge.label.cex = 0.70,
node.label.cex = 0.80,
label.prop = 0.9,
residuals = TRUE,
intercepts = FALSE,
nCharNodes = 0,
color = list(lat="#AED6F1", man="#A9DFBF"),
edge.color = "gray30",
border.width = 1.5,
esize = 2,
asize = 3,
mar = c(3,3,3,3)
)
title("Path Diagram SEM — Model Lengkap (Koefisien Standardized)",
cex.main=1.1, font.main=2)
semPaths(
fit_sem,
what = "std",
whatLabels = "std",
layout = "tree2",
style = "lisrel",
rotation = 2,
structural = TRUE,
edge.label.cex = 1.0,
node.label.cex = 1.0,
residuals = FALSE,
intercepts = FALSE,
nCharNodes = 0,
color = list(lat="#AED6F1"),
edge.color = "steelblue",
border.width = 2,
esize = 3,
asize = 4,
mar = c(3,3,3,3)
)
title("Path Diagram — Inner Model / Structural Model",
cex.main=1.1, font.main=2)
Berdasarkan hasil analisis menggunakan Structural Equation Modeling (SEM) dengan metode estimasi Maximum Likelihood, diperoleh beberapa kesimpulan utama terkait hubungan antar konstruk dalam penelitian ini.
Pada evaluasi model pengukuran (outer model), seluruh konstruk menunjukkan kualitas pengukuran yang baik. Hal ini ditunjukkan oleh nilai loading factor yang memadai, Average Variance Extracted (AVE) yang memenuhi kriteria validitas konvergen, serta nilai Composite Reliability dan Cronbach’s Alpha yang berada di atas batas minimum 0.70. Selain itu, pengujian validitas diskriminan menggunakan kriteria Fornell-Larcker dan HTMT menunjukkan bahwa masing-masing konstruk mampu merepresentasikan konsep yang berbeda secara memadai. Dengan demikian, instrumen penelitian dinyatakan valid dan reliabel untuk digunakan dalam analisis SEM.
Pada evaluasi model struktural (inner model), hasil pengujian goodness-of-fit menunjukkan bahwa model memiliki tingkat kesesuaian yang dapat diterima dalam merepresentasikan hubungan antar variabel laten. Pengujian hipotesis menunjukkan adanya pengaruh langsung maupun tidak langsung antar konstruk, termasuk peran AI Readiness sebagai variabel mediasi dalam hubungan antara faktor-faktor individual mahasiswa dengan Satisfaction dan Behavioural Intention terhadap penggunaan teknologi AI.
Secara praktis, hasil penelitian ini menunjukkan bahwa peningkatan literasi AI, kepercayaan diri, motivasi, dan kesiapan mahasiswa dalam menggunakan teknologi AI menjadi faktor penting dalam meningkatkan kepuasan serta niat perilaku mahasiswa terhadap penggunaan AI dalam proses pembelajaran. Oleh karena itu, institusi pendidikan tinggi perlu merancang strategi pembelajaran dan pengembangan kompetensi digital yang mampu mendukung kesiapan mahasiswa dalam menghadapi transformasi pendidikan berbasis kecerdasan buatan.