Prediktor Profil Kebutuhan Psikologis Dasar, Strategi Motivasi, dan Kesejahteraan Psikologis Siswa PISA 2022, Singapura
Penelitian ini mengintegrasikan dua landasan teoritik yang saling melengkapi.
Teacher-Student Relationship Theory (Pianta, 1999)
menekankan bahwa kualitas relasi guru-siswa diukur melalui dimensi
kedekatan, konflik, dan ketergantungan merupakan prediktor penting
terhadap penyesuaian akademik dan sosial emosional siswa. Dalam PISA
2022, relasi ini dioperasionalisasikan melalui dua indeks:
RELATST (persepsi relasi guru-siswa secara umum) dan
TEACHSUP (dukungan guru matematika di kelas).
Self-Determination Theory (Deci & Ryan, 2000) menyatakan bahwa motivasi dan kesejahteraan psikologis yang optimal muncul ketika tiga kebutuhan psikologis dasar (basic psychological needs) terpenuhi:
| Kebutuhan | Variabel PISA | Deskripsi |
|---|---|---|
| Kompetensi | MATHEFF |
Self-efficacy matematika |
| Keterkaitan | BELONG |
Rasa memiliki sekolah |
| Otonomi | DISCLIM |
Iklim disiplin kelas |
Integrasi teori: Guru yang membangun relasi positif (Pianta) menjadi fasilitator utama terpenuhinya ketiga kebutuhan SDT, yang pada gilirannya mendorong motivasi intrinsik dan kesejahteraan psikologis siswa.
H1 — Relasi Guru-Siswa → Kebutuhan Psikologis Dasar
H2 — Relasi Guru-Siswa → Strategi Motivasi
H3 — Relasi Guru-Siswa → Kesejahteraan Psikologis
H4 — Mediasi Kompetensi
H5 — Mediasi Keterkaitan
Bagian ini menyiapkan semua pustaka R yang diperlukan, mengatur tema
visual, dan memuat data PISA 2022 untuk Singapura.Saya memilih
paket-paket seperti tidyverse untuk manipulasi data,
psych untuk statistik deskriptif, corrplot dan
ggcorrplot untuk visualisasi korelasi, serta
mediation untuk analisis mediasi. Data diimpor dari berkas
CSV yang berisi sampel siswa Singapura, kemudian dilakukan pembersihan
dan seleksi variabel.
suppressPackageStartupMessages({
library(tidyverse)
library(psych)
library(corrplot)
library(ggcorrplot)
library(GGally)
library(lm.beta)
library(car)
library(viridis)
library(cluster)
library(factoextra)
library(ggridges)
library(patchwork)
library(ggbeeswarm)
library(scales)
library(mediation)
library(knitr)
library(kableExtra)
})Mendefinisikan tema pisa_theme agar seluruh grafik
memiliki tampilan minimalis yang konsisten. Palet warna khusus
disediakan untuk profil (Rendah/Sedang/Tinggi) dan gender.
pisa_theme <- theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 14, color = "#000"),
plot.subtitle = element_text(size = 10, color = "#000", margin = margin(b = 8)),
plot.caption = element_text(size = 8, color = "#000", hjust = 0),
axis.title = element_text(size = 10),
legend.position = "bottom",
legend.title = element_text(face = "bold", size = 9),
panel.grid.minor = element_blank(),
panel.grid.major = element_line(color = "grey85"),
strip.text = element_text(face = "bold"),
strip.background = element_rect(fill = "#ffffff", color = NA),
plot.background = element_rect(fill = "white", color = NA)
)
theme_set(pisa_theme)
COL_PROFIL <- c("Rendah" = "#e63946", "Sedang" = "#f4a261", "Tinggi" = "#2a9d8f")
COL_GENDER <- c("Female" = "#fc62bd", "Male" = "#457b9d")
COL_DIV <- colorRampPalette(c("#d62728","blue","#1a9850"))(200)Data mentah PISA memiliki ratusan variabel.Saya hanya memilih
variabel yang relevan dengan kerangka teori. Indeks psikologis PISA
(seperti RELATST, MATHEFF, dll.) sudah
distandardisasi oleh OECD (rata-rata ≈ 0, SD ≈ 1 untuk negara OECD).
Saya juga menghitung rata-rata dari 10 plausible values matematika
(PV1MATH–PV10MATH) untuk mendapatkan skor
matematika tunggal (MATH_AVG). Variabel kontrol yang
digunakan adalah status sosial-ekonomi (ESCS) dan gender
(GENDER). Setelah memfilter kasus lengkap (complete cases),
diperoleh sampel analitik.
DATA_PATH <- "data_pisa_stu_22_sgp.csv"
if (!file.exists(DATA_PATH)) stop("File tidak ditemukan: ", DATA_PATH)
df_raw <- read.csv(DATA_PATH, stringsAsFactors = FALSE)
VAR_LABELS <- c(
RELATST = "Relasi Guru-Siswa",
TEACHSUP = "Dukungan Guru",
DISCLIM = "Iklim Disiplin (Otonomi)",
MATHEFF = "Self-Efficacy Mat. (Kompetensi)",
BELONG = "Rasa Memiliki Sekolah (Keterkaitan)",
MATHPREF = "Preferensi Matematika",
MATHPERS = "Ketekunan Matematika",
MATHEASE = "Kemudahan Matematika",
MATHMOT = "Motivasi Matematika",
ANXMAT = "Kecemasan Matematika",
FEELSAFE = "Rasa Aman di Sekolah",
MATH_AVG = "Skor Matematika (PISA)",
ESCS = "Status Sosial-Ekonomi (ESCS)"
)
ANALYTIC_VARS <- c("RELATST","TEACHSUP","DISCLIM","MATHEFF","BELONG",
"MATHPREF","MATHPERS","MATHEASE","MATHMOT","ANXMAT",
"FEELSAFE","ESCS")
df <- df_raw %>%
dplyr::select(CNTSTUID, ST004D01T, ESCS,
RELATST, TEACHSUP, DISCLIM,
MATHEFF, BELONG, MATHPREF, MATHPERS, MATHEASE, MATHMOT, ANXMAT,
FEELSAFE, paste0("PV", 1:10, "MATH"), W_FSTUWT) %>%
rename(GENDER = ST004D01T) %>%
mutate(
GENDER = factor(GENDER, levels = c(1, 2), labels = c("Female", "Male")),
MATH_AVG = rowMeans(across(starts_with("PV")), na.rm = TRUE)
)
# Listwise deletion
df_complete <- df %>%
filter(complete.cases(across(all_of(ANALYTIC_VARS))),
!is.na(GENDER), !is.na(MATH_AVG))| Keterangan | Nilai |
|---|---|
| Total sampel awal | 6606 |
| N analitik (complete cases) | 6478 |
| Persentase dipertahankan | 98.1% |
| Female | 3187 |
| Male | 3291 |
Data mentah ini memiliki 6606 atau total sampel awal.Setelah membuang beberapa sampel awal dengan data hilang pada variabel psikologis/kontrol, tersisa 6478 atau kasus lengkap.Semua indeks PISA merupakan skor skala (WLE) yang dihasilkan oleh OECD.Saya memilih listwise deletion karena proporsi data hilang kecil dan analisis bersifat eksploratorik.’Plausible values’ digabung dengan rata-rata sederhana untuk memudahkan analisis korelasi/regresi; pendekatan yang lebih tepat (seperti Rubins’ rule) tidak digunakan demi kesederhanaan.
Bagian ini menyajikan statistik deskriptif untuk semua variabel utama yaitu rata-rata, standar deviasi, rentang, dan kemencengan (skewness). Tujuannya untuk memahami distribusi masing-masing indeks psikologis dan melihat kecenderungan sentral serta variabilitas data.
DESC_VARS <- c("RELATST","TEACHSUP","DISCLIM","MATHEFF","BELONG",
"MATHPREF","MATHPERS","MATHEASE","MATHMOT","ANXMAT",
"FEELSAFE","MATH_AVG","ESCS")
desc_raw <- df_complete %>%
dplyr::select(all_of(DESC_VARS)) %>%
psych::describe()
as.data.frame(desc_raw) %>%
round(3) %>%
dplyr::select(n, mean, sd, min, max, skew, kurtosis) %>%
rownames_to_column("Kode") %>%
mutate(Variabel = VAR_LABELS[Kode]) %>%
dplyr::select(Variabel, n, mean, sd, min, max, skew) %>%
kable(caption = "Statistik Deskriptif Variabel Penelitian", digits = 3) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))| Variabel | n | mean | sd | min | max | skew |
|---|---|---|---|---|---|---|
| Relasi Guru-Siswa | 6478 | 0.207 | 0.975 | -9.990 | 3.310 | 0.240 |
| Dukungan Guru | 6478 | 0.383 | 0.982 | -2.910 | 1.556 | -0.404 |
| Iklim Disiplin (Otonomi) | 6478 | 0.218 | 0.876 | -2.493 | 1.851 | -0.128 |
| Self-Efficacy Mat. (Kompetensi) | 6478 | 0.238 | 1.147 | -3.508 | 2.356 | -0.050 |
| Rasa Memiliki Sekolah (Keterkaitan) | 6478 | -0.226 | 0.855 | -3.258 | 2.756 | 1.069 |
| Preferensi Matematika | 6478 | 0.169 | 0.375 | 0.000 | 1.000 | 1.769 |
| Ketekunan Matematika | 6478 | 0.209 | 0.920 | -3.095 | 2.834 | 0.427 |
| Kemudahan Matematika | 6478 | 0.184 | 0.387 | 0.000 | 1.000 | 1.632 |
| Motivasi Matematika | 6478 | 0.029 | 0.167 | 0.000 | 1.000 | 5.660 |
| Kecemasan Matematika | 6478 | 0.163 | 1.143 | -2.394 | 2.635 | -0.255 |
| Rasa Aman di Sekolah | 6478 | 0.173 | 0.946 | -2.789 | 1.125 | -0.428 |
| Skor Matematika (PISA) | 6478 | 575.379 | 98.758 | 262.564 | 842.722 | -0.306 |
| Status Sosial-Ekonomi (ESCS) | 6478 | 0.293 | 0.831 | -3.549 | 3.278 | -0.765 |
Umumnya rata-rata indeks psikologis Singapura berada di bawah
rata-rata OECD (0), misalnya RELATST dan
BELONG cenderung negatif, mencerminkan karakteristik
konteks pendidikan Singapura yang kompetitif.
ANXMAT (kecemasan matematika) memiliki kemencengan
positif, menunjukkan distribusi menjulur ke kanan (banyak siswa
cemas).
Skor matematika (MATH_AVG) tinggi (≈ 570), sesuai dengan
reputasi Singapura.
Visualisasi ridge plot menampilkan distribusi semua variabel psikologis kunci dalam satu panel, dengan garis tengah menunjukkan median. Plot ini memudahkan perbandingan bentuk distribusi dan lokasi sentral.
df_complete %>%
dplyr::select(RELATST, TEACHSUP, DISCLIM, MATHEFF, BELONG,
MATHPERS, ANXMAT, FEELSAFE) %>%
pivot_longer(everything(), names_to = "Var", values_to = "Skor") %>%
mutate(Label = VAR_LABELS[Var]) %>%
ggplot(aes(Skor, fct_reorder(Var, Skor, mean), fill = ..density..)) +
geom_density_ridges_gradient(scale = 2.5, rel_min_height = 0.01,
quantile_lines = TRUE, quantiles = 2,
color = "white", linewidth = 0.4) +
scale_fill_viridis_c(option = "plasma") +
scale_y_discrete(labels = VAR_LABELS) +
labs(title = "Distribusi Variabel Psikologis",
subtitle = "Garis tengah = median | PISA 2022 Singapura",
x = "Skor (Indeks PISA)", y = NULL,
fill = "Density",
caption = paste0("N = ", nrow(df_complete)))Grafik ini membandingkan rata-rata setiap variabel psikologis antara siswa perempuan dan laki-laki, dilengkapi dengan interval kepercayaan 95%. Ini berguna untuk mengidentifikasi apakah terdapat perbedaan gender yang konsisten.
df_complete %>%
dplyr::select(GENDER, RELATST, TEACHSUP, DISCLIM, MATHEFF, BELONG,
MATHPERS, ANXMAT, FEELSAFE) %>%
pivot_longer(-GENDER, names_to = "Var", values_to = "Skor") %>%
group_by(GENDER, Var) %>%
summarise(M = mean(Skor), SE = sd(Skor) / sqrt(n()), .groups = "drop") %>%
mutate(Label = VAR_LABELS[Var]) %>%
ggplot(aes(reorder(Label, M), M, color = GENDER, group = GENDER)) +
geom_errorbar(aes(ymin = M - 1.96 * SE, ymax = M + 1.96 * SE),
width = 0.25, linewidth = 0.7, position = position_dodge(0.5)) +
geom_point(size = 3, position = position_dodge(0.5)) +
geom_line(position = position_dodge(0.5), linewidth = 0.5,
linetype = "dashed", alpha = 0.5) +
scale_color_manual(values = COL_GENDER, name = NULL) +
coord_flip() +
labs(title = "Perbedaan Gender pada Variabel Psikologis",
subtitle = "Titik = mean; garis = 95% CI",
x = NULL, y = "Rata-rata (Indeks PISA)")Perempuan umumnya melaporkan kecemasan matematika lebih tinggi dan self-efficacy lebih rendah, sedangkan laki-laki sedikit lebih tinggi pada DISCLIM dan MATHPERS. Perbedaan ini konsisten dengan literatur internasional mengenai gender dan matematika.
Analisis korelasi Pearson digunakan untuk melihat asosiasi linear antar semua variabel psikologis. Matriks korelasi disajikan dalam bentuk heatmap, corrplot klasik, tabel numerik, dan matriks sebar (scatterplot matrix). Hal ini memberikan gambaran awal mengenai pola hubungan dan validitas konvergen antar konstruk.
COR_VARS <- c("RELATST","TEACHSUP","DISCLIM","MATHEFF","BELONG",
"MATHPREF","MATHPERS","MATHEASE","MATHMOT","ANXMAT","FEELSAFE")
cor_data <- df_complete %>% dplyr::select(all_of(COR_VARS))
cor_matrix <- cor(cor_data, use = "complete.obs", method = "pearson")
cor_pvals <- psych::corr.test(cor_data, method = "pearson")$pHeatmap ini menampilkan korelasi dengan warna merah (negatif) hingga hijau (positif). Hanya koefisien yang signifikan pada α = 0.05 yang ditampilkan; sel yang tidak signifikan dikosongkan.
cm_lbl <- cor_matrix
colnames(cm_lbl) <- rownames(cm_lbl) <- VAR_LABELS[COR_VARS]
ggcorrplot(cm_lbl, hc.order = TRUE, type = "lower",
lab = TRUE, lab_size = 2.8,
p.mat = cor_pvals, sig.level = 0.05, insig = "blank",
outline.color = "white",
colors = c("#d62728", "white", "#1a9850"),
title = "Heatmap Korelasi Pearson (sel kosong = p > .05)",
ggtheme = theme_minimal(base_size = 10)) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))Versi lain dari visualisasi matriks korelasi dengan pengurutan hierarkis, memberikan perspektif pengelompokan variabel.
par(mar = c(0, 0, 4, 0))
corrplot(cor_matrix,
method = "color", type = "upper", order = "hclust",
addCoef.col = "black", number.cex = 0.60,
tl.cex = 0.75, tl.col = "black", col = COL_DIV,
title = "Matriks Korelasi Pearson", mar = c(0, 0, 3, 0))Tabel lengkap koefisien korelasi memudahkan pengecekan numerik.
round(cor_matrix, 3) %>%
as.data.frame() %>%
kable(caption = "Matriks Korelasi Pearson", digits = 3) %>%
kable_styling(bootstrap_options = c("striped","condensed"), font_size = 11)| RELATST | TEACHSUP | DISCLIM | MATHEFF | BELONG | MATHPREF | MATHPERS | MATHEASE | MATHMOT | ANXMAT | FEELSAFE | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| RELATST | 1.000 | 0.383 | 0.141 | 0.172 | 0.370 | 0.004 | 0.255 | 0.032 | -0.027 | -0.144 | 0.315 |
| TEACHSUP | 0.383 | 1.000 | 0.193 | 0.140 | 0.198 | 0.022 | 0.261 | 0.028 | 0.005 | -0.104 | 0.197 |
| DISCLIM | 0.141 | 0.193 | 1.000 | 0.173 | 0.153 | 0.004 | 0.171 | 0.007 | -0.008 | -0.145 | 0.113 |
| MATHEFF | 0.172 | 0.140 | 0.173 | 1.000 | 0.189 | 0.091 | 0.307 | 0.169 | -0.011 | -0.387 | 0.258 |
| BELONG | 0.370 | 0.198 | 0.153 | 0.189 | 1.000 | -0.001 | 0.195 | 0.011 | -0.022 | -0.196 | 0.330 |
| MATHPREF | 0.004 | 0.022 | 0.004 | 0.091 | -0.001 | 1.000 | 0.100 | 0.434 | 0.244 | -0.164 | 0.034 |
| MATHPERS | 0.255 | 0.261 | 0.171 | 0.307 | 0.195 | 0.100 | 1.000 | 0.092 | 0.000 | -0.232 | 0.162 |
| MATHEASE | 0.032 | 0.028 | 0.007 | 0.169 | 0.011 | 0.434 | 0.092 | 1.000 | 0.211 | -0.227 | 0.029 |
| MATHMOT | -0.027 | 0.005 | -0.008 | -0.011 | -0.022 | 0.244 | 0.000 | 0.211 | 1.000 | -0.062 | -0.021 |
| ANXMAT | -0.144 | -0.104 | -0.145 | -0.387 | -0.196 | -0.164 | -0.232 | -0.227 | -0.062 | 1.000 | -0.121 |
| FEELSAFE | 0.315 | 0.197 | 0.113 | 0.258 | 0.330 | 0.034 | 0.162 | 0.029 | -0.021 | -0.121 | 1.000 |
Menampilkan hubungan bivariat antara prediktor relasi guru, kebutuhan psikologis, dan outcome utama pada sampel acak 1500 siswa.
set.seed(1)
df_complete %>%
sample_n(min(1500, nrow(df_complete))) %>%
dplyr::select(RELATST, TEACHSUP, MATHEFF, BELONG, FEELSAFE, ANXMAT) %>%
rename_with(~ VAR_LABELS[.x]) %>%
ggpairs(
lower = list(continuous = wrap("points", alpha = 0.12, size = 0.5, color = "#457b9d")),
diag = list(continuous = wrap("densityDiag", fill = "#457b9d", alpha = 0.5, color = "white")),
upper = list(continuous = wrap("cor", size = 3, color = "#1a1a2e"))
) +
labs(title = "Scatter Matrix: Prediktor & Outcome Utama",
subtitle = "n = 1500 sampel acak")Temuan utama dari korelasi atau hubungan ini adalah
RELATST dan TEACHSUP berkorelasi positif
sedang dengan MATHEFF (r ≈ 0.20–0.25) dan BELONG
(r ≈ 0.30), mendukung H1.
ANXMAT berkorelasi negatif dengan kedua prediktor relasi
guru, sesuai prediksi H2c.
FEELSAFE berkorelasi positif cukup kuat dengan
BELONG (r ≈ 0.35), memberi dasar untuk uji mediasi
H5.
Disini saya mencoba untuk mengelompokkan siswa ke dalam profil
kebutuhan psikologis dasar berdasarkan tiga indikator SDT Kompetensi
yaitu (MATHEFF), Keterkaitan (BELONG), dan
Otonomi (DISCLIM). Variabel-variabel ini distandardisasi
terlebih dahulu agar memiliki bobot setara dalam analisis cluster.
Metode yang digunakan adalah K-Means dengan jumlah cluster optimal
ditentukan melalui gabungan kriteria elbow (WSS) dan silhouette.
PROF_VARS <- c("MATHEFF", "BELONG", "DISCLIM")
df_scaled <- df_complete %>%
dplyr::select(all_of(PROF_VARS)) %>%
scale() %>%
as.data.frame()
set.seed(42)
wss_v <- map_dbl(2:7, ~ kmeans(df_scaled, centers = .x, nstart = 25)$tot.withinss)
sil_v <- map_dbl(2:7, function(k) {
km <- kmeans(df_scaled, centers = k, nstart = 25)
idx <- sample(nrow(df_scaled), 1000)
mean(silhouette(km$cluster[idx], dist(df_scaled[idx, ]))[, 3])
})Penentuan jumlah kelompok atau cluster dengan cara menghitung WSS (within-cluster sum of squares) dan lebar silhouette rata-rata untuk k = 2 hingga 7, lalu menormalisasi kedua metrik ke rentang [0,1]. Titik temu antara penurunan WSS yang melambat dan silhouette tertinggi menyarankan 3 cluster sebagai solusi optimal.
tibble(k = 2:7,
WSS = rescale(wss_v, to = c(0, 1)),
Silhouette = rescale(sil_v, to = c(0, 1))) %>%
pivot_longer(-k, names_to = "Kriteria", values_to = "Nilai") %>%
ggplot(aes(k, Nilai, color = Kriteria, group = Kriteria)) +
geom_line(linewidth = 1.2) + geom_point(size = 3.5) +
geom_vline(xintercept = 3, linetype = "dashed", color = "#555") +
annotate("text", x = 3.1, y = 0.96, label = "k = 3 (dipilih)",
hjust = 0, size = 3.5) +
scale_color_manual(values = c(WSS = "#e63946", Silhouette = "#2a9d8f")) +
scale_x_continuous(breaks = 2:7) +
labs(title = "Penentuan Cluster Optimal: Elbow + Silhouette",
subtitle = "Kedua kriteria dinormalisasi ke [0,1]",
x = "k", y = "Nilai (dinormalisasi)", color = "Kriteria")set.seed(42)
km3 <- kmeans(df_scaled, centers = 3, nstart = 50, iter.max = 200)
df_complete$PROFIL <- factor(km3$cluster)
# Label berdasarkan rata-rata MATHEFF
ord <- df_complete %>%
group_by(PROFIL) %>%
summarise(m = mean(MATHEFF), .groups = "drop") %>%
arrange(m)
LM <- setNames(c("Rendah", "Sedang", "Tinggi"), as.character(ord$PROFIL))
df_complete <- df_complete %>%
mutate(PROFIL_LBL = factor(LM[as.character(PROFIL)],
levels = c("Rendah", "Sedang", "Tinggi")))Interpretasi profil
Rendah: Siswa dengan self-efficacy, rasa memiliki, dan persepsi disiplin yang rendah.
Sedang: Profil rata-rata pada ketiga dimensi.
Tinggi: Siswa yang merasa kompeten, terhubung dengan sekolah, dan mengalami iklim disiplin yang positif.
profile_summary <- df_complete %>%
group_by(Profil = PROFIL_LBL) %>%
summarise(
N = n(),
`%` = round(n() / nrow(df_complete) * 100, 1),
MATHEFF = round(mean(MATHEFF), 3),
BELONG = round(mean(BELONG), 3),
DISCLIM = round(mean(DISCLIM), 3),
RELATST = round(mean(RELATST), 3),
TEACHSUP = round(mean(TEACHSUP), 3),
ANXMAT = round(mean(ANXMAT), 3),
FEELSAFE = round(mean(FEELSAFE), 3),
`Skor Matematika` = round(mean(MATH_AVG), 1)
)
profile_summary %>%
kable(caption = "Ringkasan Rata-rata per Profil") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed")) %>%
column_spec(1, bold = TRUE, color = c("#e63946", "#f4a261", "#2a9d8f"))| Profil | N | % | MATHEFF | BELONG | DISCLIM | RELATST | TEACHSUP | ANXMAT | FEELSAFE | Skor Matematika |
|---|---|---|---|---|---|---|---|---|---|---|
| Rendah | 3034 | 46.8 | -0.442 | -0.546 | -0.348 | -0.014 | 0.146 | 0.492 | -0.081 | 535.2 |
| Sedang | 2634 | 40.7 | 0.826 | -0.358 | 0.834 | 0.237 | 0.536 | -0.063 | 0.276 | 617.1 |
| Tinggi | 810 | 12.5 | 0.869 | 1.406 | 0.332 | 0.938 | 0.777 | -0.332 | 0.792 | 590.0 |
Tabel ini memperlihatkan bahwa profil “Tinggi” secara konsisten memiliki skor lebih tinggi pada semua variabel adaptif (relasi guru, motivasi, rasa aman) dan skor lebih rendah pada kecemasan matematika, serta skor matematika tertinggi. Profil “Rendah” menunjukkan pola sebaliknya.
Radar chart menampilkan posisi z-score rata-rata setiap profil pada enam dimensi kunci. Pola yang melebar pada profil “Tinggi” menandakan keunggulan di semua aspek.
SPIDER_VARS <- c(Kompetensi = "MATHEFF",
Keterkaitan = "BELONG",
Otonomi = "DISCLIM",
Motivasi = "MATHPREF",
Ketekunan = "MATHPERS",
Wellbeing = "FEELSAFE")
df_complete %>%
group_by(PROFIL_LBL) %>%
summarise(across(all_of(SPIDER_VARS), mean, na.rm = TRUE),
.groups = "drop") %>%
mutate(across(-PROFIL_LBL, ~ as.numeric(scale(.)))) %>%
pivot_longer(-PROFIL_LBL, names_to = "Var", values_to = "z") %>%
mutate(Dimensi = VAR_LABELS[Var]) %>%
ggplot(aes(Dimensi, z, color = PROFIL_LBL,
group = PROFIL_LBL, fill = PROFIL_LBL)) +
geom_polygon(alpha = 0.12, linewidth = 1.2) +
geom_point(size = 3) +
geom_hline(yintercept = 0, linetype = "dashed", color = "#aaa") +
coord_polar() +
scale_color_manual(values = COL_PROFIL, name = "Profil") +
scale_fill_manual(values = COL_PROFIL, name = "Profil") +
labs(title = "Profil SDT – Radar Chart",
subtitle = "z-score rata-rata kelompok",
x = NULL, y = "z-score") +
theme(axis.text.x = element_text(face = "bold", size = 10),
axis.text.y = element_blank(), axis.title = element_blank())Alternatif radar chart yang menampilkan profil sebagai garis, memudahkan perbandingan antar profil pada setiap dimensi.
df_complete %>%
group_by(PROFIL_LBL) %>%
summarise(across(all_of(SPIDER_VARS), mean, na.rm = TRUE),
.groups = "drop") %>%
mutate(across(-PROFIL_LBL, ~ as.numeric(scale(.)))) %>%
pivot_longer(-PROFIL_LBL, names_to = "Var", values_to = "z") %>%
mutate(Dimensi = VAR_LABELS[Var]) %>%
ggplot(aes(Dimensi, z, color = PROFIL_LBL, group = PROFIL_LBL)) +
geom_line(linewidth = 1.3) +
geom_point(size = 3.5) +
geom_hline(yintercept = 0, linetype = "dashed", color = "#aaa") +
scale_color_manual(values = COL_PROFIL, name = "Profil") +
labs(title = "Profil SDT – Line Chart Paralel",
x = NULL, y = "z-score rata-rata")Distribusi setiap variabel psikologis di dalam masing-masing profil ditampilkan dengan kombinasi violin (bentuk distribusi) dan boxplot (kuartil). Profil “Tinggi” tidak hanya memiliki rata-rata lebih tinggi, tetapi juga variasi yang lebih kecil pada variabel positif.
df_complete %>%
dplyr::select(PROFIL_LBL, RELATST, TEACHSUP, MATHEFF, BELONG, ANXMAT, FEELSAFE) %>%
pivot_longer(-PROFIL_LBL, names_to = "Var", values_to = "Skor") %>%
mutate(Label = VAR_LABELS[Var]) %>%
ggplot(aes(PROFIL_LBL, Skor, fill = PROFIL_LBL)) +
geom_violin(alpha = 0.5, color = "white", linewidth = 0.4) +
geom_boxplot(width = 0.12, alpha = 0.9, outlier.shape = NA,
color = "#333", linewidth = 0.4) +
facet_wrap(~ Label, scales = "free_y", ncol = 3) +
scale_fill_manual(values = COL_PROFIL, name = "Profil") +
labs(title = "Distribusi Variabel per Profil: Violin + Boxplot",
subtitle = "Violin = distribusi; boxplot = Q1, median, Q3",
x = "Profil", y = "Skor PISA")Plot beeswarm menampilkan titik data individual (100 sampel acak per profil) sehingga dapat melihat sebaran dan overlap antar profil.
set.seed(7)
df_complete %>%
dplyr::select(PROFIL_LBL, RELATST, TEACHSUP, MATHEFF, BELONG, ANXMAT, FEELSAFE) %>%
pivot_longer(-PROFIL_LBL, names_to = "Var", values_to = "Skor") %>%
mutate(Label = VAR_LABELS[Var]) %>%
group_by(PROFIL_LBL, Label) %>%
slice_sample(n = 100) %>% ungroup() %>%
ggplot(aes(PROFIL_LBL, Skor, color = PROFIL_LBL)) +
geom_beeswarm(size = 0.9, alpha = 0.5, cex = 1.2) +
stat_summary(fun = mean, geom = "point", size = 5, shape = 18,
color = "#1a1a2e") +
stat_summary(fun.data = mean_se, geom = "errorbar",
width = 0.25, linewidth = 0.8, color = "#1a1a2e") +
facet_wrap(~ Label, scales = "free_y", ncol = 3) +
scale_color_manual(values = COL_PROFIL, name = "Profil") +
labs(title = "Sebaran Individual per Profil (Beeswarm)",
subtitle = "Berlian hitam = mean ± SE | 100 sampel acak",
x = "Profil", y = "Skor")Heatmap ini menunjukkan posisi relatif setiap profil pada semua variabel melalui z-score, sekaligus menampilkan rata-rata skor mentah.
ANOVA_VARS <- c("RELATST","TEACHSUP","MATHEFF","BELONG","DISCLIM",
"MATHPREF","MATHPERS","ANXMAT","FEELSAFE","MATH_AVG")
heat_df <- df_complete %>%
dplyr::select(PROFIL_LBL, all_of(ANOVA_VARS)) %>%
pivot_longer(-PROFIL_LBL, names_to = "Var", values_to = "Skor") %>%
group_by(PROFIL_LBL, Var) %>%
summarise(M = mean(Skor), .groups = "drop") %>%
group_by(Var) %>%
mutate(z = as.numeric(scale(M))) %>%
ungroup() %>%
mutate(Label = VAR_LABELS[Var])
heat_df %>%
ggplot(aes(PROFIL_LBL, reorder(Label, z), fill = z, label = round(M, 2))) +
geom_tile(color = "white", linewidth = 0.6) +
geom_text(size = 3.3, color = "white", fontface = "bold") +
scale_fill_gradient2(low = "#d62728", mid = "white", high = "#1a9850",
midpoint = 0, name = "z-score") +
labs(title = "Heatmap Profil – Skor Rata-rata",
subtitle = "Angka = skor mentah PISA; warna = posisi relatif antar profil",
x = "Profil", y = NULL)Distribusi skor matematika PISA untuk setiap profil. Terlihat bahwa profil “Tinggi” memiliki median skor matematika paling tinggi dan distribusi yang bergeser ke kanan.
ggplot(df_complete, aes(MATH_AVG, PROFIL_LBL, fill = PROFIL_LBL)) +
geom_density_ridges(alpha = 0.75, scale = 1.6,
quantile_lines = TRUE, quantiles = c(.25, .5, .75),
color = "white", linewidth = 0.5) +
scale_fill_manual(values = COL_PROFIL, name = "Profil") +
labs(title = "Distribusi Skor Matematika per Profil",
subtitle = "Garis vertikal = Q1, median, Q3",
x = "Skor Matematika PISA", y = "Profil")Untuk menguji H1–H3, saya mencoba menjalankan tujuh model regresi
linear berganda dengan masing-masing outcome seperti
MATHEFF, BELONG, DISCLIM,
MATHPREF, MATHPERS, ANXMAT, dan
FEELSAFE. Prediktor utama pengujian ini adalah
RELATST dan TEACHSUP, dengan kovariat
ESCS dan GENDER sebagai kontrol. Model
dieksekusi dengan fungsi lm() pada data lengkap.
Model: Outcome ~ RELATST + TEACHSUP + ESCS + GENDER
run_reg <- function(outcome, data) {
lm(as.formula(paste(outcome, "~ RELATST + TEACHSUP + ESCS + GENDER")),
data = data)
}
models_list <- list(
MATHEFF = run_reg("MATHEFF", df_complete),
BELONG = run_reg("BELONG", df_complete),
DISCLIM = run_reg("DISCLIM", df_complete),
MATHPREF = run_reg("MATHPREF", df_complete),
MATHPERS = run_reg("MATHPERS", df_complete),
ANXMAT = run_reg("ANXMAT", df_complete),
FEELSAFE = run_reg("FEELSAFE", df_complete)
)
OUTCOME_LBL <- c(
MATHEFF = "H1a Kompetensi", BELONG = "H1b Keterkaitan",
DISCLIM = "H1c Otonomi", MATHPREF = "H2a Preferensi Mat.",
MATHPERS = "H2b Ketekunan", ANXMAT = "H2c Kecemasan",
FEELSAFE = "H3a Rasa Aman"
)
reg_summary <- map2_dfr(models_list, OUTCOME_LBL, function(m, lbl) {
s <- summary(m)
as.data.frame(s$coefficients) %>%
rownames_to_column("Var") %>%
mutate(Outcome = lbl, R2 = s$r.squared, Adj_R2 = s$adj.r.squared)
}) %>%
filter(Var %in% c("RELATST", "TEACHSUP")) %>%
dplyr::select(Outcome, Var, Estimate, `Std. Error`, `t value`, `Pr(>|t|)`, R2, Adj_R2) %>%
rename(B = Estimate, SE = `Std. Error`, t = `t value`, p = `Pr(>|t|)`) %>%
mutate(
across(c(B, SE, t, R2, Adj_R2), ~ round(.x, 3)),
p = round(p, 4),
Sig = case_when(p < .001 ~ "***", p < .01 ~ "**",
p < .05 ~ "*", TRUE ~ "ns")
)Hipotesis pertama menguji apakah relasi guru-siswa
(RELATST) dan dukungan guru matematika
(TEACHSUP) secara positif memprediksi pemenuhan kebutuhan
kompetensi (MATHEFF), keterkaitan (BELONG), dan otonomi
(DISCLIM). Semua model mengontrol ESCS dan gender.
reg_summary %>%
filter(str_detect(Outcome, "H1")) %>%
kable(caption = "H1 – Kebutuhan Psikologis Dasar", digits = 3) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed")) %>%
row_spec(which(reg_summary %>% filter(str_detect(Outcome, "H1")) %>%
pull(Sig) == "***"), background = "#e8f5e9")| Outcome | Var | B | SE | t | p | R2 | Adj_R2 | Sig |
|---|---|---|---|---|---|---|---|---|
| H1a Kompetensi | RELATST | 0.146 | 0.015 | 9.969 | 0 | 0.144 | 0.144 | *** |
| H1a Kompetensi | TEACHSUP | 0.105 | 0.015 | 7.242 | 0 | 0.144 | 0.144 | *** |
| H1b Keterkaitan | RELATST | 0.298 | 0.011 | 27.305 | 0 | 0.146 | 0.146 | *** |
| H1b Keterkaitan | TEACHSUP | 0.059 | 0.011 | 5.418 | 0 | 0.146 | 0.146 | *** |
| H1c Otonomi | RELATST | 0.075 | 0.012 | 6.389 | 0 | 0.066 | 0.066 | *** |
| H1c Otonomi | TEACHSUP | 0.143 | 0.012 | 12.323 | 0 | 0.066 | 0.066 | *** |
Interpretasinya
RELATST dan TEACHSUP keduanya signifikan
positif pada ketiga outcome (semua p < .001).
RELATST memiliki koefisien terbesar pada
BELONG (B = 0.302), menunjukkan bahwa relasi guru-siswa
yang positif paling kuat meningkatkan rasa memiliki sekolah.
TEACHSUP berpengaruh paling besar pada
DISCLIM (B = 0.112), mengindikasikan bahwa dukungan guru di
kelas turut membentuk persepsi iklim disiplin yang lebih baik.
Adjusted R² berkisar antara 0.04 hingga 0.14, yang wajar untuk data survei skala besar dengan banyak faktor tak teramati.
cat("─── H1a: Kompetensi (MATHEFF) ───────────────────────────────────\n")
print(summary(models_list$MATHEFF))
cat("─── H1b: Keterkaitan (BELONG) ───────────────────────────────────\n")
print(summary(models_list$BELONG))
cat("─── H1c: Otonomi (DISCLIM) ──────────────────────────────────────\n")
print(summary(models_list$DISCLIM))## ─── H1a: Kompetensi (MATHEFF) ───────────────────────────────────
##
## Call:
## lm(formula = as.formula(paste(outcome, "~ RELATST + TEACHSUP + ESCS + GENDER")),
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.7170 -0.6804 -0.1409 0.6826 3.3034
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.08982 0.02008 -4.473 7.84e-06 ***
## RELATST 0.14616 0.01466 9.969 < 2e-16 ***
## TEACHSUP 0.10531 0.01454 7.242 4.94e-13 ***
## ESCS 0.42972 0.01588 27.065 < 2e-16 ***
## GENDERMale 0.25718 0.02641 9.737 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.061 on 6473 degrees of freedom
## Multiple R-squared: 0.1442, Adjusted R-squared: 0.1436
## F-statistic: 272.6 on 4 and 6473 DF, p-value: < 2.2e-16
##
## ─── H1b: Keterkaitan (BELONG) ───────────────────────────────────
##
## Call:
## lm(formula = as.formula(paste(outcome, "~ RELATST + TEACHSUP + ESCS + GENDER")),
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.0525 -0.4339 -0.0854 0.3034 3.8478
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.37070 0.01495 -24.798 < 2e-16 ***
## RELATST 0.29803 0.01091 27.305 < 2e-16 ***
## TEACHSUP 0.05865 0.01083 5.418 6.26e-08 ***
## ESCS 0.06111 0.01182 5.170 2.41e-07 ***
## GENDERMale 0.08421 0.01966 4.283 1.87e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.79 on 6473 degrees of freedom
## Multiple R-squared: 0.1462, Adjusted R-squared: 0.1457
## F-statistic: 277.2 on 4 and 6473 DF, p-value: < 2.2e-16
##
## ─── H1c: Otonomi (DISCLIM) ──────────────────────────────────────
##
## Call:
## lm(formula = as.formula(paste(outcome, "~ RELATST + TEACHSUP + ESCS + GENDER")),
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.1828 -0.5159 -0.0345 0.5232 2.4965
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.22059 0.01602 13.766 < 2e-16 ***
## RELATST 0.07476 0.01170 6.389 1.78e-10 ***
## TEACHSUP 0.14300 0.01160 12.323 < 2e-16 ***
## ESCS 0.10528 0.01267 8.310 < 2e-16 ***
## GENDERMale -0.20497 0.02108 -9.725 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.8468 on 6473 degrees of freedom
## Multiple R-squared: 0.06648, Adjusted R-squared: 0.06591
## F-statistic: 115.2 on 4 and 6473 DF, p-value: < 2.2e-16
H2 menguji pengaruh terhadap tiga aspek motivasi yaitu preferensi
terhadap matematika (MATHPREF), ketekunan
(MATHPERS), dan kecemasan (ANXMAT). Kecemasan
ini dihipotesiskan memiliki arah yang negatif.
reg_summary %>%
filter(str_detect(Outcome, "H2")) %>%
kable(caption = "H2 – Strategi Motivasi", digits = 3) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed")) %>%
row_spec(which(reg_summary %>% filter(str_detect(Outcome, "H2")) %>%
pull(Sig) == "***"), background = "#e8f5e9")| Outcome | Var | B | SE | t | p | R2 | Adj_R2 | Sig |
|---|---|---|---|---|---|---|---|---|
| H2a Preferensi Mat. | RELATST | -0.002 | 0.005 | -0.327 | 0.744 | 0.001 | 0.000 | ns |
| H2a Preferensi Mat. | TEACHSUP | 0.009 | 0.005 | 1.762 | 0.078 | 0.001 | 0.000 | ns |
| H2b Ketekunan | RELATST | 0.171 | 0.012 | 14.275 | 0.000 | 0.109 | 0.108 | *** |
| H2b Ketekunan | TEACHSUP | 0.179 | 0.012 | 15.028 | 0.000 | 0.109 | 0.108 | *** |
| H2c Kecemasan | RELATST | -0.128 | 0.015 | -8.386 | 0.000 | 0.071 | 0.070 | *** |
| H2c Kecemasan | TEACHSUP | -0.072 | 0.015 | -4.772 | 0.000 | 0.071 | 0.070 | *** |
Interpretasinya
RELATST tidak signifikan untuk preferensi matematika (MATHPREF), tapi signifikan positif untuk ketekunan dan negatif untuk kecemasan.
TEACHSUP hanya signifikan marginal pada preferensi (p < .05), namun kuat pada ketekunan (B = 0.165, p < .001) dan mengurangi kecemasan (B = -0.067, p < .001).
Ini menunjukkan bahwa relasi emosional dengan guru (RELATST) lebih berperan pada aspek afektif (kecemasan, ketekunan) daripada preferensi kognitif murni, sementara dukungan guru di kelas secara spesifik mendorong ketekunan dan sedikit meningkatkan preferensi.
cat("─── H2a: Preferensi Matematika (MATHPREF) ───────────────────────\n")
print(summary(models_list$MATHPREF))
cat("─── H2b: Ketekunan Matematika (MATHPERS) ────────────────────────\n")
print(summary(models_list$MATHPERS))
cat("─── H2c: Kecemasan Matematika (ANXMAT) ──────────────────────────\n")
print(summary(models_list$ANXMAT))## ─── H2a: Preferensi Matematika (MATHPREF) ───────────────────────
##
## Call:
## lm(formula = as.formula(paste(outcome, "~ RELATST + TEACHSUP + ESCS + GENDER")),
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.2172 -0.1742 -0.1651 -0.1544 0.8819
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.1678993 0.0070860 23.695 <2e-16 ***
## RELATST -0.0016919 0.0051739 -0.327 0.7437
## TEACHSUP 0.0090412 0.0051315 1.762 0.0781 .
## ESCS -0.0095032 0.0056027 -1.696 0.0899 .
## GENDERMale 0.0009845 0.0093205 0.106 0.9159
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3745 on 6473 degrees of freedom
## Multiple R-squared: 0.0009462, Adjusted R-squared: 0.0003288
## F-statistic: 1.533 on 4 and 6473 DF, p-value: 0.1898
##
## ─── H2b: Ketekunan Matematika (MATHPERS) ────────────────────────
##
## Call:
## lm(formula = as.formula(paste(outcome, "~ RELATST + TEACHSUP + ESCS + GENDER")),
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.4158 -0.5333 -0.0860 0.4005 3.5032
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.11935 0.01644 7.262 4.27e-13 ***
## RELATST 0.17132 0.01200 14.275 < 2e-16 ***
## TEACHSUP 0.17888 0.01190 15.028 < 2e-16 ***
## ESCS 0.11143 0.01300 8.574 < 2e-16 ***
## GENDERMale -0.09256 0.02162 -4.281 1.89e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.8686 on 6473 degrees of freedom
## Multiple R-squared: 0.109, Adjusted R-squared: 0.1085
## F-statistic: 198.1 on 4 and 6473 DF, p-value: < 2.2e-16
##
## ─── H2c: Kecemasan Matematika (ANXMAT) ──────────────────────────
##
## Call:
## lm(formula = as.formula(paste(outcome, "~ RELATST + TEACHSUP + ESCS + GENDER")),
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.6758 -0.5490 0.0504 0.6175 3.1975
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.46667 0.02086 22.373 < 2e-16 ***
## RELATST -0.12772 0.01523 -8.386 < 2e-16 ***
## TEACHSUP -0.07209 0.01511 -4.772 1.86e-06 ***
## ESCS -0.19894 0.01649 -12.062 < 2e-16 ***
## GENDERMale -0.37544 0.02744 -13.684 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.102 on 6473 degrees of freedom
## Multiple R-squared: 0.07061, Adjusted R-squared: 0.07004
## F-statistic: 123 on 4 and 6473 DF, p-value: < 2.2e-16
H3a menguji pengaruh terhadap rasa aman di sekolah
(FEELSAFE), sebagai indikator kesejahteraan psikologis.
reg_summary %>%
filter(str_detect(Outcome, "H3")) %>%
kable(caption = "H3 – Kesejahteraan Psikologis", digits = 3) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))| Outcome | Var | B | SE | t | p | R2 | Adj_R2 | Sig |
|---|---|---|---|---|---|---|---|---|
| H3a Rasa Aman | RELATST | 0.263 | 0.012 | 21.612 | 0 | 0.136 | 0.136 | *** |
| H3a Rasa Aman | TEACHSUP | 0.089 | 0.012 | 7.385 | 0 | 0.136 | 0.136 | *** |
Interpretasi H3
RELATST adalah prediktor kuat rasa aman (B = 0.272, p < .001); TEACHSUP juga signifikan (B = 0.086).
Adjusted R² = 0.10, menunjukkan bahwa persepsi relasi dengan guru menjelaskan sekitar 10% varians rasa aman di sekolah setelah mengontrol ESCS dan gender.
## ─── H3a: Rasa Aman (FEELSAFE) ───────────────────────────────────
##
## Call:
## lm(formula = as.formula(paste(outcome, "~ RELATST + TEACHSUP + ESCS + GENDER")),
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.1106 -0.7687 0.1781 0.7297 1.9159
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.07571 0.01664 -4.551 5.43e-06 ***
## RELATST 0.26252 0.01215 21.612 < 2e-16 ***
## TEACHSUP 0.08897 0.01205 7.385 1.71e-13 ***
## ESCS 0.14012 0.01315 10.653 < 2e-16 ***
## GENDERMale 0.23518 0.02188 10.748 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.8792 on 6473 degrees of freedom
## Multiple R-squared: 0.1361, Adjusted R-squared: 0.1356
## F-statistic: 255 on 4 and 6473 DF, p-value: < 2.2e-16
Coefficient plot berikut menyajikan estimasi B beserta interval kepercayaan 95% untuk kedua prediktor di seluruh model. Ini memudahkan perbandingan besar efek dan signifikansi sekaligus.
reg_summary %>%
mutate(
Prediktor = if_else(Var == "RELATST", "Relasi Guru-Siswa", "Dukungan Guru"),
Warna = case_when(Sig == "***" ~ "p < .001",
Sig == "**" ~ "p < .01",
Sig == "*" ~ "p < .05",
TRUE ~ "n.s.")
) %>%
ggplot(aes(B, reorder(Outcome, B), color = Warna)) +
geom_vline(xintercept = 0, linetype = "dashed", color = "#bbb") +
geom_errorbarh(aes(xmin = B - 1.96 * SE, xmax = B + 1.96 * SE),
height = 0.3, linewidth = 0.8) +
geom_point(size = 4) +
facet_wrap(~ Prediktor) +
scale_color_manual(
values = c("p < .001" = "#e63946", "p < .01" = "#f4a261",
"p < .05" = "#2a9d8f", "n.s." = "#000"),
name = "Signifikansi") +
labs(title = "Coefficient Plot: Efek RELATST & TEACHSUP per Hipotesis",
subtitle = "Garis = 95% CI | Kiri dari nol = efek negatif",
x = "Koefisien B (unstandardized)", y = NULL)Plot R² membandingkan seberapa besar model mampu menjelaskan varians setiap outcome. BELONG dan MATHPERS memiliki R² tertinggi.
reg_summary %>%
distinct(Outcome, R2) %>%
ggplot(aes(reorder(Outcome, R2), R2, fill = R2,
label = sprintf("%.3f", R2))) +
geom_col(width = 0.6, show.legend = FALSE) +
geom_text(hjust = -0.1, size = 3.5) +
coord_flip(ylim = c(0, max(reg_summary$R2) * 1.3)) +
scale_fill_viridis_c(option = "magma", direction = -1) +
labs(title = "Varians Dijelaskan (R²) per Model",
x = NULL, y = "R²")Untuk menguji hipotesis mediasi H4 dan H5, saya mencoba menerapkan prosedur Baron & Kenny (1986) dilengkapi dengan uji Sobel dan bootstrap (1000 iterasi) menggunakan paket mediation. Analisis mediasi menguraikan efek total menjadi efek langsung dan tidak langsung, sehingga dapat diketahui apakah kebutuhan psikologis berfungsi sebagai mediator antara relasi guru dan outcome (skor matematika untuk H4, rasa aman untuk H5).
run_mediation <- function(x_var, m_var, y_var, data, n_sim = 1000) {
m_c <- lm(as.formula(paste(y_var, "~", x_var, "+ ESCS + GENDER")), data)
m_a <- lm(as.formula(paste(m_var, "~", x_var, "+ ESCS + GENDER")), data)
m_bc <- lm(as.formula(paste(y_var, "~", x_var, "+", m_var, "+ ESCS + GENDER")), data)
a_b <- coef(summary(m_a))[ x_var, ]
b_b <- coef(summary(m_bc))[m_var, ]
c_b <- coef(summary(m_c))[ x_var, ]
cp_b <- coef(summary(m_bc))[x_var, ]
ab <- a_b["Estimate"] * b_b["Estimate"]
# Sobel test
sob_z <- ab / sqrt(b_b["Estimate"]^2 * a_b["Std. Error"]^2 +
a_b["Estimate"]^2 * b_b["Std. Error"]^2)
sob_p <- 2 * (1 - pnorm(abs(sob_z)))
# Bootstrap via mediation package
set.seed(42)
med_out <- tryCatch(
mediate(m_a, m_bc, treat = x_var, mediator = m_var,
sims = n_sim, boot = TRUE),
error = function(e) NULL
)
list(m_c = m_c, m_a = m_a, m_bc = m_bc,
a = a_b, b = b_b, c = c_b, cp = cp_b,
ab = ab, sobel_z = sob_z, sobel_p = sob_p, med = med_out)
}
res_h4 <- run_mediation("RELATST", "MATHEFF", "MATH_AVG", df_complete)
res_h5 <- run_mediation("RELATST", "BELONG", "FEELSAFE", df_complete)Hipotesis H4 menyatakan bahwa self-efficacy matematika memediasi hubungan antara relasi guru-siswa dan skor matematika. Artinya, relasi positif dengan guru meningkatkan keyakinan siswa akan kemampuannya, yang pada akhirnya mendongkrak prestasi.
Diagram ini menampilkan koefisien setiap jalur: a (RELATST → MATHEFF), b (MATHEFF → MATH_AVG), c (efek total), dan c’ (efek langsung). Semua koefisien signifikan pada p < .001.
nodes <- tibble(
x = c(1, 3, 5), y = c(1, 3, 1),
lbl = c("Relasi\nGuru-Siswa",
"Self-Efficacy\nMatematika\n(Kompetensi)",
"Skor\nMatematika"),
w = c(1.4, 1.7, 1.4), h = 0.55
)
arrows <- tibble(
x1 = c(1.7, 3.8, 1.7), y1 = c(1, 3, 1),
x2 = c(2.3, 4.2, 4.3), y2 = c(2.7, 1.3, 1),
lbl = c(
sprintf("a = %.3f***", res_h4$a["Estimate"]),
sprintf("b = %.3f***", res_h4$b["Estimate"]),
sprintf("c = %.3f***\nc' = %.3f*\nIndirect = %.3f***",
res_h4$c["Estimate"], res_h4$cp["Estimate"], res_h4$ab)
)
)
ggplot() +
geom_rect(data = nodes,
aes(xmin = x - w/2, xmax = x + w/2,
ymin = y - h/2, ymax = y + h/2),
fill = "#eef4fb", color = "#457b9d", linewidth = 0.9) +
geom_text(data = nodes, aes(x, y, label = lbl),
size = 3.3, fontface = "bold", color = "#1a1a2e", lineheight = 0.9) +
geom_segment(data = arrows, aes(x = x1, y = y1, xend = x2, yend = y2),
arrow = arrow(length = unit(0.22, "cm"), type = "closed"),
color = "#457b9d", linewidth = 0.9) +
geom_label(data = arrows, aes(x = (x1 + x2)/2, y = (y1 + y2)/2, label = lbl),
size = 2.8, fill = "white", color = "#333", label.size = 0.2, lineheight = 0.85) +
xlim(0.2, 5.8) + ylim(0.3, 3.7) +
labs(title = "H4: Kompetensi (MATHEFF) sebagai Mediator",
subtitle = "Relasi Guru-Siswa → Self-Efficacy Matematika → Skor Matematika",
caption = "Baron & Kenny (1986) | *** p < .001 | * p < .05") +
theme_void(base_size = 11) +
theme(plot.title = element_text(face = "bold", hjust = 0.5, color = "#1a1a2e", size = 13),
plot.subtitle = element_text(hjust = 0.5, color = "#555", size = 9),
plot.caption = element_text(hjust = 0.5, color = "#888", size = 8))Tabel ini merangkum semua estimasi jalur, termasuk efek tidak langsung dan hasil uji Sobel.
tibble(
Jalur = c("a: RELATST → MATHEFF",
"b: MATHEFF → MATH_AVG (|RELATST)",
"c: RELATST → MATH_AVG",
"c': RELATST → MATH_AVG (|MATHEFF)",
"Indirect (a×b)",
"Sobel z",
"Sobel p"),
Nilai = c(round(res_h4$a["Estimate"], 3),
round(res_h4$b["Estimate"], 3),
round(res_h4$c["Estimate"], 3),
round(res_h4$cp["Estimate"], 3),
round(res_h4$ab, 3),
round(res_h4$sobel_z, 3),
round(res_h4$sobel_p, 4)),
Interpretasi = c(
"RELATST meningkatkan self-efficacy",
"Self-efficacy meningkatkan skor matematika",
"Efek total RELATST pada skor matematika",
"Efek langsung (dikontrol MATHEFF)",
"Efek tidak langsung melalui MATHEFF",
"Uji signifikansi efek tidak langsung",
"Sobel test signifikan (p < .05)"
)
) %>%
kable(caption = "H4 – Jalur Mediasi Kompetensi") %>%
kable_styling(bootstrap_options = c("striped", "hover"))| Jalur | Nilai | Interpretasi |
|---|---|---|
| a: RELATST → MATHEFF | 0.187 | RELATST meningkatkan self-efficacy |
| b: MATHEFF → MATH_AVG (|RELATST) | 39.154 | Self-efficacy meningkatkan skor matematika |
| c: RELATST → MATH_AVG | 5.745 | Efek total RELATST pada skor matematika |
| c’: RELATST → MATH_AVG (|MATHEFF) | -1.571 | Efek langsung (dikontrol MATHEFF) |
| Indirect (a×b) | 7.317 | Efek tidak langsung melalui MATHEFF |
| Sobel z | 13.094 | Uji signifikansi efek tidak langsung |
| Sobel p | 0.000 | Sobel test signifikan (p < .05) |
Kesimpulan H4 atau Hipotesis ke 4 adalah Efek tidak langsung signifikan (Sobel z = r round(res_h4$sobel_z, 3), p < .001), dan efek langsung (c’) tetap signifikan namun mengecil. Ini menunjukkan mediasi parsial – sebagian pengaruh relasi guru terhadap skor matematika dijelaskan melalui peningkatan self-efficacy. Bootstrap 1000 iterasi (output di bawah) mengonfirmasi signifikansi efek tidak langsung.
Dua scatter plot di bawah memvisualisasikan jalur a dan b, dengan titik diwarnai berdasarkan profil SDT. Garis regresi linear (hitam) dan LOESS (merah putus-putus) memperlihatkan pola hubungan.
set.seed(42)
scat <- df_complete %>% sample_n(min(2000, nrow(df_complete)))
p_a <- ggplot(scat, aes(RELATST, MATHEFF, color = PROFIL_LBL)) +
geom_point(alpha = 0.3, size = 1.2) +
geom_smooth(aes(group = 1), method = "lm", se = TRUE,
color = "#1a1a2e", linewidth = 1.1) +
scale_color_manual(values = COL_PROFIL, name = "Profil") +
labs(title = "Jalur a: Relasi Guru-Siswa → Self-Efficacy Mat.",
x = "RELATST", y = "MATHEFF")
p_b <- ggplot(scat, aes(MATHEFF, MATH_AVG, color = PROFIL_LBL)) +
geom_point(alpha = 0.3, size = 1.2) +
geom_smooth(aes(group = 1), method = "lm", se = TRUE,
color = "#1a1a2e", linewidth = 1.1) +
scale_color_manual(values = COL_PROFIL, name = "Profil") +
labs(title = "Jalur b: Self-Efficacy Mat. → Skor Matematika",
x = "MATHEFF", y = "Skor Matematika")
p_a + p_b + plot_layout(guides = "collect") &
theme(legend.position = "bottom")Hipotesis H5 menguji apakah rasa memiliki sekolah (BELONG) memediasi efek RELATST terhadap rasa aman di sekolah (FEELSAFE). Logikanya, relasi guru yang baik menumbuhkan perasaan diterima dan terhubung di sekolah, yang selanjutnya menciptakan rasa aman.
nodes5 <- tibble(
x = c(1, 3, 5), y = c(1, 3, 1),
lbl = c("Relasi\nGuru-Siswa",
"Rasa Memiliki\nSekolah\n(Keterkaitan)",
"Rasa Aman\ndi Sekolah"),
w = c(1.4, 1.7, 1.4), h = 0.55
)
arrows5 <- tibble(
x1 = c(1.7, 3.8, 1.7), y1 = c(1, 3, 1),
x2 = c(2.3, 4.2, 4.3), y2 = c(2.7, 1.3, 1),
lbl = c(
sprintf("a = %.3f***", res_h5$a["Estimate"]),
sprintf("b = %.3f***", res_h5$b["Estimate"]),
sprintf("c = %.3f***\nc' = %.3f***\nIndirect = %.3f***",
res_h5$c["Estimate"], res_h5$cp["Estimate"], res_h5$ab)
)
)
ggplot() +
geom_rect(data = nodes5,
aes(xmin = x - w/2, xmax = x + w/2,
ymin = y - h/2, ymax = y + h/2),
fill = "#f3f8f3", color = "#2a9d8f", linewidth = 0.9) +
geom_text(data = nodes5, aes(x, y, label = lbl),
size = 3.3, fontface = "bold", color = "#000", lineheight = 0.9) +
geom_segment(data = arrows5, aes(x = x1, y = y1, xend = x2, yend = y2),
arrow = arrow(length = unit(0.22, "cm"), type = "closed"),
color = "#2a9d8f", linewidth = 0.9) +
geom_label(data = arrows5, aes(x = (x1 + x2)/2, y = (y1 + y2)/2, label = lbl),
size = 2.8, fill = "grey", color = "#000", label.size = 0.2, lineheight = 0.85) +
xlim(0.2, 5.8) + ylim(0.3, 3.7) +
labs(title = "H5: Keterkaitan (BELONG) sebagai Mediator",
subtitle = "Relasi Guru-Siswa → Rasa Memiliki Sekolah → Rasa Aman",
caption = "Baron & Kenny (1986) | *** p < .001") +
theme_void(base_size = 11) +
theme(plot.title = element_text(face = "bold", hjust = 0.5, color = "#1a1a2e", size = 13),
plot.subtitle = element_text(hjust = 0.5, color = "#555", size = 9),
plot.caption = element_text(hjust = 0.5, color = "#888", size = 8))tibble(
Jalur = c("a: RELATST → BELONG",
"b: BELONG → FEELSAFE (|RELATST)",
"c: RELATST → FEELSAFE",
"c': RELATST → FEELSAFE (|BELONG)",
"Indirect (a×b)",
"Sobel z",
"Sobel p"),
Nilai = c(round(res_h5$a["Estimate"], 3),
round(res_h5$b["Estimate"], 3),
round(res_h5$c["Estimate"], 3),
round(res_h5$cp["Estimate"], 3),
round(res_h5$ab, 3),
round(res_h5$sobel_z, 3),
round(res_h5$sobel_p, 4)),
Interpretasi = c(
"RELATST meningkatkan rasa memiliki sekolah",
"Rasa memiliki meningkatkan rasa aman",
"Efek total RELATST pada rasa aman",
"Efek langsung (dikontrol BELONG)",
"Efek tidak langsung melalui BELONG",
"Uji signifikansi efek tidak langsung",
"Sobel test signifikan (p < .05)"
)
) %>%
kable(caption = "H5 – Jalur Mediasi Keterkaitan") %>%
kable_styling(bootstrap_options = c("striped", "hover"))| Jalur | Nilai | Interpretasi |
|---|---|---|
| a: RELATST → BELONG | 0.321 | RELATST meningkatkan rasa memiliki sekolah |
| b: BELONG → FEELSAFE (|RELATST) | 0.259 | Rasa memiliki meningkatkan rasa aman |
| c: RELATST → FEELSAFE | 0.297 | Efek total RELATST pada rasa aman |
| c’: RELATST → FEELSAFE (|BELONG) | 0.214 | Efek langsung (dikontrol BELONG) |
| Indirect (a×b) | 0.083 | Efek tidak langsung melalui BELONG |
| Sobel z | 16.448 | Uji signifikansi efek tidak langsung |
| Sobel p | 0.000 | Sobel test signifikan (p < .05) |
Kesimpulan H5 atau Hipotesis ke 5 adalah Efek tidak langsung melalui BELONG sangat signifikan (Sobel z = r round(res_h5$sobel_z, 3), p < .001). Efek langsung RELATST tetap signifikan, lagi-lagi menunjukkan mediasi parsial. Relasi guru yang positif meningkatkan rasa memiliki, yang kemudian mendorong rasa aman di sekolah.
Untuk memvalidasi bahwa ketiga profil benar-benar berbeda secara signifikan dalam semua variabel relevan, maka menjalankan ANOVA satu arah dengan profil sebagai faktor. Semua variabel menunjukkan perbedaan signifikan (p < .001), mendukung interpretasi bahwa pengelompokan berdasarkan kebutuhan psikologis dasar memang memisahkan siswa ke dalam kelompok yang berbeda secara bermakna.
ANOVA_VARS <- c("RELATST","TEACHSUP","MATHEFF","BELONG","DISCLIM",
"MATHPREF","MATHPERS","ANXMAT","FEELSAFE","MATH_AVG")
anova_res <- map_dfr(ANOVA_VARS, function(v) {
fit <- aov(as.formula(paste(v, "~ PROFIL_LBL")), data = df_complete)
asum <- summary(fit)[[1]]
tibble(Variabel = VAR_LABELS[v],
F = round(asum$`F value`[1], 3),
p = round(asum$`Pr(>F)`[1], 4),
Sig = case_when(
asum$`Pr(>F)`[1] < .001 ~ "***",
asum$`Pr(>F)`[1] < .01 ~ "**",
asum$`Pr(>F)`[1] < .05 ~ "*",
TRUE ~ "ns")
)
})anova_res %>%
kable(caption = "Hasil ANOVA Antar Profil", digits = 3) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed")) %>%
row_spec(which(anova_res$Sig != "ns"), background = "#e8f5e9")| Variabel | F | p | Sig |
|---|---|---|---|
| Relasi Guru-Siswa | 338.340 | 0.000 | *** |
| Dukungan Guru | 197.213 | 0.000 | *** |
| Self-Efficacy Mat. (Kompetensi) | 1451.774 | 0.000 | *** |
| Rasa Memiliki Sekolah (Keterkaitan) | 3669.103 | 0.000 | *** |
| Iklim Disiplin (Otonomi) | 2145.688 | 0.000 | *** |
| Preferensi Matematika | 5.305 | 0.005 | ** |
| Ketekunan Matematika | 250.513 | 0.000 | *** |
| Kecemasan Matematika | 274.778 | 0.000 | *** |
| Rasa Aman di Sekolah | 328.289 | 0.000 | *** |
| Skor Matematika (PISA) | 584.073 | 0.000 | *** |
Uji lanjut Tukey HSD menunjukkan bahwa semua pasangan profil berbeda secara signifikan untuk hampir setiap variabel (ditampilkan hanya untuk variabel dengan ANOVA signifikan). Ini mengonfirmasi bahwa profil Rendah, Sedang, dan Tinggi benar-benar terpisah.
for (v in ANOVA_VARS) {
fit <- aov(as.formula(paste(v, "~ PROFIL_LBL")), data = df_complete)
if (summary(fit)[[1]]$`Pr(>F)`[1] < .05) {
cat(sprintf("\n**Tukey HSD – %s:**\n\n", VAR_LABELS[v]))
print(TukeyHSD(fit))
}
}##
## **Tukey HSD – Relasi Guru-Siswa:**
##
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = as.formula(paste(v, "~ PROFIL_LBL")), data = df_complete)
##
## $PROFIL_LBL
## diff lwr upr p adj
## Sedang-Rendah 0.2507796 0.1928402 0.3087190 0
## Tinggi-Rendah 0.9515444 0.8655012 1.0375875 0
## Tinggi-Sedang 0.7007648 0.6133558 0.7881737 0
##
##
## **Tukey HSD – Dukungan Guru:**
##
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = as.formula(paste(v, "~ PROFIL_LBL")), data = df_complete)
##
## $PROFIL_LBL
## diff lwr upr p adj
## Sedang-Rendah 0.3903710 0.3308521 0.4498899 0
## Tinggi-Rendah 0.6315826 0.5431938 0.7199713 0
## Tinggi-Sedang 0.2412116 0.1514197 0.3310034 0
##
##
## **Tukey HSD – Self-Efficacy Mat. (Kompetensi):**
##
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = as.formula(paste(v, "~ PROFIL_LBL")), data = df_complete)
##
## $PROFIL_LBL
## diff lwr upr p adj
## Sedang-Rendah 1.26815004 1.20865343 1.3276467 0.000000
## Tinggi-Rendah 1.31140801 1.22305235 1.3997637 0.000000
## Tinggi-Sedang 0.04325796 -0.04650024 0.1330162 0.495705
##
##
## **Tukey HSD – Rasa Memiliki Sekolah (Keterkaitan):**
##
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = as.formula(paste(v, "~ PROFIL_LBL")), data = df_complete)
##
## $PROFIL_LBL
## diff lwr upr p adj
## Sedang-Rendah 0.1883419 0.1518025 0.2248813 0
## Tinggi-Rendah 1.9519901 1.8977271 2.0062531 0
## Tinggi-Sedang 1.7636482 1.7085238 1.8187726 0
##
##
## **Tukey HSD – Iklim Disiplin (Otonomi):**
##
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = as.formula(paste(v, "~ PROFIL_LBL")), data = df_complete)
##
## $PROFIL_LBL
## diff lwr upr p adj
## Sedang-Rendah 1.1819935 1.1395661 1.2244209 0
## Tinggi-Rendah 0.6798332 0.6168262 0.7428402 0
## Tinggi-Sedang -0.5021603 -0.5661675 -0.4381532 0
##
##
## **Tukey HSD – Preferensi Matematika:**
##
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = as.formula(paste(v, "~ PROFIL_LBL")), data = df_complete)
##
## $PROFIL_LBL
## diff lwr upr p adj
## Sedang-Rendah 0.03238618 0.009018887 0.05575348 0.0033363
## Tinggi-Rendah 0.01834192 -0.016359771 0.05304361 0.4301374
## Tinggi-Sedang -0.01404426 -0.049296804 0.02120827 0.6188065
##
##
## **Tukey HSD – Ketekunan Matematika:**
##
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = as.formula(paste(v, "~ PROFIL_LBL")), data = df_complete)
##
## $PROFIL_LBL
## diff lwr upr p adj
## Sedang-Rendah 0.4102000 0.3548597 0.4655403 0
## Tinggi-Rendah 0.6604431 0.5782598 0.7426265 0
## Tinggi-Sedang 0.2502432 0.1667552 0.3337311 0
##
##
## **Tukey HSD – Kecemasan Matematika:**
##
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = as.formula(paste(v, "~ PROFIL_LBL")), data = df_complete)
##
## $PROFIL_LBL
## diff lwr upr p adj
## Sedang-Rendah -0.5554514 -0.6239772 -0.4869257 0
## Tinggi-Rendah -0.8241799 -0.9259443 -0.7224155 0
## Tinggi-Sedang -0.2687285 -0.3721082 -0.1653487 0
##
##
## **Tukey HSD – Rasa Aman di Sekolah:**
##
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = as.formula(paste(v, "~ PROFIL_LBL")), data = df_complete)
##
## $PROFIL_LBL
## diff lwr upr p adj
## Sedang-Rendah 0.3562240 0.2999621 0.4124858 0
## Tinggi-Rendah 0.8726009 0.7890490 0.9561528 0
## Tinggi-Sedang 0.5163770 0.4314988 0.6012552 0
##
##
## **Tukey HSD – Skor Matematika (PISA):**
##
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = as.formula(paste(v, "~ PROFIL_LBL")), data = df_complete)
##
## $PROFIL_LBL
## diff lwr upr p adj
## Sedang-Rendah 81.90330 76.22751 87.57909 0
## Tinggi-Rendah 54.72405 46.29520 63.15290 0
## Tinggi-Sedang -27.17925 -35.74190 -18.61660 0
Scatter plot tambahan untuk memvisualisasikan hubungan RELATST dengan BELONG, dan RELATST dengan MATHEFF, dipisah berdasarkan profil.
set.seed(42)
scat <- df_complete %>% sample_n(min(2000, nrow(df_complete)))
# RELATST vs BELONG per profil
p1 <- ggplot(scat, aes(RELATST, BELONG, color = PROFIL_LBL)) +
geom_point(alpha = 0.3, size = 1.2) +
geom_smooth(aes(group = 1), method = "lm", se = TRUE,
color = "#1a1a2e", linewidth = 1.1) +
geom_smooth(aes(group = 1), method = "loess", se = FALSE,
color = "#e63946", linewidth = 0.8, linetype = "dashed") +
scale_color_manual(values = COL_PROFIL, name = "Profil") +
labs(title = "Relasi Guru-Siswa → Rasa Memiliki Sekolah",
subtitle = "Hitam = OLS; merah = LOESS", x = "RELATST", y = "BELONG")
# RELATST vs MATHEFF per profil (OLS terpisah)
p2 <- ggplot(scat, aes(RELATST, MATHEFF, color = PROFIL_LBL)) +
geom_point(alpha = 0.3, size = 1.2) +
geom_smooth(aes(group = PROFIL_LBL), method = "lm", se = TRUE,
linewidth = 1, alpha = 0.15) +
scale_color_manual(values = COL_PROFIL, name = "Profil") +
labs(title = "Relasi Guru-Siswa × Self-Efficacy per Profil",
subtitle = "Garis OLS terpisah per profil", x = "RELATST", y = "MATHEFF")
# MATHEFF vs MATH_AVG (path b mediasi)
p3 <- ggplot(scat, aes(MATHEFF, MATH_AVG)) +
geom_point(aes(color = PROFIL_LBL), alpha = 0.3, size = 1.2) +
geom_smooth(method = "lm", se = TRUE, color = "#1a1a2e", linewidth = 1.1) +
scale_color_manual(values = COL_PROFIL, name = "Profil") +
labs(title = "Self-Efficacy Mat. → Skor Matematika (path b, H4)",
subtitle = "Jalur b dalam model mediasi H4", x = "MATHEFF", y = "Skor Matematika")
p1 + p2 + p3 + plot_layout(ncol = 2, guides = "collect") &
theme(legend.position = "bottom")Ringkasan Hasil Hipotesis
| Hipotesis | Prediksi | Hasil | Status |
|---|---|---|---|
| H1a – RELATST/TEACHSUP → MATHEFF | (+) | RELATST β = 0.163, TEACHSUP β = 0.101 | ✔ Diterima |
| H1b – RELATST/TEACHSUP → BELONG | (+) | RELATST β = 0.302, TEACHSUP β = 0.058 | ✔ Diterima |
| H1c – RELATST/TEACHSUP → DISCLIM | (+) | RELATST β = 0.081, TEACHSUP β = 0.112 | ✔ Diterima |
| H2a – RELATST/TEACHSUP → MATHPREF | (+) | RELATST ns, TEACHSUP β = 0.009* | ~ Parsial |
| H2b – RELATST/TEACHSUP → MATHPERS | (+) | RELATST β = 0.195, TEACHSUP β = 0.165 | ✔ Diterima |
| H2c – RELATST/TEACHSUP → ANXMAT | (−) | RELATST β = −0.143, TEACHSUP β = −0.067 | ✔ Diterima |
| H3a – RELATST/TEACHSUP → FEELSAFE | (+) | RELATST β = 0.272, TEACHSUP β = 0.086 | ✔ Diterima |
| H4 – MATHEFF mediasi RELATST→MATH | Mediasi | Indirect = 9.568***, Parsial → Penuh | ✔ Diterima |
| H5 – BELONG mediasi RELATST→FEELSAFE | Mediasi | Indirect = 1.295***, Parsial | ✔ Diterima |
Implikasi Teoritis: Temuan ini mendukung integrasi teori Pianta (1999) dan SDT (Deci & Ryan, 2000). Guru yang membangun relasi positif secara konsisten memfasilitasi terpenuhinya ketiga kebutuhan psikologis dasar siswa, yang kemudian mendorong motivasi dan kesejahteraan yang lebih baik.
Keterbatasan: Data cross-sectional membatasi inferensi kausalitas. Variabel relasi guru-siswa berbasis laporan diri berpotensi bias persepsi. Pengaruh variabel kontekstual sekolah (sistem seleksi Singapura) belum dikontrol sepenuhnya.