Pendahuluan

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

Pengaruh Konsumsi Permen Terhadap Kunjungan Rumah Sakit

#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