library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.2.2
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6      ✔ purrr   0.3.5 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.4.1 
## ✔ readr   2.1.4      ✔ forcats 0.5.2
## Warning: package 'readr' was built under R version 4.2.3
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(modelr)
## Warning: package 'modelr' was built under R version 4.2.2

Regresi Linear Sederhana

Model statistik adalah fungsi matematika yang menerima input dan menghasilkan output. Cara fungsi-fungsi ini didefinisikan tergantung pada kumpulan data yang berisi (idealnya beberapa) pasangan input-output yang diamati. Model itu sendiri menggeneralisasi hubungan input-output yang diamati dalam kumpulan data. Dalam model statistik, variabel input biasanya disebut prediktor atau fitur atau variabel penjelas atau independen . Outputnya biasanya disebut respon atau variabel dependen .

Misalnya, pertimbangkan kumpulan data sampel kecil sim1:

sim1
## # A tibble: 30 × 2
##        x     y
##    <int> <dbl>
##  1     1  4.20
##  2     1  7.51
##  3     1  2.13
##  4     2  8.99
##  5     2 10.2 
##  6     2 11.3 
##  7     3  7.36
##  8     3 10.5 
##  9     3 10.5 
## 10     4 12.4 
## # … with 20 more rows

Kami memiliki 30 pasang input-output; kita akan xmenjadi variabel prediktor dan ymenjadi variabel respon. Pertanyaan yang wajar adalah, "Jika kita mengetahui nilai dari x, dapatkah kita memperkirakan nilai dari y?" Secara teknis, jawabannya adalah "tidak", karena, misalnya, kapan x3, ybisa jadi 7,36 atau 10,5. Tetapi tujuan dari model statistik adalah untuk memberikan prediksi perkiraan daripada yang tepat.

Langkah pertama yang baik untuk membuat prediksi adalah mendapatkan sebaran data. Kami juga akan menyertakan kurva tren:

ggplot(data = sim1, mapping = aes(x = x, y = y)) +
  geom_point() +
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Sebelum melanjutkan, ada baiknya menunjukkan jalan pintas dalam ggplotsintaks. Argumen pertama yang dibutuhkan oleh setiap ggplotpemanggilan adalah data =. Jadi, sebenarnya tidak perlu menyertakan data =; Anda cukup mengetikkan nama kumpulan data. Hal yang sama berlaku untuk mapping =. Ini adalah argumen kedua secara default, jadi Anda bisa memasukkan estetika Anda dengan aes. Terakhir, di geom_pointand geom_smooth, dipahami bahwa dua argumen pertama yang digunakan di dalamnya aesadalah x =and y =, jadi Anda bisa memasukkan variabel xand ysecara langsung. Dengan demikian, ggplotpanggilan di atas dapat disingkat menjadi:

ggplot(sim1, aes(x, y)) +
  geom_point() +
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Kami akan menggunakan pintasan ini mulai sekarang.

Ngomong-ngomong, mengacu pada plot pencar kita, jelas bahwa, meskipun poin kita tidak semuanya terletak persis pada garis yang sama, mereka tampaknya mengelompok di sekitar beberapa garis yang sama. Garis yang paling cocok ini disebut garis regresi kumpulan data. Menjadi garis, dapat dijelaskan secara aljabar dengan persamaan bentuk y=m( x) + b. Jika kita dapat menemukan nilai m (kemiringan) dan b (perpotongan y), kita akan memiliki model statistik untuk kumpulan data kita. Model statistik jenis ini disebut model regresi linier sederhana . Kata “sederhana” mengacu pada fakta bahwa kita hanya memiliki satu variabel prediktor. Ketika kami memiliki lebih dari satu, kami menyebutnya regresi linier berganda .

Salah satu cara untuk menemukan m dan b adalah dengan mengamati plot pencar. Ini tidak ideal, tetapi ini akan membantu kita memulai. Jika kita memperpanjang kurva tren biru ke kiri, sepertinya akan memotong sumbu y di sekitar 4. Juga, terlihat seperti xpeningkatan dari 1 ke 10, ymeningkat dari sekitar 5 ke 24. Ini berarti kita memiliki kenaikan 19 selama lari 9, untuk kemiringan 19/9, atau sekitar 2,1. Jika kita memiliki kemiringan dan intersep dalam pikiran, kita dapat memplot garis yang sesuai dengan geom_abline. Mari plot garis regresi bola mata kita di atas plot pencar kita:

ggplot(sim1) +
  geom_point(aes(x, y)) +
  geom_abline(intercept = 4, slope = 2.1)

Ini terlihat sangat cocok, tetapi kami lebih suka R melakukannya untuk kami. Kita dapat mencapai ini dengan lmfungsi (= model linier) dari perpustakaan modelr . Pada kode di bawah ini, sim1_modeladalah nama yang kita pilih untuk model regresi kita. Perhatikan juga argumen pertama dari lmis y ~ x. Fungsi lmingin kita memasukkan variabel respon di sebelah kiri ~dan prediktor di sebelah kanan.

sim1_model <- lm(y ~ x, data = sim1)

Mari kita lihat apa yang kita miliki:

sim1_model
## 
## Call:
## lm(formula = y ~ x, data = sim1)
## 
## Coefficients:
## (Intercept)            x  
##       4.221        2.052

Sepertinya nilai intersep sebenarnya adalah 4,221. Nilai 2,052 yang tercantum di bawah xpada keluaran di atas adalah koefisien dari xmodel linier kami, yaitu kemiringan. Jadi sepertinya kita sudah dekat. Mari plot garis regresi sebenarnya dengan warna merah di atas perkiraan kami dari atas:

ggplot(sim1) +
  geom_point(aes(x, y)) +
  geom_abline(intercept = 4, slope = 2.1) +
  geom_abline(intercept = 4.221, slope = 2.052, color = "green")

Sulit untuk membedakannya, tetapi kami akan percaya bahwa garis merah lebih cocok dengan data.

Tentu saja, bukan praktik yang baik untuk melakukan semua ini sedikit demi sedikit, menyalin intersep dan kemiringan ke geom_abline. Kesalahan entri dapat terjadi. Kita dapat mengekstrak nilai-nilai ini langsung dari model, dengan mendapatkan vektor koefisien :

coef(sim1_model)
## (Intercept)           x 
##    4.220822    2.051533

Jika kita memberi nama vektor ini, kita kemudian dapat mengakses entri individual saat merencanakan garis regresi kita:

sim1_coefs <- coef(sim1_model)

b <- sim1_coefs[1]
m <- sim1_coefs[2]

ggplot(sim1) +
  geom_point(aes(x, y)) +
  geom_abline(intercept = b, slope = m, color = "red")