Regresi linear sederhana (simple linear regression) memodelkan hubungan satu variabel respons numerik dengan satu prediktor numerik melalui sebuah garis lurus. Topik ini menyesuaikan model tersebut dengan lm() terhadap data jam belajar dan nilai ujian, lalu membedah keluaran summary() secara utuh, mulai dari tabel koefisien, p-value kemiringan, sampai R-squared. Interpretasi setiap angka dan batas penafsirannya dibahas pada bagian akhir bersama grafik sebar yang menampilkan garis modelnya.
Data sintetis jam belajar dan nilai ujian#
Data contoh berupa 30 siswa yang dibangkitkan secara sintetis agar hasilnya dapat direproduksi siapa pun. Jam belajar per minggu ditarik dari distribusi seragam di antara 1 dan 8, sedangkan nilai ujian disusun dari pola dasar 52 ditambah 4,5 kali jam belajar, lalu diberi gangguan acak normal dengan simpangan baku 5. Fungsi set.seed(2026) dipanggil sebelum pembangkitan agar urutan angka acaknya selalu sama pada setiap eksekusi.
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)
)
belajar── 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
# A tibble: 30 × 3
siswa jam nilai
<chr> <dbl> <dbl>
1 Ali 5.9 85.3
2 Budi 4.9 77.1
3 Citra 2 62.1
4 Dewi 3 61.5
5 Eka 4.9 77.5
6 Fajar 1.2 55.8
7 Gita 4.3 70.5
8 Hana 7 76.5
9 Indra 2.8 71.9
10 Joko 5.1 75.2
# ℹ 20 more rowsKeluaran menampilkan sepuluh baris pertama beserta penanda bahwa 20 baris lainnya tidak dicetak. Kolom siswa menyimpan nama fiktif, kolom jam menyimpan jam belajar per minggu dengan satu angka desimal, dan kolom nilai menyimpan nilai ujian skala 0 sampai 100. Gangguan acak yang dibangkitkan membuat nilai siswa dengan jam belajar sama tetap berbeda, sebagaimana data nyata.
Menyesuaikan model dengan lm()#
Model linear sederhana nilai ~ jam disesuaikan dengan satu pemanggilan lm() dan hasilnya disimpan ke objek bernama model. Objek ini menyimpan seluruh informasi model, seperti koefisien, residual, dan data pemanggilannya, sehingga fungsi lain seperti summary() dan predict() dapat membacanya kembali.
model <- lm(nilai ~ jam, data = belajar)
model
Call:
lm(formula = nilai ~ jam, data = belajar)
Coefficients:
(Intercept) jam
53.000 4.508 Bagian Call mengulang pemanggilannya, sedangkan bagian Coefficients menampilkan dua angka yang mendefinisikan garis modelnya, yaitu intersep 53,000 dan kemiringan 4,508. Pencetakan bawaan objek lm memang sengaja ringkas. Angka-angka ini adalah estimasi titik, dan ketidakpastiannya baru terlihat pada ringkasan lengkap yang dibahas berikutnya.
Membaca keluaran summary()#
Fungsi summary() menerapkan metode ringkasan khusus untuk objek lm dan mengembalikan seluruh bagian yang dibutuhkan untuk menilai model.
summary(model)
Call:
lm(formula = nilai ~ jam, data = belajar)
Residuals:
Min 1Q Median 3Q Max
-8.0548 -3.4104 0.0129 2.3577 8.4922
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 53.0000 1.8778 28.224 < 2e-16 ***
jam 4.5078 0.4907 9.187 6.05e-10 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.686 on 28 degrees of freedom
Multiple R-squared: 0.7509, Adjusted R-squared: 0.742
F-statistic: 84.4 on 1 and 28 DF, p-value: 6.05e-10Bagian Residuals menampilkan lima angka ringkas sebaran selisih data dengan garis model, yaitu nilai minimum, kuartil pertama, median, kuartil ketiga, dan maksimum. Bagian Coefficients memuat empat kolom untuk setiap koefisien. Kolom Estimate memberi estimasi titiknya, kolom Std. Error memberi ketidakpastian estimasinya, kolom t value adalah perbandingan keduanya, dan kolom Pr(>|t|) menyimpan p-value uji bahwa koefisien populasi bernilai nol. Simbol bintang di kanan baris jam menandai taraf signifikansinya menurut keterangan Signif. codes.
Tiga baris terakhir merangkum kualitas model secara keseluruhan. Residual standard error 4,686 pada 28 derajat bebas menyatakan simpangan tipikal nilai observasi terhadap garisnya. Multiple R-squared 0,7509 menyatakan porsi variasi nilai ujian yang dapat dijelaskan jam belajar, sedangkan adjusted R-squared 0,742 adalah versi yang sudah mengoreksi banyaknya prediktor. F-statistic 84,4 dengan derajat bebas 1 dan 28 menguji model secara keseluruhan, dan p-value 6,05e-10 yang sama dengan p-value kemiringan karena model ini hanya memuat satu prediktor.
Makna koefisien dan R-squared#
Intersep 53,000 berarti nilai ujian yang diprediksi untuk siswa dengan jam belajar nol. Kemiringan 4,5078 berarti setiap tambahan satu jam belajar per minggu dihubungkan dengan kenaikan nilai ujian rata-rata sekitar 4,5 poin. Kedua angka ini adalah estimasi atas pola rata-rata pada data, bukan janji atas setiap siswa, karena gangguan acak membuat siswa dengan jam belajar sama tetap bisa memperoleh nilai berbeda.
p-value kemiringan sebesar 6,05e-10 jauh di bawah ambang lazim 0,05, sehingga hipotesis nol kemiringan nol ditolak dengan kuat. R-squared 0,7509 melengkapi gambaran kualitas model, yaitu sekitar 75 persen variasi nilai ujian pada data ini terjelaskan oleh jam belajar, sedangkan 25 persen sisanya berasal dari faktor lain di luar model.
Grafik sebar dengan garis regresi#
Model paling mudah dinilai ketika garisnya ditempelkan pada data aslinya. Grafik berikut menggambar sebaran titik jam belajar dan nilai ujian, lalu menambahkan garis regresi melalui geom_smooth() dengan argumen method = "lm".
p <- ggplot(belajar, aes(x = jam, y = nilai)) +
geom_point(size = 2, color = "#4472C4") +
geom_smooth(method = "lm", formula = y ~ x, se = FALSE, color = "#C0504D") +
labs(
x = "Jam belajar per minggu",
y = "Nilai ujian",
title = "Regresi linear sederhana nilai ujian terhadap jam belajar"
) +
theme_minimal()
ggplot2::ggsave("garis-regresi.svg", p, width = 5, height = 3.2)Argumen formula = y ~ x dinyatakan secara eksplisit untuk menetapkan bentuk garis yang dicari, sehingga pesan pengingat bawaan ggplot2 tidak muncul. Argumen se = FALSE membuang pita ketidakpastiannya karena fokus bagian ini adalah garis modelnya. Titik-titik pada grafik mengikuti garis dengan sebaran yang relatif rapat, konsisten dengan nilai R-squared 0,7509 yang dilaporkan summary(). Pemeriksaan visual seperti ini merupakan langkah pertama dalam pemeriksaan asumsi model linear.
Ringkasan#
lm(nilai ~ jam, data = belajar)menyesuaikan garis linear dan menyimpan seluruh informasi modelnya ke dalam satu objek yang dapat dibaca fungsi lain.- Tabel
Coefficientspadasummary()menyajikan estimasi, error standar, nilai t, dan p-value untuk setiap koefisien. - Kemiringan 4,5078 berarti setiap tambahan satu jam belajar dihubungkan dengan kenaikan nilai rata-rata sekitar 4,5 poin, dan p-value 6,05e-10 menolak kemiringan nol.
- Multiple R-squared 0,7509 menyatakan porsi variasi respons yang dijelaskan model, sedangkan residual standard error 4,686 menyatakan simpangan tipikalnya.
geom_smooth(method = "lm")menampilkan garis model di atas sebaran titik sehingga kecocokan model dapat dinilai secara visual.
Referensi#
- An Introduction to R — CRAN — Bab Statistical models in R menjelaskan pemanggilan lm() dan pembacaan ringkasan model linear.
- R for Data Science, edisi ke-2 — Wickham, Çetinkaya-Rundel, Grolemund — Bab model membahas pembentukan model sederhana dan makna koefisiennya.