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
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.
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:
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.
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.
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.
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.
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
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).
x dan y merupakan dataset yang
ingin digabungkan.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".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
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.
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")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.
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
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")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!
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
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.
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.
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.
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
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
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
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")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.
Aku telah berhasil mendapatkan beberapa informasi yang akan berguna untuk disampaikan di dalam penyuluhan kesehatan gigi sebagai berikut:
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.