Regresi merupakan suatu model dalam statistik yang berfungsi untuk mencari hubungan antara variabel bebas (variabel independen atau prediktor) dengan variabel dependen (respon). Secara umum, bentuk persamaan dari model regresi linier dapat dirumuskan sebagai berikut: \(y=ax+b\).
Metode least square method adalah metode yang digunakan untuk menentukan nilai dari koefisien dalam model regresi. Misalkan dalam sebuah dataset kita memiliki pasangan data \((x_i, y_i)\) dimana \(i=1,2,3,...,n\).
Bentuk hubungan \(y_i\) dan \(x_i\) dapat dituliskan sebagai berikut: \(y_i=ax_i+b+e_i\).
Persamaan regresi dari dataset tersebut adalah: \(\hat y_i=ax_i+b\).
Persamaan error dari kedua persamaan di atas adalah: \(e_i=y_i-\hat y_i\)
Prinsip metode least square method adalah meminimumkan jumlah kuadrat error (Sum Square Error atau SSE):
\(SSE= \sum \limits_{i=1}^{n} {(y_i-\hat y_i)^2}=\sum \limits_{i=1}^{n} {(y_i-ax_i-b)^2}\)
Dengan meminimumkan \(SSE\) maka diperoleh:
\(a=\frac {\sum \limits_{i=1}^{n} {(x_i-\bar x)(y_i-\bar y)}}{\sum \limits_{i=1}^{n}(x_i-\bar x)^2}\)
\(b=\bar y-a \bar x\)
#import data
penjualan_permen = read.csv("D:/LOOKER DAN R/modul R/data/tingkat_penjualan_kota_x.tsv", header = TRUE, sep= "\t")
kunjungan_dokter = read.csv("D:/LOOKER DAN R/modul R/data/kunjungan_dokter_gigi_kota_x.tsv", header = TRUE, sep= "\t")
head(penjualan_permen)
## No Bulan Tahun penjualan.permen penjualan.sereal penjualan.buah.pisang
## 1 1 1 1996 200661 10324 112146
## 2 2 2 1996 297141 13150 175417
## 3 3 3 1996 235586 5398 104645
## 4 4 4 1996 299498 7609 112283
## 5 5 5 1996 395824 5190 137083
## 6 6 6 1996 247212 14571 198130
head(kunjungan_dokter)
## Bulan Tahun tingkat.kunjungan.ke.dokter.gigi
## 1 1 1996 37
## 2 2 1996 32
## 3 3 1996 56
## 4 4 1996 43
## 5 5 1996 52
## 6 6 1996 70
Kedua dataset diatas memiliki kolom atau unique key yang sama yaitu
Bulan dan Tahun. Kita dapat menggabungkan
kedua dataset ini berdasarkan variabel tersebut, menggunakan funtion
merge untuk menggabungkan kedua data ini.
#merge data
data_gabungan = merge(kunjungan_dokter, penjualan_permen, by.x=c("Bulan","Tahun"), by.y=c("Bulan","Tahun"), sort=FALSE)
head(data_gabungan)
## Bulan Tahun tingkat.kunjungan.ke.dokter.gigi No penjualan.permen
## 1 1 1996 37 1 200661
## 2 2 1996 32 2 297141
## 3 3 1996 56 3 235586
## 4 4 1996 43 4 299498
## 5 5 1996 52 5 395824
## 6 6 1996 70 6 247212
## penjualan.sereal penjualan.buah.pisang
## 1 10324 112146
## 2 13150 175417
## 3 5398 104645
## 4 7609 112283
## 5 5190 137083
## 6 14571 198130
#Data Eksplorasi: Kunjungan ke Dokter Gigi vs Perilaku Konsumsi
summary(data_gabungan$tingkat.kunjungan.ke.dokter.gigi)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 32.00 55.00 75.00 75.17 90.50 132.00
summary(data_gabungan$penjualan.permen)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 141211 256775 298320 310964 393837 467572
summary(data_gabungan$penjualan.sereal)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2372 5143 9366 9282 13711 16209
summary(data_gabungan$penjualan.buah.pisang)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 100091 112249 139996 140682 157232 198130
Berdasarkan eksplorasi data di atas, dapat diketahui bahwa nilai terkecil kunjungan dokter itu bernilai 32 dan nilai maksimum kunjungan dokter bernilai 132 dalam sebulan. Selain itu, konsumsi masyarakat terhadap permen dan buah pisang cukup tinggi, sementara konsumsi untuk sereal cukup rendah dibanding kedua variabel lainnya.
Selanjutnya eksplorasi data dengan visualisasi Scatter Plot sebagai berikut.
#Melakukan Eksplorasi Data Dengan Visualisasi
#Melakukan explorasi data kunjungan dokter dengan penjualan permen
plot(data_gabungan$penjualan.permen, data_gabungan$tingkat.kunjungan.ke.dokter.gigi,
pch = 19,
xlab = "Penjualan Permen",
ylab = "Kunjungan dokter",
main = "Kunjungan dokter dengan penjualan permen",
col = "blue")
#Melakukan explorasi data kunjungan dokter dengan penjualan sereal
plot(data_gabungan$penjualan.sereal, data_gabungan$tingkat.kunjungan.ke.dokter.gigi,
pch = 19,
xlab = "Penjualan Sereal",
ylab = "Kunjungan dokter",
main = "Kunjungan dokter dengan penjualan sereal",
col = "blue")
#Melakukan explorasi data kunjungan dokter dengan penjualan buah pisang
plot(data_gabungan$penjualan.buah.pisang, data_gabungan$tingkat.kunjungan.ke.dokter.gigi,
pch = 19,
xlab = "Penjualan Buah Pisang",
ylab = "Kunjungan dokter",
main = "Kunjungan dokter dengan penjualan buah pisang",
col = "blue")
Dari ketiga scatterplot tersebut tidak ada hubungan yang cukup kuat
antara kunjungan dokter gigi dengan penjualan permen, sereal maupun
pisang. Hal ini dapat terjadi karena efek keterlambatan. Misal, kalau
makan permen sekarang, belum tentu akan langsung sakit gigi pada saat
itu juga. Peristiwa ini sering disebut dengan efek keterlambatan atau
delay effect. Oleh karena itu perlu dicek dulu efek keterlambatan
memakan permen ini terhadap kunjungan ke dokter gigi. Untuk mendapatkan
data dengan delayed effect tersebut, dapat menggunakan function
lag dengan menggunakan library dplyr. Bentuk
umum dari perintah lag adalah lag(x, n) dimana
x merupakan data yang ingin dicari nilai lag nya dan
n merupakan periode atau jumlah data. Karena data yang
digunakan merupakan data bulanan, maka nilai n akan merujuk kepada
periode 1, 2, 3, bulan dst. Untuk kasus ini akan menggunakan delay
effect paling lama sebesar 6 bulan.
#delay effect
library (dplyr)
## Warning: package 'dplyr' was built under R version 4.2.2
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data_delayed_effect = data.frame(
month = data_gabungan$Bulan,
year = data_gabungan$Tahun,
kunjungan_dokter = data_gabungan$tingkat.kunjungan.ke.dokter.gigi,
penjualan_permen = data_gabungan$penjualan.permen,
penjualan_permen_1 = lag(data_gabungan$penjualan.permen),
penjualan_permen_2 = lag(data_gabungan$penjualan.permen,2),
penjualan_permen_3 = lag(data_gabungan$penjualan.permen,3),
penjualan_permen_4 = lag(data_gabungan$penjualan.permen,4),
penjualan_permen_5 = lag(data_gabungan$penjualan.permen,5),
penjualan_permen_6 = lag(data_gabungan$penjualan.permen,6)
)
head(data_delayed_effect)
## month year kunjungan_dokter penjualan_permen penjualan_permen_1
## 1 1 1996 37 200661 NA
## 2 2 1996 32 297141 200661
## 3 3 1996 56 235586 297141
## 4 4 1996 43 299498 235586
## 5 5 1996 52 395824 299498
## 6 6 1996 70 247212 395824
## penjualan_permen_2 penjualan_permen_3 penjualan_permen_4 penjualan_permen_5
## 1 NA NA NA NA
## 2 NA NA NA NA
## 3 200661 NA NA NA
## 4 297141 200661 NA NA
## 5 235586 297141 200661 NA
## 6 299498 235586 297141 200661
## penjualan_permen_6
## 1 NA
## 2 NA
## 3 NA
## 4 NA
## 5 NA
## 6 NA
plot(data_delayed_effect$penjualan_permen, data_delayed_effect$kunjungan_dokter,
pch = 19,
xlab = "Penjualan Permen",
ylab = "Kunjungan dokter",
main = "Kunjungan dokter dengan penjualan permen",
col = "blue")
plot(data_delayed_effect$penjualan_permen_1, data_delayed_effect$kunjungan_dokter,
pch = 19,
xlab = "Penjualan Permen",
ylab = "Kunjungan dokter",
main = "Kunjungan dokter dengan penjualan permen (delay 1 bulan)",
col = "blue")
plot(data_delayed_effect$penjualan_permen_2, data_delayed_effect$kunjungan_dokter,
pch = 19,
xlab = "Penjualan Permen",
ylab = "Kunjungan dokter",
main = "Kunjungan dokter dengan penjualan permen (delay 2 bulan)",
col = "blue")
plot(data_delayed_effect$penjualan_permen_3, data_delayed_effect$kunjungan_dokter,
pch = 19,
xlab = "Penjualan Permen",
ylab = "Kunjungan dokter",
main = "Kunjungan dokter dengan penjualan permen (delay 3 bulan)",
col = "blue")
plot(data_delayed_effect$penjualan_permen_4, data_delayed_effect$kunjungan_dokter,
pch = 19,
xlab = "Penjualan Permen",
ylab = "Kunjungan dokter",
main = "Kunjungan dokter dengan penjualan permen (delay 4 bulan)",
col = "blue")
plot(data_delayed_effect$penjualan_permen_5, data_delayed_effect$kunjungan_dokter,
pch = 19,
xlab = "Penjualan Permen",
ylab = "Kunjungan dokter",
main = "Kunjungan dokter dengan penjualan permen (delay 5 bulan)",
col = "blue")
plot(data_delayed_effect$penjualan_permen_6, data_delayed_effect$kunjungan_dokter,
pch = 19,
xlab = "Penjualan Permen",
ylab = "Kunjungan dokter",
main = "Kunjungan dokter dengan penjualan permen (delay 6 bulan)",
col = "blue")
Berdasarkan grafik yang dihasilkan dapat terlihat bahwa dengan delayed effect selama 4 bulan, hubungan antara tingkat kunjungan dokter dengan penjualan permen terlihat cukup kuat dan berkorelasi positif.
Selanjutnya akan dilakukan analisis model regresi menggunakan data kunjungan dokter dengan penjualan permen dengan delayed effect selama 4 bulan.
# Data Analisis Regresi
data_regresi = data.frame(
month = data_delayed_effect$month,
tahun = data_delayed_effect$year,
kunjungan_dokter = data_delayed_effect$kunjungan_dokter,
penjualan_permen = data_delayed_effect$penjualan_permen_4)
head(data_regresi)
## month tahun kunjungan_dokter penjualan_permen
## 1 1 1996 37 NA
## 2 2 1996 32 NA
## 3 3 1996 56 NA
## 4 4 1996 43 NA
## 5 5 1996 52 200661
## 6 6 1996 70 297141
#Mengeliminasi data NA
data_regresi = na.omit(data_regresi)
head(data_regresi)
## month tahun kunjungan_dokter penjualan_permen
## 5 5 1996 52 200661
## 6 6 1996 70 297141
## 7 7 1996 64 235586
## 8 8 1996 88 299498
## 9 9 1996 74 395824
## 10 10 1996 98 247212
#Model analisis regresi
model = lm(kunjungan_dokter ~ penjualan_permen, data = data_regresi)
summary(model)
##
## Call:
## lm(formula = kunjungan_dokter ~ penjualan_permen, data = data_regresi)
##
## Residuals:
## Min 1Q Median 3Q Max
## -30.112 -7.738 -2.386 7.818 28.121
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.293e+01 1.212e+01 1.067 0.3
## penjualan_permen 2.303e-04 3.909e-05 5.893 1.4e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 14.38 on 18 degrees of freedom
## Multiple R-squared: 0.6586, Adjusted R-squared: 0.6397
## F-statistic: 34.73 on 1 and 18 DF, p-value: 1.403e-05
Berdasarkan model regresi diatas, dapat diketahui bahwa hubungan antara penjualan permen dengan kunjungan ke dokter bersifat positif. Yang berarti bahwa ketika penjualan permen semakin meningkat, maka kunjungan ke dokter gigi akan meningkat juga. Namun efek peningkatan kunjungan dokter ini akan terjadi dalam 4 bulan kedepan.
Model regresi yang dihasilkan yaitu: \(\hat y=0.0002303 x+12.93\) Ini berarti bahwa setiap ada kenaikan penjualan permen sebesar \(100000\) maka akan meningkatkan kunjungan dokter sebesar \(35.96\) orang atau sekitar \(36\) orang dalam 4 bulan kedepan.
Selanjutnya, misal kita memiliki data penjualan permen pada bulan Januari, Februari, Maret, April, dan Mei 1998 sebagai berikut:
data_prediksi = data.frame(
month = c(1,2,3,4,5),
year = c(1998,1998,1998,1998,1998),
penjualan_permen = c(345646, 454344, 346987, 209854, 254634)
)
data_prediksi
## month year penjualan_permen
## 1 1 1998 345646
## 2 2 1998 454344
## 3 3 1998 346987
## 4 4 1998 209854
## 5 5 1998 254634
Maka prediksi kunjungan ke dokter gigi adalah sebagai berikut.
#Menggunakan metode predict untuk memprediksi kunjungan dokter
round(predict(model, data_prediksi),0)
## 1 2 3 4 5
## 93 118 93 61 72