Model ŷ = 54.38 + 5.29·x memprediksi nilai dari satu variabel, dan pada data enam siswa itu memang sudah memadai. Dunia nyata jarang sesederhana itu: nilai ulangan dipengaruhi jam belajar sekaligus jam tidur, kehadiran, dan latar belakang materi; harga rumah ditentukan luas tanah, lokasi, dan usia bangunan. Multiple linear regression memperluas garis prediksi menjadi bidang — atau dimensi yang lebih tinggi — yang menerima banyak variabel bebas sekaligus. Chapter ini membangun model dua prediktor untuk nilai ulangan, membaca koefisiennya dengan kalimat kunci “variabel lain ditahan konstan”, lalu membongkar satu jebakan yang hanya ada pada regresi berganda: multikolinearitas.
Model dengan Banyak Prediktor #
Bentuk umum model linear dengan k variabel bebas:
ŷ = b0 + b1·x1 + b2·x2 + ... + bk·xkTidak ada yang baru secara prinsip: koefisien b0 sampai bk tetap dicari dengan metode least squares — minimalkan jumlah kuadrat residual Σ(y − ŷ)² — dan residual tetap didefinisikan sebagai e = y − ŷ. Yang berubah adalah perhitungannya: dengan dua prediktor ke atas, penyelesaian turunan-parsial-nol menghasilkan sistem beberapa persamaan linier yang paling rapi dikerjakan lewat aljabar matrix. Rumus cantik b1 = Sxy/Sxx tidak lagi berlaku begitu saja; slope tiap variabel kini harus dinegosiasikan bersama slope variabel lain, dan hasil negosiasi itulah inti interpretasi regresi berganda.
Contoh: Nilai dari Jam Belajar dan Jam Tidur #
Kita bangun dataset baru dengan delapan siswa dan dua variabel bebas — jam belajar per hari (x1) dan jam tidur per malam (x2), dengan nilai ulangan (y) pada skala 0-100:
| Siswa | Belajar (x1) | Tidur (x2) | Nilai (y) |
|---|---|---|---|
| Ali | 2 | 6 | 59 |
| Bima | 3 | 9 | 66 |
| Cita | 4 | 5 | 62 |
| Dodi | 4 | 7 | 67 |
| Eka | 5 | 5 | 64 |
| Fajar | 6 | 8 | 74 |
| Gita | 7 | 6 | 74 |
| Hadi | 3 | 7 | 62 |
Kedua prediktor hampir saling bebas — korelasi belajar terhadap tidur hanya −0.14 — sehingga efek keduanya bisa dipisahkan dengan bersih. Hasil least squares (dibulatkan ke dua desimal):
ŷ = 40.49 + 3.09·belajar + 1.87·tidurKedua koefisien positif dan masuk akal: model menaksir tiap tambahan satu jam belajar menaikkan nilai 3.09 poin, dan tiap tambahan satu jam tidur menaikkan nilai 1.87 poin. Model ini menjelaskan R² = 0.9740 dari variasi nilai — pembahasan lengkap metrik ini menunggu chapter Evaluasi Model Regresi.
Kalimat Kunci: Variabel Lain Ditahan Konstan #
Interpretasi koefisien berganda berbeda dari regresi sederhana pada satu frasa. Kalimat yang benar untuk b1 = 3.09: “setiap tambahan satu jam belajar prediksi nilai naik 3.09 poin, dengan jam tidur ditahan konstan”. Frasa “ditahan konstan” adalah inti model berganda — koefisien mengukur efek murni variabel itu setelah efek variabel lain diperhitungkan.
Perbedaannya terlihat dengan membandingkan model: regresi sederhana nilai terhadap belajar saja menghasilkan slope 2.87 — lebih kecil daripada 3.09 pada model berganda. Sebabnya bermanfaat untuk dipahami: jam tidur berkorelasi 0.35 dengan nilai, dan pada data ini siswa dengan belajar tinggi sedikit cenderung tidur lebih sedikit, sehingga slope sederhana “menyerap” tarikan tidur ke arah berlawanan. Koefisien berganda memisahkan dua efek itu — tepat seperti mengurai confounder pada chapter Correlation vs Causation, kini dilakukan secara kuantitatif di dalam satu persamaan.
Multikolinearitas: Ketika Prediktor Membawa Informasi Kembar #
Masalah khas regresi berganda muncul ketika prediktor-prediktor saling berkorelasi kuat. Bayangkan kita memasukkan persentase kehadiran kelas sebagai pengganti jam tidur — dan pada data ini kehadiran berkorelasi 0.99 dengan jam belajar (memang siswa yang belajar rajin umumnya juga rajin hadir). Ketika dua prediktor membawa informasi nyaris sama, model tidak bisa memutuskan siapa yang berjasa atas kenaikan nilai; pembagian efeknya menjadi rapuh.
Perbandingan tiga model memperlihatkan gejalanya (koefisien dibulatkan dua desimal):
| Model | Koefisien belajar | Koefisien prediktor kedua |
|---|---|---|
| nilai ~ belajar | 2.87 | — |
| nilai ~ belajar + tidur | 3.09 | tidur: 1.87 |
| nilai ~ belajar + kehadiran | 3.31 | kehadiran: −0.15 |
Koefisien belajar berubah-ubah — 2.87, 3.09, lalu 3.31 — tergantung siapa partnernya, padahal data nilainya tidak berubah. Yang lebih mencolok: kehadiran sendiri berkorelasi positif dengan nilai (r = 0.85) dan slope tunggalnya +0.98, tetapi begitu masuk model bersama belajar, koefisiennya berbalik menjadi −0.15. Pembacaan naif — “kehadiran menurunkan nilai” — adalah artefak informasi kembar, bukan temuan substantif. Multikolinearitas parah juga menggelembungkan standard error koefisien sehingga uji signifikansi individual gagal meski model keseluruhan baik.
Adjusted R²: Menghukum Prediktor Pembonceng #
Menambah prediktor apa pun — bahkan nomor absen siswa — tidak pernah menurunkan R²; least squares bisa memberi koefisien nol pada prediktor yang tidak berguna, jadi paling buruk R² hanya tetap. Akibatnya R² model berganda selalu naik dan tidak bisa dipakai membandingkan model dengan jumlah prediktor berbeda secara adil. Adjusted R² memperbaikinya dengan penalti:
R2-adj = 1 - (1 - R²) · (n - 1) / (n - k - 1)dengan k jumlah prediktor (intercept tidak dihitung). Pembagi (n − k − 1) mengecil saat k membesar, sehingga prediktor yang hanya menambah R² sedikit justru menurunkan R2-adj. Pada model delapan siswa kita: R² = 0.9740 dan R2-adj = 0.9636 — kedua angka tinggi karena kedua prediktor memang berguna. Perhitungan penuh dan perbandingannya dengan prediktor pembonceng disajikan pada chapter Evaluasi Model Regresi.
Simple vs Multiple: Ringkasan Perbedaan #
| Aspek | Simple linear regression | Multiple linear regression |
|---|---|---|
| Variabel bebas | satu (x) | dua atau lebih (x1, …, xk) |
| Geometri model | garis pada bidang | bidang atau dimensi lebih tinggi |
| Rumus koefisien | tertutup sederhana: b1 = Sxy/Sxx | sistem persamaan, dikerjakan lewat matrix |
| Interpretasi slope | perubahan y per satu unit x | perubahan y per satu unit x1, variabel lain tetap |
| R² | satu prediktor | naik otomatis saat prediktor bertambah → pakai R2-adj |
| Jebakan khas | ekstrapolasi | ekstrapolasi + multikolinearitas |
Menghitung Model Berganda dengan Python #
Standard library statistics hanya menangani satu prediktor, jadi model berganda memakai NumPy. Function numpy.linalg.lstsq menyelesaikan least squares untuk matrix desain X berisi kolom 1 (untuk intercept) dan kedua prediktor:
import numpy as np
belajar = [2, 3, 4, 4, 5, 6, 7, 3]
tidur = [6, 9, 5, 7, 5, 8, 6, 7]
nilai = [59, 66, 62, 67, 64, 74, 74, 62]
n = len(nilai)
X = np.column_stack([np.ones(n), belajar, tidur])
koef, *_ = np.linalg.lstsq(X, np.array(nilai), rcond=None)
b0, b1, b2 = (float(c) for c in koef)
yhat = X @ koef
SSE = float(((np.array(nilai) - yhat) ** 2).sum())
SST = float(((np.array(nilai) - np.mean(nilai)) ** 2).sum())
R2 = 1 - SSE / SST
adj = 1 - (1 - R2) * (n - 1) / (n - 2 - 1)
print(f"b0 = {b0:.4f} b1 = {b1:.4f} b2 = {b2:.4f}")
print(f"R2 = {R2:.4f} R2-adj = {adj:.4f}")Output yang Dihasilkan:
b0 = 40.4887 b1 = 3.0876 b2 = 1.8701
R2 = 0.9740 R2-adj = 0.9636Mari kita bedah kode di atas:
- Baris 8 (
np.column_stack): matrix desain dibangun dari kolom angka 1 (tempat intercept bekerja), kolom belajar, dan kolom tidur — tiga kolom untuk tiga koefisien. - Baris 9 (
np.linalg.lstsq): menyelesaikan sistem least squares sekaligus; hasilnya array koefisien [40.4887, 3.0876, 1.8701] — intercept lalu slope kedua prediktor, cocok dengan ŷ = 40.49 + 3.09·belajar + 1.87·tidur. - Baris 12-16 (metrik): prediksi dihitung dengan perkalian matrix
X @ koef, lalu SSE dan SST menghasilkan R² = 0.9740 dan R2-adj = 0.9636 memakai rumus berpenalti di atas.
Dokumentasi numpy.linalg.lstsq tersedia di dokumentasi NumPy
; teori regresi berganda, multikolinearitas, dan adjusted R² dibahas di Penn State STAT 500
serta NIST/SEMATECH e-Handbook
.
Model berganda dengan koefisien yang stabil dan masuk akal seperti di atas terasa meyakinkan — tetapi seluruh hitungan least squares berdiri di atas beberapa asumsi tentang data dan residualnya. Ketika asumsi itu dilanggar, koefisien bisa melenceng tanpa peringatan apa pun. Chapter berikutnya memeriksa asumsi-asumsi itu satu per satu beserta cara mendeteksi pelanggarannya.