Model regresi yang sudah disesuaikan dapat dipakai untuk menaksir nilai respons pada jam belajar yang belum pernah diamati, dan fungsinya adalah predict(). Topik ini menghitung prediksi titik dari model nilai ujian, lalu membandingkan dua jenis interval yang menyertainya, yaitu interval kepercayaan (confidence interval) untuk rata-rata respons dan interval prediksi (prediction interval) untuk satu observasi baru. Perbedaan lebar keduanya dijelaskan melalui sumber ketidakpastiannya, ditutup dengan visualisasi pita interval dan jebakan prediksi di luar rentang data.
Prediksi titik dengan predict()#
Model yang dipakai kembali adalah model linear sederhana pada data 30 siswa, dengan intersep 53,000 dan kemiringan 4,508. Fungsi predict() menerima objek model pada argumen pertama dan tabel berisi nilai prediktor yang diinginkan pada argumen newdata. Nama kolom pada newdata harus sama dengan nama prediktor di dalam formula, yaitu jam.
library(tidyverse)
set.seed(2026)
n <- 30
nama <- c("Ali", "Budi", "Citra", "Dewi", "Eka", "Fajar", "Gita", "Hana", "Indra", "Joko",
"Kartika", "Laila", "Maya", "Nanda", "Oki", "Putri", "Rahmat", "Sari", "Tono", "Umar",
"Vina", "Wawan", "Yuni", "Zaki", "Bagas", "Dian", "Farhan", "Gading", "Halim", "Intan")
belajar <- tibble(
siswa = nama,
jam = round(runif(n, min = 1, max = 8), 1),
nilai = round(52 + 4.5 * jam + rnorm(n, mean = 0, sd = 5), 1)
)
model <- lm(nilai ~ jam, data = belajar)
model── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.2.1 ✔ readr 2.2.0
✔ forcats 1.0.1 ✔ stringr 1.6.0
✔ ggplot2 4.0.3 ✔ tibble 3.3.1
✔ lubridate 1.9.5 ✔ tidyr 1.3.2
✔ purrr 1.2.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Call:
lm(formula = nilai ~ jam, data = belajar)
Coefficients:
(Intercept) jam
53.000 4.508 Prediksi titik untuk siswa dengan jam belajar 3 dan 5 jam per minggu dihitung dengan satu pemanggilan.
predict(model, newdata = tibble(jam = c(3, 5))) 1 2
66.52348 75.53915 Keluarannya berupa vektor bernama dengan nilai 66,52 untuk jam 3 dan 75,54 untuk jam 5, yang konsisten dengan perkiraan 53,000 ditambah 4,508 kali jamnya. Angka ini disebut prediksi titik karena tidak membawa informasi ketidakpastian sama sekali. Ketidakpastian masuk melalui argumen interval, dan pilihannya menentukan makna interval yang dihasilkan.
Interval kepercayaan untuk rata-rata#
Argumen interval = "confidence" menambahkan batas bawah lwr dan batas atas upr pada keluaran, dan maknanya menyangkut rata-rata respons.
predict(model, newdata = tibble(jam = c(3, 5)), interval = "confidence") fit lwr upr
1 66.52348 64.72394 68.32302
2 75.53915 73.16510 77.91321Interval 64,72 sampai 68,32 untuk jam belajar 3 dibaca sebagai berikut, yaitu dengan tingkat kepercayaan 95 persen, rata-rata nilai ujian seluruh populasi siswa yang belajar 3 jam per minggu berada di antara kedua batas itu. Sasarannya adalah rata-rata, bukan satu siswa tertentu, karena rata-rata jauh lebih stabil daripada observasi tunggal. Lebar intervalnya 3,60 poin pada jam 3 dan melebar menjadi 4,75 poin pada jam 5. Penyebabnya adalah rata-rata jam belajar pada data yang berada di angka 3,41, sehingga prediksi di dekat tengah data lebih pasti daripada prediksi yang menjauh darinya.
Interval prediksi untuk observasi tunggal#
Argumen interval = "prediction" menghitung interval untuk satu observasi baru, bukan untuk rata-ratanya.
predict(model, newdata = tibble(jam = c(3, 5)), interval = "prediction") fit lwr upr
1 66.52348 56.75740 76.28956
2 75.53915 65.65107 85.42723Nilai fit-nya sama persis dengan sebelumnya, tetapi batas-batasnya jauh lebih lebar. Pada jam belajar 3, intervalnya kini 56,76 sampai 76,29 dengan lebar 19,53 poin, lebih dari lima kali lebar interval kepercayaan. Perluasan ini muncul karena satu siswa tunggal membawa gangguan acaknya sendiri di luar ketidakpastian garis modelnya, dan sebaran gangguan itu diperkirakan dari residual standard error model. Memprediksi satu orang memang selalu lebih tidak pasti daripada memprediksi rata-rata banyak orang.
Membandingkan kedua interval#
Perbedaan mendasar keduanya terletak pada sasaran dan sumber ketidakpastiannya, dan perbandingannya dirangkum pada tabel berikut.
| Aspek | interval = "confidence" | interval = "prediction" |
|---|---|---|
| Sasaran | Rata-rata respons pada jam tertentu | Satu observasi baru pada jam tertentu |
| Sumber ketidakpastian | Estimasi intersep dan kemiringan | Estimasi koefisien ditambah gangguan observasi |
| Lebar pada jam belajar 3 | 3,60 poin | 19,53 poin |
Interval prediksi selalu lebih lebar daripada interval kepercayaan pada titik yang sama, dan selisihnya tidak pernah nol karena gangguan acak observasi tidak pernah hilang berapa pun besarnya data. Sebaliknya, interval kepercayaan menyempit ketika banyaknya observasi bertambah, sedangkan interval prediksi berhenti menyempit pada lebar yang ditentukan sebaran residunya. Pemilihannya mengikuti pertanyaan analisis, yaitu interval kepercayaan untuk pertanyaan tentang rata-rata populasi dan interval prediksi untuk pertanyaan tentang individu.
Memvisualisasikan pita kepercayaan#
Pita interval kepercayaan di sepanjang rentang jam belajar digambar dengan geom_ribbon(). Nilai prediksi beserta batas-batasnya dihitung lebih dahulu pada seratus titik jam, kemudian pita digabungkan dengan garis model dan titik data aslinya.
grid <- tibble(jam = seq(1, 8, length.out = 100))
prediksi <- as.data.frame(predict(model, newdata = grid, interval = "confidence"))
grid <- cbind(grid, prediksi)
p <- ggplot(belajar, aes(x = jam, y = nilai)) +
geom_ribbon(data = grid, aes(x = jam, ymin = lwr, ymax = upr), fill = "#4472C4", alpha = 0.2, inherit.aes = FALSE) +
geom_line(data = grid, aes(x = jam, y = fit), color = "#C0504D", linewidth = 1, inherit.aes = FALSE) +
geom_point(size = 2, color = "#4472C4") +
labs(
x = "Jam belajar per minggu",
y = "Nilai ujian",
title = "Pita interval kepercayaan 95 persen"
) +
theme_minimal()
ggplot2::ggsave("pita-kepercayaan.svg", p, width = 5, height = 3.2)Pita pada grafik paling sempit di sekitar rata-rata jam belajar 3,41 dan melebar menuju kedua ujung rentangnya, sesuai penjelasan pada bagian sebelumnya. Bentuk seperti ini adalah ciri khas interval kepercayaan regresi, karena kemiringan garis yang diestimasi dengan tidak pasti membuat kedua ujung garis bergoyang paling jauh. Visualisasi semacam ini membantu pembaca laporan memahami bahwa kepastian model tidak merata di sepanjang sumbunya.
Jebakan ekstrapolasi#
Rentang jam belajar pada data hanya mencakup 1,0 sampai 7,0 jam per minggu, dan seluruh kekuatan model terbatas pada rentang itu. predict() tidak menolak nilai di luar rentang tersebut dan tetap mengembalikan angka, sehingga prediksi untuk jam belajar 12 akan tercetak tanpa peringatan apa pun. Angka itu disebut hasil ekstrapolasi (extrapolation) dan tidak memiliki dasar data sama sekali, karena bentuk hubungan di luar rentang pengamatan tidak dapat diketahui dari datanya sendiri.
Ringkasan#
predict(model, newdata = tibble(jam = ...))menghitung prediksi titik, dengan kolomnewdatayang namanya harus sama dengan prediktor pada formula.interval = "confidence"memberi interval untuk rata-rata respons, sedangkaninterval = "prediction"memberi interval untuk satu observasi baru.- Interval prediksi jauh lebih lebar karena memuat gangguan acak observasi, dengan lebar 19,53 poin berbanding 3,60 poin pada jam belajar 3.
- Pita interval kepercayaan paling sempit di sekitar rata-rata prediktor dan melebar di ujung-ujung rentangnya.
- Prediksi di luar rentang data tetap dihasilkan tanpa peringatan, sehingga rentang
newdataharus diperiksa terlebih dahulu.
Referensi#
- An Introduction to R — CRAN — Bab Statistical models in R memperkenalkan fungsi predict untuk objek model beserta argumen intervalnya.
- R for Data Science, edisi ke-2 — Wickham, Çetinkaya-Rundel, Grolemund — Bab model membahas penggunaan model untuk prediksi beserta ketidakpastiannya.