Korelasi menjawab “seberapa kuat dua variabel bergerak seiring”; regresi linear menjawab pertanyaan yang lebih membumi: “berapa nilai y yang diperkirakan bila x sama dengan sekian”. Jawabannya berbentuk garis lurus — satu persamaan yang bisa dipakai untuk memprediksi, bukan sekadar angka kekuatan hubungan. Simple linear regression memodelkan hubungan satu variabel bebas x dengan satu variabel terikat y lewat garis paling cocok dengan data, dicari dengan kriteria yang bisa dihitung tuntas. Chapter ini menurunkan rumus koefisiennya, menerapkannya pada data enam siswa, membaca arti tiap koefisien, lalu memprediksi dan mengukur sisa galatnya.
Dari Mengukur ke Memodelkan #
Model regresi linear sederhana menulis hubungan x dan y sebagai persamaan garis:
ŷ = b0 + b1 · xSimbol ŷ (dibaca “y-topi”) adalah nilai prediksi model — pembeda penting dari y yang adalah data observasi. Konstanta b0 disebut intercept (konstanta perpotongan dengan sumbu-y) dan b1 disebut slope (kemiringan); keduanya adalah koefisien model yang nilainya dicari dari data. Setiap observasi i kini punya dua versi: nilai asli yi dan prediksi ŷi = b0 + b1·xi. Selisihnya disebut residual:
ei = yi - ŷi = yi - (b0 + b1 · xi)Residual adalah galat model pada satu titik — seberapa jauh garis meleset dari data. Regresi linear sama sekali bukan alat pembuktian kausalitas: ia adalah alat deskripsi pola dan prediksi, dan seluruh hitungannya berjalan apa pun arah sebab-akibat yang sebenarnya (chapter Correlation vs Causation).
Least Squares: Garis dengan Jumlah Kuadrat Residual Terkecil #
Tak terhingga banyaknya garis bisa digambar melalui sebaran titik; regresi linear memilihnya lewat satu kriteria: minimalkan jumlah kuadrat seluruh residual.
minimumkan Q = Σ(yi - ŷi)² = Σ(yi - b0 - b1·xi)²Mengapa dikuadratkan, bukan sekadar dijumlahkan? Alasannya persis alasan varians pada Section Statistika Deskriptif: residual positif dan negatif saling meniadakan bila dijumlahkan langsung, sedangkan kuadrat menjadikan semua galat positif sehingga garis yang menguntungkan satu sisi tidak bisa menyembunyikan galat sisi lainnya. Kuadrat juga membuat Q mulus — turunannya terdefinisi di semua titik — sehingga titik minimumnya bisa dicari lewat kalkulus.
Cara kerjanya konseptual: Q adalah fungsi dari dua bilangan b0 dan b1, membentuk permukaan mangkuk. Minimum sebuah fungsi mulus terjadi ketika kedua turunan parsialnya bernilai nol. Menurunkan Q terhadap b0 dan b1 lalu menyamakannya dengan nol menghasilkan dua persamaan linier — persamaan normal — yang penyelesaiannya sudah tertutup dan cantik:
b1 = Sxy / Sxx
b0 = ȳ - b1 · x̄Kedua rumus ini memakai bahan baku yang persis sama dengan kovarians dan korelasi: Sxy dan Sxx dari tabel kerja chapter Kovarians. Satu fakta geometris ikut gratis: karena b0 = ȳ − b1·x̄, garis prediksi selalu melewati titik (x̄, ȳ) — pusat massa sebaran data. Garis least squares diputar di sekitar centroid itu, dan kemiringannya ditentukan sendiri oleh data lewat Sxy/Sxx.
Menghitung Koefisien untuk Data Enam Siswa #
Dari tabel kerja yang sama: Sxy = 92.5, Sxx = 17.5, x̄ = 4.5, dan ȳ = 78.17 (nilai persis 78.1667). Maka:
b1 = 92.5 / 17.5 = 5.2857 ≈ 5.29
b0 = 78.1667 - 5.2857 × 4.5 = 54.3810 ≈ 54.38Garis prediksi kita (dibulatkan ke dua desimal):
ŷ = 54.38 + 5.29 · xHubungan dengan korelasi juga rapi: karena b1 = Sxy/Sxx dan r = Sxy/√(Sxx·Syy), keduanya memakai pembilang yang sama — tanda b1 selalu sama dengan tanda r, dan kemiringan bisa ditulis b1 = r·(sy/sx). Pada data kita sy/sx = 9.9079/1.8708 = 5.296, dan 0.99806 × 5.296 = 5.2857 (dihitung dari nilai sebelum pembulatan): korelasi nyaris sempurna dan slope yang positif adalah dua wajah dari Sxy yang sama.
Membaca Arti Koefisien #
Slope b1 = 5.29 poin per jam adalah koefisien yang paling sering dikutip: setiap tambahan satu jam belajar prediksi model naik 5.29 poin nilai, dalam rentang jam belajar 2 sampai 7 jam yang teramati. Intercept b0 = 54.38 adalah prediksi nilai saat x = 0 jam — tetapi perlu kehati-hatian: tidak ada satu pun siswa dalam data yang belajar 0 jam, jadi b0 di sini lebih tepat dibaca sebagai konstanta kalibrasi garis, bukan pernyataan tentang siswa yang tidak belajar. Interpretasi koefisien selalu terikat pada rentang data yang membangunnya, tema yang kita perdalam pada bagian ekstrapolasi.
Prediksi dan Residual Tiap Observasi #
Untuk siswa yang belajar 5.5 jam — nilai x yang tidak ada dalam data namun berada di dalam rentangnya — model memprediksi:
ŷ = 54.3810 + 5.2857 × 5.5 = 83.45Kualitas model juga terbaca per observasi lewat residual. Garis ŷ = 54.38 + 5.29·x menghasilkan prediksi dan galat berikut (dibulatkan ke dua desimal):
| x (jam) | y | ŷ | e = y − ŷ |
|---|---|---|---|
| 2 | 65 | 64.95 | 0.05 |
| 3 | 70 | 70.24 | −0.24 |
| 4 | 75 | 75.52 | −0.52 |
| 5 | 82 | 80.81 | 1.19 |
| 6 | 86 | 86.10 | −0.10 |
| 7 | 91 | 91.38 | −0.38 |
Residual menjumlah nol — itu jaminan rumus b0, karena turunan pertama yang dipaksa nol menyeimbangkan galat kedua sisi. Residual terbesar hanya 1.19 poin pada siswa Rina (belajar 5 jam, prediksi 80.81, nilai asli 82) — sebaran yang sangat rapat, konsisten dengan korelasi 0.9981. Jumlah kuadrat keenam residual (SSE = 1.90) menjadi bahan evaluasi model pada chapter Evaluasi Model Regresi.
Sejarah Singkat: Regresi Menuju Mean #
Kata “regression” lahir dari studi Francis Galton pada akhir abad ke-19 tentang perwarisan tinggi badan. Galton membandingkan tinggi anak dengan tinggi rata-rata keluarganya, dan menemukan pola yang teratur: anak dari keluarga bertubuh tinggi cenderung tetap lebih tinggi dari rata-rata populasi, tetapi umumnya tidak setinggi rata-rata keluarganya; anak dari keluarga bertubuh pendek cenderung tetap lebih pendek dari rata-rata populasi, tetapi umumnya tidak sependek rata-rata keluarganya. Dalam istilahnya, karakteristik ekstrem “mundur” (regress) menuju rata-rata generasi berikutnya — ia menyebutnya regression toward mediocrity. Fenomena ini murni statistik: kombinasi faktor keturunan dan sebaran alami menarik hasil ekstrem kembali ke arah mean. Nama fenomena tersebut kemudian melekat pada seluruh keluarga metode pemodelan linear — meskipun regresi modern sudah tidak berhubungan dengan mundurnya tinggi badan.
Menghitung Regresi dengan Python #
Standard library menyediakan linear_regression() sejak Python 3.10 — ia mengembalikan objek berisi slope dan intercept. Kita hitung dulu manual dari Sxy dan Sxx, lalu bandingkan:
import statistics
jam = [2, 3, 4, 5, 6, 7]
nilai = [65, 70, 75, 82, 86, 91]
n = len(jam)
xbar = sum(jam) / n
ybar = sum(nilai) / n
Sxx = sum((x - xbar) ** 2 for x in jam)
Sxy = sum((x - xbar) * (y - ybar) for x, y in zip(jam, nilai))
b1 = Sxy / Sxx
b0 = ybar - b1 * xbar
model = statistics.linear_regression(jam, nilai)
print(f"b1 (manual) = {b1:.4f}")
print(f"b0 (manual) = {b0:.4f}")
print(f"linear_regression: slope = {model.slope:.4f}")
print(f"linear_regression: intercept = {model.intercept:.4f}")
print(f"prediksi untuk 5.5 jam = {b0 + b1 * 5.5:.2f}")Output yang Dihasilkan:
b1 (manual) = 5.2857
b0 (manual) = 54.3810
linear_regression: slope = 5.2857
linear_regression: intercept = 54.3810
prediksi untuk 5.5 jam = 83.45Residual tiap observasi dihitung langsung dari model:
import statistics
jam = [2, 3, 4, 5, 6, 7]
nilai = [65, 70, 75, 82, 86, 91]
model = statistics.linear_regression(jam, nilai)
for x, y in zip(jam, nilai):
yhat = model.intercept + model.slope * x
print(f"jam = {x} y = {y} yhat = {yhat:.2f} residual = {y - yhat:.2f}")Output yang Dihasilkan:
jam = 2 y = 65 yhat = 64.95 residual = 0.05
jam = 3 y = 70 yhat = 70.24 residual = -0.24
jam = 4 y = 75 yhat = 75.52 residual = -0.52
jam = 5 y = 82 yhat = 80.81 residual = 1.19
jam = 6 y = 86 yhat = 86.10 residual = -0.10
jam = 7 y = 91 yhat = 91.38 residual = -0.38Mari kita bedah kode di atas:
- Baris 11-12 (koefisien manual): b1 = Sxy/Sxx = 92.5/17.5 dan b0 = ȳ − b1·x̄ menghasilkan 5.2857 dan 54.3810 — persis dua rumus hasil penurunan least squares.
- Baris 13 (
linear_regression): slope dan intercept dari function resmi identik keempat desimalnya dengan hitungan manual, memakaixbardanybarinternalnya sendiri. - Baris 19 (prediksi interpolasi): ŷ untuk 5.5 jam sebesar 83.45 — nilai x baru di dalam rentang 2-7 jam.
- Snippet kedua (residual): setiap baris mencetak pasangan data, prediksi, dan selisihnya; keenam residual menjumlah nol dan yang terbesar 1.19 poin.
Dokumentasi resmi linear_regression() tersedia di dokumentasi statistics Python
; penurunan least squares dan interpretasi koefisiennya dibahas di Penn State STAT 500
dan NIST/SEMATECH e-Handbook
.
Model kita kini memprediksi nilai dari satu variabel: jam belajar. Namun nilai ulangan di dunia nyata jarang dipengaruhi satu hal — jam tidur, kehadiran, latar belakang materi ikut bekerja. Memasukkan lebih dari satu variabel bebas ke dalam persamaan garis itulah multiple linear regression, topik chapter berikutnya.