Korelasi &
Hubungan Antar Variabel
Sebelum membangun model, kita perlu memahami hubungan antar variabel. Apakah dua variabel bergerak bersama? Seberapa kuat? Hubungan linear atau tidak? Korelasi adalah alat pertama untuk menjawab pertanyaan-pertanyaan ini.
1. Apa Itu Korelasi?
Secara intuitif: mahasiswa yang belajar lebih lama cenderung mendapat nilai lebih tinggi. Tapi seberapa kuat kecenderungan ini? Dan apakah ada pengecualian? Korelasi mengukur kecenderungan dua variabel bergerak bersama secara sistematis — bukan hanya kebetulan pada satu dua kasus.
Korelasi memberi kita angka antara −1 dan +1 yang merangkum seluruh pola hubungan menjadi satu nilai yang mudah dibandingkan dan dikomunikasikan.
Tiga Pola Hubungan Utama
2. Koefisien Korelasi Pearson
Koefisien Pearson (r) mengukur kekuatan dan arah hubungan linear antara dua variabel numerik kontinu.
r = Σ[(xᵢ − x̄)(yᵢ − ȳ)] / √[Σ(xᵢ − x̄)² × Σ(yᵢ − ȳ)²]
Pembilang = kovarians: seberapa X dan Y menyimpang dari mean mereka secara bersamaan.
Penyebut = standarisasi agar hasilnya selalu dalam rentang [−1, +1].
Contoh Perhitungan Manual
| Mahasiswa | Jam Belajar (X) | Nilai UTS (Y) | X − x̄ | Y − ȳ | (X−x̄)(Y−ȳ) |
|---|---|---|---|---|---|
| Andi | 2 | 55 | −2 | −17 | +34 |
| Budi | 3 | 65 | −1 | −7 | +7 |
| Citra | 4 | 75 | 0 | +3 | 0 |
| Dewi | 5 | 80 | +1 | +8 | +8 |
| Eko | 6 | 85 | +2 | +13 | +26 |
| x̄ = 4, ȳ = 72 | Σ = | 75 |
Σ(X−x̄)² = 4+1+0+1+4 = 10 | Σ(Y−ȳ)² = 289+49+9+64+169 = 580
r = 75 / √(10 × 580) = 75 / √5800 = 75 / 76.16 ≈ +0.985
Korelasi sangat kuat positif! Makin banyak belajar → makin tinggi nilai.
3. Panduan Interpretasi Nilai r
r² (R-squared) = persentase variansi Y yang bisa "dijelaskan" oleh X.
Contoh: r = 0.8 → r² = 0.64 → artinya 64% variansi Y dijelaskan oleh X. Sisanya 36% dari faktor lain.
r = 0.985 (contoh belajar) → r² = 0.97 → 97% variansi nilai dijelaskan oleh jam belajar. Sangat kuat!
4. Metode Korelasi Lainnya
| Kombinasi Variabel | Metode yang Tepat | Fungsi Python |
|---|---|---|
| Numerik ↔ Numerik (normal, linear) | Pearson r | df.corr() atau scipy.stats.pearsonr() |
| Numerik ↔ Numerik (ordinal/outlier) | Spearman ρ | df.corr(method='spearman') |
| Kategorik ↔ Kategorik | Chi-square + Cramér's V | scipy.stats.chi2_contingency() |
| Numerik ↔ Kategorik | ANOVA / Point-Biserial | scipy.stats.f_oneway() |
5. Korelasi ≠ Kausalitas — Jebakan Terbesar
Data menunjukkan korelasi kuat antara penjualan es krim dan angka tenggelam di pantai (r ≈ +0.85). Apakah makan es krim menyebabkan tenggelam? Tentu tidak! Keduanya sama-sama meningkat di musim panas — ada variabel tersembunyi (confounding variable): cuaca panas membuat orang ke pantai DAN membeli es krim lebih banyak.
1. Kausal langsung: A → B (merokok → kanker paru — sudah terbukti eksperimen)
2. Kausal terbalik: B → A (bukan "sakit bikin orang ke dokter" tapi juga "dokter yang banyak bikin orang lebih sering cek kesehatan")
3. Confounding: C → A dan C → B (variabel C tersembunyi menyebabkan keduanya)
6. Matriks Korelasi (Correlation Heatmap)
Saat dataset memiliki banyak variabel numerik, matriks korelasi memperlihatkan seluruh pasangan korelasi sekaligus dalam satu tampilan. Heatmap menggunakan warna untuk mempercepat identifikasi pola.
Belajar
UTS
(%)
Main HP
🟢 Hijau = korelasi positif | 🔴 Merah = korelasi negatif | Intensitas warna = kekuatan korelasi
Dari heatmap di atas: Jam Belajar ↔ Nilai UTS (r=0.85) dan Jam Belajar ↔ IPK (r=0.79) adalah korelasi terkuat.
Jam Main HP ↔ Jam Belajar (r=−0.68) menunjukkan trade-off: mahasiswa yang banyak main HP cenderung belajar lebih sedikit.
Perhatikan diagonal utama selalu 1.00 — setiap variabel berkorelasi sempurna dengan dirinya sendiri.
Demo Interaktif: Kalkulator Korelasi Pearson
Masukkan dua set data untuk menghitung korelasi Pearson secara langsung:
7. Praktik Python
import pandas as pd
import numpy as np
from scipy import stats
np.random.seed(42)
n = 50
jam_belajar = np.random.normal(4, 1.5, n).clip(1, 8)
nilai_uts = (50 + 8 * jam_belajar + np.random.normal(0, 5, n)).clip(0, 100)
jam_hp = (8 - jam_belajar + np.random.normal(0, 1, n)).clip(0, 10)
kehadiran = (60 + 5 * jam_belajar + np.random.normal(0, 8, n)).clip(40, 100)
df = pd.DataFrame({
'jam_belajar': jam_belajar,
'nilai_uts' : nilai_uts,
'jam_hp' : jam_hp,
'kehadiran' : kehadiran
})
# ── Matriks korelasi Pearson ─────────────────────
print("=== MATRIKS KORELASI PEARSON ===")
print(df.corr(method='pearson').round(3))
# ── Uji signifikansi korelasi ────────────────────
r, p = stats.pearsonr(df['jam_belajar'], df['nilai_uts'])
print(f"\n[Jam Belajar ↔ Nilai UTS]")
print(f"r = {r:.3f}, p-value = {p:.4f}, R² = {r**2:.3f}")
if p < 0.05:
print(f"→ Korelasi SIGNIFIKAN secara statistik (α=0.05)")
# ── Spearman untuk data dengan potensi outlier ───
r_sp, p_sp = stats.spearmanr(df['jam_belajar'], df['nilai_uts'])
print(f"\nSpearman rho = {r_sp:.3f} (untuk perbandingan)")
# ── Temukan pasangan korelasi tertinggi ──────────
corr_matrix = df.corr()
pairs = []
cols = corr_matrix.columns
for i in range(len(cols)):
for j in range(i+1, len(cols)):
pairs.append((cols[i], cols[j], corr_matrix.iloc[i,j]))
pairs_df = pd.DataFrame(pairs, columns=['var1','var2','r'])
pairs_df = pairs_df.reindex(pairs_df['r'].abs().sort_values(ascending=False).index)
print("\n=== PASANGAN KORELASI DIURUTKAN ===")
print(pairs_df.round(3).to_string(index=False))
=== MATRIKS KORELASI PEARSON ===
jam_belajar nilai_uts jam_hp kehadiran
jam_belajar 1.000 0.906 -0.792 0.814
nilai_uts 0.906 1.000 -0.720 0.732
jam_hp -0.792 -0.720 1.000 -0.602
kehadiran 0.814 0.732 -0.602 1.000
[Jam Belajar ↔ Nilai UTS]
r = 0.906, p-value = 0.0000, R² = 0.821
→ Korelasi SIGNIFIKAN secara statistik (α=0.05)
Spearman rho = 0.893 (untuk perbandingan)
=== PASANGAN KORELASI DIURUTKAN ===
var1 var2 r
jam_belajar nilai_uts 0.906 ← terkuat positif
jam_belajar jam_hp -0.792 ← trade-off belajar vs HP
jam_belajar kehadiran 0.814
nilai_uts jam_hp -0.720
nilai_uts kehadiran 0.732
jam_hp kehadiran -0.602
Uji Pemahaman Sesi 11
- Korelasi mengukur kekuatan dan arah hubungan linear antara dua variabel; hasilnya antara −1 dan +1
- Pearson r: untuk numerik kontinu, distribusi normal, hubungan linear. Formula: Cov(X,Y)/(σX·σY)
- Interpretasi: |r| 0–0.3 lemah, 0.3–0.7 sedang, 0.7–1.0 kuat. Tanda menunjukkan arah bukan kekuatan
- R² (r kuadrat): persentase variansi Y yang dijelaskan X. r=0.8 → R²=0.64 → 64% variansi dijelaskan
- Spearman ρ: untuk data ordinal atau ada outlier; bekerja berbasis ranking; deteksi hubungan monoton
- Cramér's V: untuk asosiasi antara dua variabel kategorik
- Pearson = 0 tidak berarti tidak ada hubungan — bisa ada hubungan non-linear (kuadratik, dsb.)
- Korelasi ≠ Kausalitas: korelasi tidak membuktikan X menyebabkan Y; awasi spurious correlation dan confounding variables
- Matriks korelasi + heatmap: visualisasi seluruh pasangan korelasi sekaligus; diagonal selalu 1.00
- Python: df.corr(), df.corr(method='spearman'), scipy.stats.pearsonr() untuk uji signifikansi + p-value