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
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")