email             :
ntraktir          : https://trakteer.id/contekansial
nyawer          : https://saweria.co/contekansial
github            : https://bit.ly/origin-AL-GitHub
youtube         : https://bit.ly/origin-AL-youtube


1 Pengenalan Kasus

1.1 Pengantar Kasus

Namaku A, aku saat ini merupakan seorang data scientist yang baru bekerja di AL.Dent, salah satu klinik kesehatan gigi. Saat ini AL.Dent sedang mempersiapkan program penyuluhan kesehatan gigi dan topik yang akan disampaikan oleh AL.Dent adalah menjaga kesehatan gigi. L melihat bahwa kunjungan anak-anak ke AL.Dent belakangan ini cukup meningkat dan beranggapan bahwa hal ini berkaitan dengan pola konsumsi di sekitar daerah mereka. Asumsi L, ini semua dapat terjadi karena konsumsi terhadap permen cukup tinggi. Namun, L belum dapat mengambil keputusan dari asumsinya, dan akan melakukan uji hipotesis terlebih dahulu.

“Hai A! Kamu tahu kan kalau kita akan mengadakan penyuluhan kesehatan gigi? Aku melihat bahwa kunjungan pasien anak-anak ke AL.Dent belakangan ini meningkat. Sepertinya aku butuh bantuanmu untuk melakukan analisis terhadap data kunjungan ke klinik ini!” ucap L kepadaku.

“Halo L! Ya, tentu saja! Aku sudah mengetahui program penyuluhan ini. Terkait analisis yang kamu minta, apakah kamu dapat menjelaskan kebutuhan analisis datanya?” balasku.

“Aku ingin mengetahui apakah terdapat hubungan antara kunjungan ke AL.Dent dengan perilaku konsumsi masyarakat? Aku sudah mendapatkan datanya dan akan mengirimkan dataset dan informasi yang lebih jelas lagi tentang analisis ini lewat email. Tapi untuk sementara, kamu bisa fokus untuk mencari hubungan antara kunjungan ke Rumah Sakit dengan penjualan permen!” L memberikan instruksi kepadaku.

“Baik, siap! Aku tunggu datanya ya!” jawabku sambil mulai mempersiapkan laptopku untuk mengerjakan tugas dari L.

Ketika ada tanda email baru masuk ke inbox ku, aku segera membuka email dari L. Setelah mempelajari datanya, aku dapat memanfaatkan model regresi dalam analisis dan akan menerapkannya pada tugas ini.

1.2 Apa Itu Model Regresi Linear?

Analisis yang diminta oleh L adalah analisis untuk mengetahui hubungan antara kunjungan AL.Dent dengan kebiasaan mengkonsumsi permen. Hasil dari analisis ini akan dibawakan oleh L dalam penyuluhan kesehatan gigi pada bulan ini. Permasalahan ini dapat diselesaikan dengan model regresi. Aku kembali mencari informasi tentang regresi yang pernah kupelajari sebelumnya.

Regresi merupakan suatu model dalam statistik yang berfungsi untuk mencari hubungan antara variabel bebas atau yang sering disebut dengan variabel independen (prediktor) dengan variabel dependen atau sering disebut dengan respon. Secara umum, bentuk persamaan dari model regresi dapat dirumuskan sebagai berikut:

y = f(x)

Dimana nilai y merupakan nilai dari respons yang bergantung pada sebuah fungsi dari variabel x(f(x)). Secara umum f(x) ini dapat terdiri dari:

  • Fungsi linear
  • Fungsi kuadratik
  • Fungsi log
  • Fungsi eksponensial, dan sebagainya.

Untuk menyelesaikan analisa ini, aku akan fokus belajar menggunakan fungsi linear dengan satu buah variabel bebas yang sering disebut dengan regresi linear. Regresi linear dapat digunakan ketika terdapat hubungan yang linear antara variabel independen dan variabel dependen. Berikut ini adalah bentuk persamaan umum sebuah model regresi dengan menggunakan fungsi linear:

y = a + bx + e

Dimana y merupakan nilai prediksi dan a merupakan sebuah variabel intercept. Intercept merupakan titik dimana garis regresi akan memotong sumbu y ketika x bernilai sama dengan 0. Dengan kata lain, intercept adalah nilai perubahan variabel y ketika x bernilai 0. Variabel b merupakan konstanta untuk menunjukkan besar perubahan variabel y untuk setiap kenaikan 1 dan e merupakan nilai error. Nilai dari a, b ini dapat teman-teman hitung dengan menggunakan metode kuadrat terkecil atau yang sering disebut dengan least-square method.

1.3 Metode Least Square

Metode least square adalah metode yang digunakan untuk menentukan nilai dari koefisien dalam model regresi. Pada dasarnya metode least square adalah mencari model regresi terbaik yang memiliki nilai error yang terkecil. Aku kembali membaca beberapa materi yang dapat mendukung analisisku terhadap permintaan L. Aku membuat catatan kecil seperti berikut ini, agar mempermudahku jika akan menggunakannya nanti.

1.4 Contoh Kasus Regresi Linier: Representasi Data

Aku merasa lebih mudah jika menggunakan studi kasus. Oleh karena itu, aku mencoba membuat perumpamaan menggunakan beberapa data seperti berikut ini. Aku memiliki variabel dependen x dan variabel independen y. Ada 20 data point yang akan dicoba untuk mencari model regresi linear dari data ini.

Pertama-tama aku akan memvisualisasikan data ini ke dalam scatterplot untuk dapat mengetahui persebaran datanya. Berikut adalah persebaran data menggunakan scatterplot:

Grafik di Atas menunjukkan hubungan variabel x dan variabel y, dimana terlihat bahwa kedua variabel tersebut berkorelasi negatif. Ini bermakna bahwa semakin tinggi nilai x, maka nilai y akan semakin kecil.

1.5 Contoh Kasus Regresi Linier: Koefisien Regresi dan Linear Fit

Berdasarkan scatterplot yang telah ditampilkan sebelumnya, aku akan mencoba mencari model regresi dari dataset yang kumiliki. Kita akan mencoba mencari model regresi dari dataset yang kita miliki dengan mengacu pada persamaan regresi linier yang telah dijelaskan. Variabel x memiliki nilai rata-rata sebesar 38.25 dan variabel y memiliki rata-rata sebesar 55.55. Berikut ini adalah perhitungan yang kita butuhkan untuk menghitung nilai koefisien regresi.

Dengan menggunakan persamaan di Atas, aku dapat menentukan nilai a dan b sebagai berikut:

Dengan demikian, aku dapat menentukan kedua koefisien regresi linier ini yaitu :

Dengan menggunakan variabel di Atas, aku mendapatkan persamaan sebagai berikut:

Cara di Atas adalah metode yang cukup sering digunakan dalam model regresi. Perhitungan di Atas cukup banyak melibatkan perhitungan matematis. Dari bahan materi ini, aku dapat menggunakan bahasa pemrograman R untuk menghitung model regresi dengan cepat.


2 Eksplorasi Data

2.1 Pengaruh Konsumsi Permen terhadap Kunjungan Rumah Sakit

Aku kembali mengecek email dari L. Aku melihat ada 2 dataset yang bisa kugunakan untuk mendapatkan hasil analisa. Dataset pertama yaitu kunjungan_dokter_gigi_kota_x yang berisi data tingkat kunjungan masyarakat ke dokter gigi perbulan. Dataset kedua yaitu tingkat_penjualan_kota_x yang berisikan data penjualan makanan per bulan.

Sebagai langkah awal, aku melakukan import data .tsv menggunakan R. Aku membuka aplikasi R untuk melihat data yang diberikan L dan menggunakan perintah read.csv() dengan separator sep = "\t", karena data yang diberikan L memiliki format .tsv atau tab separated value.

#membaca dataset kunjungan_dokter_gigi_kota_x
kunjungan_dokter = read.csv("https://storage.googleapis.com/dqlab-dataset/kunjungan_dokter_gigi_kota_x_dqlab.tsv", header = TRUE, sep = "\t")
#membaca dataset tingkat_penjualan_kota_x
penjualan_permen = read.csv("https://storage.googleapis.com/dqlab-dataset/tingkat_penjualan_kota_x_dqlab.tsv", header = TRUE, sep = "\t")

Untuk menampilkan tabel, aku menggunakan fungsi print().

#melihat data kunjungan_dokter
print(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
## 7      7  1996                               64
## 8      8  1996                               88
## 9      9  1996                               74
## 10    10  1996                               98
## 11    11  1996                               80
## 12    12  1996                               46
## 13     1  1997                               66
## 14     2  1997                               78
## 15     3  1997                               46
## 16     4  1997                               62
## 17     5  1997                              124
## 18     6  1997                              106
## 19     7  1997                              110
## 20     8  1997                               98
## 21     9  1997                               76
## 22    10  1997                              132
## 23    11  1997                               82
## 24    12  1997                               84
#melihat data penjualan_permen
print(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
## 7   7     7  1996           273899            13407                194685
## 8   8     8  1996           184405             8914                100091
## 9   9     9  1996           141211             3663                194972
## 10 10    10  1996           292225            14756                133166
## 11 11    11  1996           227864             3883                155598
## 12 12    12  1996           259963             5720                104563
## 13 13     1  1997           433783            16209                104216
## 14 14     2  1997           343034             5955                142908
## 15 15     3  1997           419255            14789                135994
## 16 16     4  1997           393175            11150                154659
## 17 17     5  1997           304954             4930                122983
## 18 18     6  1997           439380            15041                104657
## 19 19     7  1997           270706            14210                163008
## 20 20     8  1997           319472             5002                149116
## 21 21     9  1997           262688             3172                144727
## 22 22    10  1997           322140             9818                148500
## 23 23    11  1997           467572            13545                120676
## 24 24    12  1997           431484             2372                162135

2.2 Merge Data

Untuk dapat melakukan analisis yang diminta oleh L, pertama-tama aku harus menggabungkan kedua dataset yang kudapat sebelumnya menjadi satu. Aku melihat bahwa kedua dataset di Atas memiliki kolom atau disebut dengan unique key yang sama, yaitu Bulan dan Tahun. Aku dapat menggabungkan kedua dataset ini berdasarkan variabel tersebut. Aku menggunakan perintah merge() untuk menggabungkan kedua data ini.

Perintah merge() ini berfungsi untuk menggabungkan data. Bentuk umum dari fungsi merge() yaitu merge(x, y, by.x, by.y, sort=TRUE).

  1. x dan y merupakan dataset yang ingin digabungkan.
  2. Parameter by.x dan by.y merupakan kolom yang akan digunakan untuk menggabungkan data. Untuk data dengan lebih dari satu unique key, dapat menggunakan perintah by.x = c("key 1", "key 2", ..., "dst"). Namun jika terdapat 1 unique key, cukup menggunakan perintah by.x = "key 1".
  3. Parameter sort=FALSE atau sort=TRUE digunakan untuk mengurutkan data ketika melakukan join.

Aku menjalankan perintah berikut untuk menggabungkan kedua dataset kunjungan_dokter dan penjualan_permen

#menggabungkan 2 dataset
data_gabungan = merge(kunjungan_dokter, penjualan_permen, by.x=c("Bulan","Tahun"), by.y=c("Bulan","Tahun"), sort=FALSE)
#melihat data hasil penggabungan
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
## 7      7  1996                               64  7           273899
## 8      8  1996                               88  8           184405
## 9      9  1996                               74  9           141211
## 10    10  1996                               98 10           292225
## 11    11  1996                               80 11           227864
## 12    12  1996                               46 12           259963
## 13     1  1997                               66 13           433783
## 14     2  1997                               78 14           343034
## 15     3  1997                               46 15           419255
## 16     4  1997                               62 16           393175
## 17     5  1997                              124 17           304954
## 18     6  1997                              106 18           439380
## 19     7  1997                              110 19           270706
## 20     8  1997                               98 20           319472
## 21     9  1997                               76 21           262688
## 22    10  1997                              132 22           322140
## 23    11  1997                               82 23           467572
## 24    12  1997                               84 24           431484
##    penjualan.sereal penjualan.buah.pisang
## 1             10324                112146
## 2             13150                175417
## 3              5398                104645
## 4              7609                112283
## 5              5190                137083
## 6             14571                198130
## 7             13407                194685
## 8              8914                100091
## 9              3663                194972
## 10            14756                133166
## 11             3883                155598
## 12             5720                104563
## 13            16209                104216
## 14             5955                142908
## 15            14789                135994
## 16            11150                154659
## 17             4930                122983
## 18            15041                104657
## 19            14210                163008
## 20             5002                149116
## 21             3172                144727
## 22             9818                148500
## 23            13545                120676
## 24             2372                162135

2.3 Data Eksplorasi: Kunjungan ke Dokter Gigi vs Perilaku Konsumsi

Setelah aku berhasil menggabungkan kedua dataset, aku sudah siap untuk melanjutkan analisis yang diminta oleh L. Aku baru menyadari bahwa ternyata melakukan eksplorasi terhadap data sebelum melakukan analisis regresi adalah hal yang cukup berguna. Lewat eksplorasi data, aku dapat mengetahui karakteristik dari data yang digunakan, apakah terdapat trend dari variabel, bagaimana nilai rata-rata dari setiap variabel, dan bagaimana variabel bebas berkorelasi dengan variabel tidak bebas.

Menghitung summary dari data

Mengetahui statistik dasar dari dataset yang dimiliki perlu untuk mendapatkan gambaran bagaimana persebaran data. Berikut ini adalah perintah yang aku gunakan untuk mendapatkan summary dari data yang dimiliki.

#melihat statistik dasar kolom tingkat.kunjungan.ke.dokter.gigi
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
#melihat statistik dasar kolom penjualan.permen
summary(data_gabungan$penjualan.permen)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  141211  256775  298320  310964  393837  467572
#melihat statistik dasar kolom penjualan.sereal
summary(data_gabungan$penjualan.sereal)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2372    5143    9366    9282   13711   16209
#melihat statistik dasar kolom penjualan.buah.pisang 
summary(data_gabungan$penjualan.buah.pisang)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  100091  112249  139996  140682  157232  198130

Dengan melihat data di Atas, akhirnya aku bisa mengambil kesimpulan bahwa nilai terkecil kunjungan dokter itu bernilai 32 dan nilai maksimum kunjungan dokter bernilai 132 dalam sebulan. Aku pun menyadari bahwa konsumsi masyarakat terhadap permen dan buah pisang cukup tinggi, sementara konsumsi untuk sereal cukup rendah dibanding kedua variabel lainnya.

2.4 Melakukan Eksplorasi Data dengan Visualisasi

Selain menggunakan eksplorasi data, visualisasi data juga merupakan hal yang penting sebelum melakukan analisis regresi. Dalam metode kali ini, aku akan menggunakan scatter plot untuk melihat hubungan antara kunjungan dokter gigi dengan penjualan permen, sereal, dan pisang. Jadi aku perlu membuat grafiknya secara berurutan coding-nya.

#melakukan explorasi data kunjungan dokter dengan penjualan permen
plot(data_gabungan$tingkat.kunjungan.ke.dokter.gigi, data_gabungan$penjualan.permen,
    pch = 19,
    xlab = "Kunjungan Dokter",
    ylab = "Penjualan Permen",
    main = "Kunjungan Dokter dengan Penjualan Permen",     
    col = "blue")

#melakukan explorasi data kunjungan dokter dengan penjualan sereal
plot(data_gabungan$tingkat.kunjungan.ke.dokter.gigi, data_gabungan$penjualan.sereal,
    pch = 19,
    xlab = "Kunjungan Dokter",
    ylab = "Penjualan Sereal",
    main = "Kunjungan Dokter dengan Penjualan Sereal",     
    col = "blue")

#melakukan explorasi data kunjungan dokter dengan penjualan buah pisang
plot(data_gabungan$tingkat.kunjungan.ke.dokter.gigi, data_gabungan$penjualan.buah.pisang,
    pch = 19,
    xlab = "Kunjungan Dokter",
    ylab = "Penjualan Buah Pisang",
    main = "Kunjungan Dokter dengan Penjualan Buah Pisang",
    col = "blue")

2.5 Hasil Analisaku

Aku mengamati ketiga scatterplot dan merasakan bahwa tidak ada hubungan yang cukup kuat antara kunjungan dokter gigi dengan penjualan permen, sereal maupun pisang. Aku merasa butuh bantuan seseorang untuk memecahkan masalah ini. Orang itu adalah I, rekanku yang merupakan seorang seorang senior data analyst di AL.Dent untuk diskusi.

“Hi I, aku baru saja melakukan analisis awal terkait kebutuhan analisis untuk penyuluhan kesehatan gigi. Aku melihat bahwa sebenarnya tidak terdapat hubungan yang signifikan antara kunjungan ke rumah sakit dengan penjualan permen, sereal, ataupun buah pisang. Tidak terdapat hubungan yang signifikan antara variabel-variabel ini.” kataku sambil menunjukkan grafik yang kuhasilkan pada I.

I memperhatikan grafik yang kutunjukkan dan terdiam sejenak. Lalu dia hanya tertawa dan berkata, “A, coba pikirkan, kalau aku makan permen sekarang, apakah aku akan langsung sakit gigi?”

“Ehh, bener juga! Baiklah aku paham.” aku jadi ikut tertawa bersama I menyadari kebodohanku ini.

“Coba kamu hitung dulu berapa efek keterlambatan memakan permen ini terhadap kunjungan ke rumah sakit!” I memberikan sedikit petunjuk padaku.

“Baik, siap I. Terima kasih ya!” aku berterima kasih atas petunjuknya dan segera kembali pada pekerjaanku lagi.

2.6 Delay effect

Aku kembali ke depan laptopku lagi. Hal pertama yang kupikirkan adalah mencari berapa lama waktu yang dibutuhkan oleh orang yang memakan permen untuk mengunjungi rumah sakit karena mengalami sakit gigi. Peristiwa ini sering disebut dengan efek keterlambatan atau delay effect. Aku menggunakan visualisasi data untuk menentukan delay periodnya. Aku berandai-andai, misal aku ingin melihat hubungan antara pembelian permen di bulan ini dengan kunjungan ke dokter di bulan depan, maka aku akan memasangkan data pembelian permen di bulan Januari 1996 dengan kunjungan dokter di bulan Februari 1996 dan seterusnya.

Untuk mendapatkan data dengan delayed effect tersebut, aku memanfaatkan perintah lag() dengan menggunakan library dplyr. Aku menggunakan perintah library (dplyr) untuk mengimport library dplyr atau menggunakan perintah install.packages("dplyr") terlebih dahulu untuk menginstall package dplyr. Kemudian, aku menggunakan perintah lag() untuk mendapatkan nilai delayed effect. 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 kumiliki merupakan data bulanan, maka nilai n akan merujuk kepada periode 1, 2, 3, bulan dst.

Untuk saat ini, aku memutuskan untuk menggunakan delay effect paling lama sebesar 6 bulan.

#install library yang dibutuhkan
library("dplyr")
## 
## 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
#membuat data_delayed_effect
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)
)
#melihat hasil data_delayed_effect
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
## 7      7 1996               64           273899             247212
## 8      8 1996               88           184405             273899
## 9      9 1996               74           141211             184405
## 10    10 1996               98           292225             141211
## 11    11 1996               80           227864             292225
## 12    12 1996               46           259963             227864
## 13     1 1997               66           433783             259963
## 14     2 1997               78           343034             433783
## 15     3 1997               46           419255             343034
## 16     4 1997               62           393175             419255
## 17     5 1997              124           304954             393175
## 18     6 1997              106           439380             304954
## 19     7 1997              110           270706             439380
## 20     8 1997               98           319472             270706
## 21     9 1997               76           262688             319472
## 22    10 1997              132           322140             262688
## 23    11 1997               82           467572             322140
## 24    12 1997               84           431484             467572
##    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
## 7              395824             299498             235586             297141
## 8              247212             395824             299498             235586
## 9              273899             247212             395824             299498
## 10             184405             273899             247212             395824
## 11             141211             184405             273899             247212
## 12             292225             141211             184405             273899
## 13             227864             292225             141211             184405
## 14             259963             227864             292225             141211
## 15             433783             259963             227864             292225
## 16             343034             433783             259963             227864
## 17             419255             343034             433783             259963
## 18             393175             419255             343034             433783
## 19             304954             393175             419255             343034
## 20             439380             304954             393175             419255
## 21             270706             439380             304954             393175
## 22             319472             270706             439380             304954
## 23             262688             319472             270706             439380
## 24             322140             262688             319472             270706
##    penjualan_permen_6
## 1                  NA
## 2                  NA
## 3                  NA
## 4                  NA
## 5                  NA
## 6                  NA
## 7              200661
## 8              297141
## 9              235586
## 10             299498
## 11             395824
## 12             247212
## 13             273899
## 14             184405
## 15             141211
## 16             292225
## 17             227864
## 18             259963
## 19             433783
## 20             343034
## 21             419255
## 22             393175
## 23             304954
## 24             439380

2.7 Scatterplot

Dengan menggunakan perintah yang sama seperti sebelumnya, aku mencoba mengeluarkan kembali scatter plot antara kunjungan ke dokter dengan penjualan permen dengan periode delayed effect maksimum 6. Pastinya akan ada 7 grafik yang akan didapatkan. Aku menuliskan satu per satu coding nya hingga delay 6 bulan.

#scatter 1
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Permen",
main = "Kunjungan Dokter dengan Penjualan Permen", 
col = "blue")

#scatter 2
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen_1,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Permen",
main = "Kunjungan Dokter dengan Penjualan Permen (Delay 1 Bulan)", 
col = "blue")

#scatter 3
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen_2,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Permen",
main = "Kunjungan Dokter dengan Penjualan Permen (Delay 2 Bulan)", 
col = "blue")

#scatter 4
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen_3,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Permen",
main = "Kunjungan Dokter dengan Penjualan Permen (Delay 3 Bulan)", 
col = "blue")

#scatter 5
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen_4,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Permen",
main = "Kunjungan Dokter dengan Penjualan Permen (Delay 4 Bulan)", 
col = "blue")

#scatter 6
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen_5,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Permen",
main = "Kunjungan Dokter dengan Penjualan Permen (Delay 5 Bulan)", 
col = "blue")

#scatter 7
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen_6,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Permen",
main = "Kunjungan Dokter dengan Penjualan Permen (Delay 6 Bulan)", 
col = "blue")

2.8 Insight yang Aku Dapatkan

Berdasarkan grafik yang kuhasilkan ini, aku berhasil menemukan sebuah fakta menarik. Aku melihat bahwa dengan delayed effect selama 4 bulan, hubungan antara tingkat kunjungan dokter dengan penjualan permen terlihat cukup kuat dan berkorelasi positif.

Baiklah, aku akan mencoba melakukan analisis model regresi menggunakan data kunjungan dokter dengan penjualan permen dengan delayed effect selama 4 bulan!


3 Regresi dengan Menggunakan R

3.1 Model Regresi

Setelah mendapatkan informasi tentang delayed effect selama 4 bulan antara kunjungan ke dokter dengan penjualan permen, aku bersiap-siap melakukan analisis dengan model regresi. Sebelum melakukan analisis, aku terlebih dahulu harus menghapus data yang memiliki nilai NA yaitu pada bulan Januari, Februari, Maret, dan April tahun 1996. Dengan menggunakan perintah na.omit(x), aku dapat menghilangkan data yang memiliki nilai NA, di mana x merupakan dataset yang digunakan.

#analisis regresi menggunakan R
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)
#mengeliminasi data NA
data_regresi = na.omit(data_regresi)
#melihat hasil cleaning data
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
## 11    11  1996               80           273899
## 12    12  1996               46           184405
## 13     1  1997               66           141211
## 14     2  1997               78           292225
## 15     3  1997               46           227864
## 16     4  1997               62           259963
## 17     5  1997              124           433783
## 18     6  1997              106           343034
## 19     7  1997              110           419255
## 20     8  1997               98           393175
## 21     9  1997               76           304954
## 22    10  1997              132           439380
## 23    11  1997               82           270706
## 24    12  1997               84           319472

3.2 Analisis Regresi

Untuk melakukan analisis regresi, aku menggunakan perintah berikut:

#membuat model regresi
model = lm(kunjungan_dokter ~ penjualan_permen, data = data_regresi)

Perintah yang telah diketikkan memiliki penjelasan seperti yang ditunjukkan berikut ini:

#melihat gambaran hasil
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

Tambahan sedikit dari catatan penjelasan koefisien regresi dari model regresi yang kuperoleh dapat dilihat pada nilai Coefficients.

3.3 Memprediksi Kunjungan Dokter Dengan Penjualan Permen

Dengan menggunakan model regresi pada bagian sebelumnya, kini aku dapat melakukan prediksi kunjungan dokter dengan variabel input berupa penjualan permen. Semisal aku memiliki data penjualan permen pada bulan Januari, Februari, Maret, April, dan Mei 1998 sebagai berikut:

Aku menggunakan perintah ini untuk memprediksi kunjungan dokter:

#menggunakan metode predict untuk memprediksi kunjungan dokter
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)
     )
#melakukan prediksi
predict(model, data_prediksi)
##         1         2         3         4         5 
##  92.55356 117.59211  92.86245  61.27390  71.58896

Dengan menggunakan metode predict di Atas, ini adalah hasil prediksi kunjungan dokter pada bulan Jan-Mei 1998.

Wah, ternyata cukup mudah ya! Aku dapat melakukan analisis model regresi menggunakan R.

3.4 Interpretasi Model Regresi Linear

Berdasarkan model regresi di Atas, aku mengetahui bahwa hubungan antara penjualan permen dengan kunjungan ke dokter bersifat positif. Berarti bahwa ketika penjualan permen semakin meningkat, maka kunjungan ke dokter akan meningkat juga. Namun efek peningkatan kunjungan dokter ini akan terjadi dalam 4 bulan kedepan. Aku membuat catatan kecil yang bisa kuberikan kepada L.


4 Proyek Mini

4.1 Langkah Pertama

Setelah sukses melaksanakan program penyuluhan kesehatan gigi di bulan ini, L akan melakukan penyuluhan kesehatan di kota berbeda. Namun kali ini aku diminta untuk mancari tahu pengaruh dari penjualan sereal terhadap kunjungan rumah sakit. Aku siap untuk melakukan analisis regresi untuk mengetahui pengaruh penjualan sereal terhadap kunjungan rumah sakit!

Akan ada beberapa tahapan yang perlu aku lakukan untuk bisa mendapatkan analisis regresi. Tapi pertama-tama aku harus melakukan proses importing data kunjungan_dokter_gigi_kota_x dan tingkat_penjualan_kota_x.

#import data penjualan
penjualan = read.csv("https://storage.googleapis.com/dqlab-dataset/tingkat_penjualan_kota_x_dqlab.tsv", header = TRUE, sep = "\t")
#import data kunjungan dokter gigi
kunjungan = read.csv("https://storage.googleapis.com/dqlab-dataset/kunjungan_dokter_gigi_kota_x_dqlab.tsv", header = TRUE, sep = "\t")
#melihat data penjualan
print(penjualan)
##    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
## 7   7     7  1996           273899            13407                194685
## 8   8     8  1996           184405             8914                100091
## 9   9     9  1996           141211             3663                194972
## 10 10    10  1996           292225            14756                133166
## 11 11    11  1996           227864             3883                155598
## 12 12    12  1996           259963             5720                104563
## 13 13     1  1997           433783            16209                104216
## 14 14     2  1997           343034             5955                142908
## 15 15     3  1997           419255            14789                135994
## 16 16     4  1997           393175            11150                154659
## 17 17     5  1997           304954             4930                122983
## 18 18     6  1997           439380            15041                104657
## 19 19     7  1997           270706            14210                163008
## 20 20     8  1997           319472             5002                149116
## 21 21     9  1997           262688             3172                144727
## 22 22    10  1997           322140             9818                148500
## 23 23    11  1997           467572            13545                120676
## 24 24    12  1997           431484             2372                162135
#melihat data kunjungan_dokter
print(kunjungan)
##    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
## 7      7  1996                               64
## 8      8  1996                               88
## 9      9  1996                               74
## 10    10  1996                               98
## 11    11  1996                               80
## 12    12  1996                               46
## 13     1  1997                               66
## 14     2  1997                               78
## 15     3  1997                               46
## 16     4  1997                               62
## 17     5  1997                              124
## 18     6  1997                              106
## 19     7  1997                              110
## 20     8  1997                               98
## 21     9  1997                               76
## 22    10  1997                              132
## 23    11  1997                               82
## 24    12  1997                               84

4.2 Langkah Kedua

Setelah mengimport data di Atas, kali ini aku akan menggabungkan kedua data tersebut menjadi satu dataset.

#menggabungkan 2 dataset
merge(kunjungan, penjualan, by=c("Bulan","Tahun"))
##    Bulan Tahun tingkat.kunjungan.ke.dokter.gigi No penjualan.permen
## 1      1  1996                               37  1           200661
## 2      1  1997                               66 13           433783
## 3     10  1996                               98 10           292225
## 4     10  1997                              132 22           322140
## 5     11  1996                               80 11           227864
## 6     11  1997                               82 23           467572
## 7     12  1996                               46 12           259963
## 8     12  1997                               84 24           431484
## 9      2  1996                               32  2           297141
## 10     2  1997                               78 14           343034
## 11     3  1996                               56  3           235586
## 12     3  1997                               46 15           419255
## 13     4  1996                               43  4           299498
## 14     4  1997                               62 16           393175
## 15     5  1996                               52  5           395824
## 16     5  1997                              124 17           304954
## 17     6  1996                               70  6           247212
## 18     6  1997                              106 18           439380
## 19     7  1996                               64  7           273899
## 20     7  1997                              110 19           270706
## 21     8  1996                               88  8           184405
## 22     8  1997                               98 20           319472
## 23     9  1996                               74  9           141211
## 24     9  1997                               76 21           262688
##    penjualan.sereal penjualan.buah.pisang
## 1             10324                112146
## 2             16209                104216
## 3             14756                133166
## 4              9818                148500
## 5              3883                155598
## 6             13545                120676
## 7              5720                104563
## 8              2372                162135
## 9             13150                175417
## 10             5955                142908
## 11             5398                104645
## 12            14789                135994
## 13             7609                112283
## 14            11150                154659
## 15             5190                137083
## 16             4930                122983
## 17            14571                198130
## 18            15041                104657
## 19            13407                194685
## 20            14210                163008
## 21             8914                100091
## 22             5002                149116
## 23             3663                194972
## 24             3172                144727
#mengeliminasi kolom
data_gabung = merge(kunjungan, penjualan, by.x=c("Bulan","Tahun"), by.y=c("Bulan","Tahun"),sort = FALSE)
#melihat hasil
data_gabung
##    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
## 7      7  1996                               64  7           273899
## 8      8  1996                               88  8           184405
## 9      9  1996                               74  9           141211
## 10    10  1996                               98 10           292225
## 11    11  1996                               80 11           227864
## 12    12  1996                               46 12           259963
## 13     1  1997                               66 13           433783
## 14     2  1997                               78 14           343034
## 15     3  1997                               46 15           419255
## 16     4  1997                               62 16           393175
## 17     5  1997                              124 17           304954
## 18     6  1997                              106 18           439380
## 19     7  1997                              110 19           270706
## 20     8  1997                               98 20           319472
## 21     9  1997                               76 21           262688
## 22    10  1997                              132 22           322140
## 23    11  1997                               82 23           467572
## 24    12  1997                               84 24           431484
##    penjualan.sereal penjualan.buah.pisang
## 1             10324                112146
## 2             13150                175417
## 3              5398                104645
## 4              7609                112283
## 5              5190                137083
## 6             14571                198130
## 7             13407                194685
## 8              8914                100091
## 9              3663                194972
## 10            14756                133166
## 11             3883                155598
## 12             5720                104563
## 13            16209                104216
## 14             5955                142908
## 15            14789                135994
## 16            11150                154659
## 17             4930                122983
## 18            15041                104657
## 19            14210                163008
## 20             5002                149116
## 21             3172                144727
## 22             9818                148500
## 23            13545                120676
## 24             2372                162135

4.3 Langkah Ketiga

Untuk memperingkas data yang digunakan, aku dapat mengeliminasi variabel lain yang tidak dibutuhkan, sehingga dataset yang aku miliki hanya berupa bulan, tahun, kunjungan dokter, dan penjualan sereal yang aku tempatkan ke dalam variabel datagabung.

#meringkas data yang akan digunakan ke dalam datagabung
datagabung = data.frame(bulan = data_gabung$Bulan,
                        tahun = data_gabung$Tahun,
                        kunjungan.dokter = data_gabung$tingkat.kunjungan.ke.dokter.gigi,
                        penjualan.sereal = data_gabung$penjualan.sereal)
#melihat hasil
datagabung
##    bulan tahun kunjungan.dokter penjualan.sereal
## 1      1  1996               37            10324
## 2      2  1996               32            13150
## 3      3  1996               56             5398
## 4      4  1996               43             7609
## 5      5  1996               52             5190
## 6      6  1996               70            14571
## 7      7  1996               64            13407
## 8      8  1996               88             8914
## 9      9  1996               74             3663
## 10    10  1996               98            14756
## 11    11  1996               80             3883
## 12    12  1996               46             5720
## 13     1  1997               66            16209
## 14     2  1997               78             5955
## 15     3  1997               46            14789
## 16     4  1997               62            11150
## 17     5  1997              124             4930
## 18     6  1997              106            15041
## 19     7  1997              110            14210
## 20     8  1997               98             5002
## 21     9  1997               76             3172
## 22    10  1997              132             9818
## 23    11  1997               82            13545
## 24    12  1997               84             2372
#menghitung summary datagabung
summary(datagabung)
##      bulan           tahun      kunjungan.dokter penjualan.sereal
##  Min.   : 1.00   Min.   :1996   Min.   : 32.00   Min.   : 2372   
##  1st Qu.: 3.75   1st Qu.:1996   1st Qu.: 55.00   1st Qu.: 5143   
##  Median : 6.50   Median :1996   Median : 75.00   Median : 9366   
##  Mean   : 6.50   Mean   :1996   Mean   : 75.17   Mean   : 9282   
##  3rd Qu.: 9.25   3rd Qu.:1997   3rd Qu.: 90.50   3rd Qu.:13711   
##  Max.   :12.00   Max.   :1997   Max.   :132.00   Max.   :16209

4.4 Langkah Keempat

Sebelum melakukan analisis regresi, aku melakukan proses eksplorasi data terlebih dahulu untuk mengetahui hubungan antara variabel kunjungan dokter dengan penjualan sereal. Di sini aku perlu menampilkan scatterplot untuk bisa melihat hubungan antar variabel. Sebelumnya ketika penjualan permen, delayed effect-nya di angka 4 bulan. Oleh karena itu, untuk penjualan sereal aku pun mencoba menggunakan periode maksimal 6 bulan.

#visualisasi datagabung menggunakan scatter plot
plot(datagabung$kunjungan.dokter, datagabung$penjualan.sereal,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Sereal",
main = "Kunjungan Dokter dengan Penjualan Sereal",
col = "blue")

#delayed period data
#berdasarkan scatter plot dari efek delayed period, dapat dilihat bahwa delayed period selama 4 bulan
#merupakan variabel dengan hubungan yang cukup kuat dengan kunjungan dokter

data.delayed.effect = data.frame(
  bulan = datagabung$bulan,
  tahun = datagabung$tahun,
  kunjungan_dokter = datagabung$kunjungan.dokter,
  penjualan_sereal = datagabung$penjualan.sereal,
  penjualan_sereal_1 = lag(datagabung$penjualan.sereal),
  penjualan_sereal_2 = lag(datagabung$penjualan.sereal,2),
  penjualan_sereal_3 = lag(datagabung$penjualan.sereal,3),
  penjualan_sereal_4 = lag(datagabung$penjualan.sereal,4),
  penjualan_sereal_5 = lag(datagabung$penjualan.sereal,5),
  penjualan_sereal_6 = lag(datagabung$penjualan.sereal,6)
  )
#melihat data_delayed_effect
head(data.delayed.effect, 9)
##   bulan tahun kunjungan_dokter penjualan_sereal penjualan_sereal_1
## 1     1  1996               37            10324                 NA
## 2     2  1996               32            13150              10324
## 3     3  1996               56             5398              13150
## 4     4  1996               43             7609               5398
## 5     5  1996               52             5190               7609
## 6     6  1996               70            14571               5190
## 7     7  1996               64            13407              14571
## 8     8  1996               88             8914              13407
## 9     9  1996               74             3663               8914
##   penjualan_sereal_2 penjualan_sereal_3 penjualan_sereal_4 penjualan_sereal_5
## 1                 NA                 NA                 NA                 NA
## 2                 NA                 NA                 NA                 NA
## 3              10324                 NA                 NA                 NA
## 4              13150              10324                 NA                 NA
## 5               5398              13150              10324                 NA
## 6               7609               5398              13150              10324
## 7               5190               7609               5398              13150
## 8              14571               5190               7609               5398
## 9              13407              14571               5190               7609
##   penjualan_sereal_6
## 1                 NA
## 2                 NA
## 3                 NA
## 4                 NA
## 5                 NA
## 6                 NA
## 7              10324
## 8              13150
## 9               5398
#scatter 1
plot(data.delayed.effect$kunjungan_dokter, data.delayed.effect$penjualan_sereal_1,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Sereal",
main = "Kunjungan Dokter dengan Penjualan Sereal (Delay 1 Bulan)",
col = "blue")

#scatter 2
plot(data.delayed.effect$kunjungan_dokter, data.delayed.effect$penjualan_sereal_2,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Sereal",
main = "Kunjungan Dokter dengan Penjualan Sereal (Delay 2 Bulan)",
col = "blue")

#scatter 3
plot(data.delayed.effect$kunjungan_dokter, data.delayed.effect$penjualan_sereal_3,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Sereal",
main = "Kunjungan Dokter dengan Penjualan Sereal (Delay 3 Bulan)",
col = "blue")

#scatter 4
plot(data.delayed.effect$kunjungan_dokter, data.delayed.effect$penjualan_sereal_4,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Sereal",
main = "Kunjungan Dokter dengan Penjualan Sereal (Delay 4 Bulan)",
col = "blue")

#scatter 5
plot(data.delayed.effect$kunjungan_dokter, data.delayed.effect$penjualan_sereal_5,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Sereal",
main = "Kunjungan Dokter dengan Penjualan Sereal (Delay 5 Bulan)",
col = "blue")

#scatter 6
plot(data.delayed.effect$kunjungan_dokter, data.delayed.effect$penjualan_sereal_6,
pch = 19,
xlab = "Kunjungan Dokter",
ylab = "Penjualan Sereal",
main = "Kunjungan Dokter dengan Penjualan Sereal (Delay 6 Bulan)",
col = "blue")

4.5 Langkah Kelima

Setelah melakukan eksplorasi data, aku melakukan analisis regresi. Melakukan interpretasi dari model regresi dan menemukan informasi yang berguna terkait hubungan antara penjualan sereal terhadap kunjungan rumah sakit. Karena sudah kudapatkan hasil periode delayed efect yang cukup kuat dan positif 4 bulan, maka untuk data ini pun periode yang kugunakan adalah 4 bulan.

#melakukan analisis regresi
data.regresi = data.frame(
  bulan = data.delayed.effect$bulan,
  tahun = data.delayed.effect$tahun,
  kunjungan_dokter = data.delayed.effect$kunjungan_dokter,
  penjualan_sereal = data.delayed.effect$penjualan_sereal_4)
#mengeliminasi data NA
data.regresi = na.omit(data.regresi)
#model regresi
Model = lm(kunjungan_dokter ~ penjualan_sereal, data = data.regresi)

summary(Model)
## 
## Call:
## lm(formula = kunjungan_dokter ~ penjualan_sereal, data = data.regresi)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -33.481 -14.556   1.915  12.561  35.322 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      52.962412  11.102296    4.77 0.000153 ***
## penjualan_sereal  0.002975   0.001044    2.85 0.010630 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 20.44 on 18 degrees of freedom
## Multiple R-squared:  0.311,  Adjusted R-squared:  0.2727 
## F-statistic: 8.123 on 1 and 18 DF,  p-value: 0.01063

Persamaan regresi yang digunakan untuk data ini adalah y = 52.962412 + 0.002975 x, dimana terdapat korelasi positif antara penjualan serial dengan kunjungan rumah sakit. Berarti bahwa setiap ada peningkatan penjualan sereal maka akan mengakibatkan kenaikan kunjungan rumah sakit dalam 4 bulan mendatang.

4.6 Penutup

Aku telah berhasil mendapatkan beberapa informasi yang akan berguna untuk disampaikan di dalam penyuluhan kesehatan gigi sebagai berikut:

  1. Hubungan antara penjualan permen dengan kunjungan ke dokter bersifat positif. Yang berarti bahwa ketika penjualan permen semakin meningkat, maka kunjungan ke dokter akan meningkat juga. Namun efek peningkatan kunjungan dokter ini akan terjadi dalam 4 bulan kedepan.
  2. Setiap ada kenaikan penjualan permen sebesar 100,000 maka akan meningkatkan kunjungan dokter sebesar 35.934 unit dalam 4 bulan kedepan.

Aku segera menyampaikan hasil dari analisis regresi ini kepada L. L terlihat senang dengan laporan yang kuberikan. L langsung antusias dan segera menyiapkan materi yang dibutuhkan untuk penyuluhan kesehatan gigi.