Prediksi

predict dengan interval kepercayaan versus interval prediksi.

Daftar isi

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.

r
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
text Keluaran
── 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.

r
predict(model, newdata = tibble(jam = c(3, 5)))
text Keluaran
       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.

r
predict(model, newdata = tibble(jam = c(3, 5)), interval = "confidence")
text Keluaran
       fit      lwr      upr
1 66.52348 64.72394 68.32302
2 75.53915 73.16510 77.91321

Interval 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.

r
predict(model, newdata = tibble(jam = c(3, 5)), interval = "prediction")
text Keluaran
       fit      lwr      upr
1 66.52348 56.75740 76.28956
2 75.53915 65.65107 85.42723

Nilai 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.

Aspekinterval = "confidence"interval = "prediction"
SasaranRata-rata respons pada jam tertentuSatu observasi baru pada jam tertentu
Sumber ketidakpastianEstimasi intersep dan kemiringanEstimasi koefisien ditambah gangguan observasi
Lebar pada jam belajar 33,60 poin19,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.

r
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)
607080902468Jam belajar per mingguNilai ujianPita interval kepercayaan 95 persen
Garis regresi dengan pita interval kepercayaan 95 persen pada data jam belajar

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 kolom newdata yang namanya harus sama dengan prediktor pada formula.
  • interval = "confidence" memberi interval untuk rata-rata respons, sedangkan interval = "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 newdata harus diperiksa terlebih dahulu.

Referensi#