Umumnya, fungsi kepekatan peluang yang sebenarnya dari suatu peubah acak sulit atau bahkan tidak mungkin untuk diketahui. Oleh karena itu dibuat suatu penduga bagi fungsi kepekatan peluang sebagai pendekatan sebaran yang sebenarnya. Ada dua pendekatan yang dapat digunakan dalam merumuskan penduga kepekatan peluang, yaitu melalui pendekatan parametrik dan nonparametrik. Penduga parametrik mempunyai struktur fungsi yang tetap, sehingga yang diduga adalah parameter-parameter dari fungsinya. Sedangkan penduga nonparametrik tidak mempunyai struktur yang tetap, sehingga yang diduga adalah fungsinya.
Pendekatan parametrik di antaranya adalah fungsi sebaran normal, gamma, eksponensial, dan lain sebagainya. Akan tetapi banyak contoh nyata di mana sebaran normal dan juga sebaran-sebaran parametrik lainnya tidak cocok. Akibat masalah ketidakcocokan model parametrik untuk contoh-contoh real, maka diperlukan suatu pendekatan nonparametrik. Oleh karena itu berkembanglah sejumlah teknik non parametrik untuk menjawab permasalahan tersebut. Beberapa metode pendugaan nonparametrik yaitu histogram, penduga naive, penduga kernel, metode tetangga terdekat, metode variabel kernel, dan lain-lain. Untuk itu kita akan membahas salah satu pendugaan nonparametrik yaitu penduga kernel.
Penduga kepekatan kernel merupakan penduga konsisten sehingga merupakan penduga yang baik digunakan untuk ukuran contoh yang semakin besar.
Metode kernel ini dikembangkan dari kelemahan histogram yaitu pendugaan yang terbentuk tidak halus, tergantung pada ukuran lebar pita dan tergantung pada titik awal interval. Dengan menggunakan penduga kepekatan kernel, dua kelemahan dari histogram dapat teratasi. Pertama, dengan menggunakan fungsi kernel yang halus untuk blok bangunan maka akan didapat fungsi penduga kepekatan yang halus. Kedua, untuk menghilangkan ketergantungan titik awal interval, penduga kepekatan kernel memusatkan fungsi kernel pada setiap titik data.
Jika peubah acak X mempunyai fungsi densitas f, maka f(x) = \(\displaystyle \lim_{h\to\ 0}\) \(\frac{1}{2h}\)P(x − h < X < x + h). Sehingga suatu penaksir untuk f dapat ditentukan sebagai \(\hat{f}\) (x) = \(\frac{1}{2h}\)[banyaknya X1, …, Xn yang terletak pada selang (x − h, x + h)] dengan memilih h yang kecil. \(\hat{f}\) (x) disebut penaksir naive. Penaksir naif menghasilkan \(\hat{f}\) y yang tidak kontinu (ada tangga-tangga). Kesulitan ini diatasi dengan mengganti fungsi w dengan fungsi K
Suatu fungsi K(.) disebut fungsi Kernel dan fungsi non negatif jika K merupakan fungsi kontinu, simetris, bernilai bilangan nyata, terhingga, dan
\(\int_{}^{} K(x) \; dt\) = 1 , \(\int_{}^{} t K(x) \; dt\) = 0 , \(\int_{}^{} t^{2} K(x) \; dt\) = \(k_{2}\) tidak sama dengan 0.
Umumnya, tetapi tidak selalu, K merupakan fungsi kepekatan peluang normal, atau fungsi pembobot w yang menggunakan definisi penduga naive. Penduga Kernel dengan kernel K didefinisikan sebagai berikut.
\(\hat{f}\) (x) = \(\frac{1}{hn}\) \(\sum_{i=1}^{n} K\) \(\frac{x-Xi}{h}\)
dimana x = suatu nilai tertentu, Xi = peubah acak yang independen dan berdistribusi identik, K(.) = fungsi kernel, n = besar sampel (banyak data), h = lebar bandwith.
Ada beberapa fungsi kernel K(x) yang dapat digunakan sebagai tingkat pemulusan menurut Hardle (1990), antara lain :
Berikut ini merupakan bentuk kurva dari berbagai fungsi kernel :
par(mfrow =c(2,3))
#1. Uniform (kotak)/ Rectangular
unif<- function(t) (abs(t) < 1) * 0.5
t <- seq(from = -3, to = 3, by = 0.001)
plot(t, unif(t), type = "l", ylim = c(0,1), ylab = expression(K(t)))
#2. Biweight (Penimbang ganda)
biweight <- function(t) (abs(t) < 1) * (15/16)*(1-t^2)^2
plot(t, biweight(t), type = "l", ylim = c(0,1), ylab = expression(K(t)))
#3. Epanechnikov
epan <- function(t) (abs(t) < 1) * ((3/4*((1-t^2))))
plot(t, epan(t), type = "l", ylim = c(0,1), ylab = expression(K(t)))
#4. Triangle (segitiga)
tri <- function(t) (abs(t) < 1) * (1 - abs(t))
plot(t, tri(t), type = "l", ylim = c(0,1), ylab = expression(K(t)))
#5. Gaussian
gauss <- function(t) 1/sqrt(2*pi) * exp(-(t^2)/2)
plot(t, gauss(t), type = "l", ylim = c(0,1), ylab = expression(K(t)))
Selanjutnya, untuk menggambarkan pendugaan fungsi kepekatan peluangnya kita dapat menggunakan fungsi density()
dan ggplot2. Kedua cara tersebut akan menampilkan hasil kurva fungsi yang sama. Namun, pada fungsi density()
kita dapat menggunakan data yang bertipe numerik, sedangkan pada ggplot2 data tersebut harus dibuat dalam dataframe. Berikut ini ilustrasi pendugaan fungsi kepekatan peluang:
Dalam penggunaan ggplot2, kita harus menginstal packages ggplot2 dengan format penulisan install.packages(“ggplot2”)
. Setelah kita berhasil menginstal, selanjutnya kita akan membuat kurva fkp.
#data yang ditampilkan dalam format dataframe
usia <- read.csv("Usia pasien covid 19.csv", sep =";")
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.5.3
ggplot(usia) + # usia merupakan data dalam format dataframe
geom_density(aes(x = Usia.pasien.covid)) # x merupakan nama peubah yang digunakan sesuai dengan nama di data.frame
density()
usia_pasien_covid <- as.numeric(unlist(usia)) # data usia diubah dalam tipe numerik
usia_pasien_covid
## [1] 30 47 49 47 50 42 59 30 39 38 45 33 37 39 32 45 45 18 56 42 33 44 65 21 41
## [26] 44 30 70 43 31 43 24 40 66 65 36 10 63 37 78 76 48 66 66 63 62 49 46 34 41
## [51] 72 20 54 33 49 42 33 2 29 62 61 20 51 50 72 80 49 69 66 32 28 55 68 30 34
## [76] 30 50 39 56 62 63 62 57 35 40 30 30 37 56 50 35 36 35 27 40 42 33 40 50 42
## [101] 66 52 29 28 22 32 42 23 49 38 62 65 56 35 88 28 31 50 48 36 37 19 60 58 29
## [126] 47 52 51 53 39 34 49 46 46 40 51 37 55 32 24 39 25 56 44 50 42 43 22 43 51
## [151] 38 59 60 35 25 49 41 57 26 30 64 33 28 41 42 24 32 34 63 58 49 27 68 45 65
## [176] 27 48 30 31 40 30 65 2 11 32 66 53 37 35 55 55 73 68 61 74 33 60 35 66 28
## [201] 40 35 43 53 50 51 73 36 54 56 40 43 48 54 47 55 47 46 47 41 36 70 52 44 47
## [226] 58 39 21 42 38 7 43 68 64 21 60 44 53 39 41 31 27 82 34 22 67 52 43 56 15
## [251] 30 33 55 23 28 49 25 40 59 38 37 49 43 39 41 67 52 31 34 24 47 16 32 32 25
## [276] 52 42 51 43 36 41 25 46 50 36 36 32 64 70 25 33 5 15 50 44 22 22 22 22 24
## [301] 22 30 30 64 52 45 40 52 46 49 36 29 26 27 46 66 3 45 56 56 56 56 35 36 32
## [326] 4 52 56 49 34 71 22 16 28 47 35 37 38 42 29 23 34 25 28 44 33 49 80 45 45
## [351] 77 25 55 33 44 22 50 35 72 73 25 31 34 33 37 75 39 31 47 38 31 28 37 51 45
## [376] 27 32 35 34 31 66 48 32 60 38 65 48 63 37 40 57 56 55 31 43 70 53 72 45 62
## [401] 37 33 52 73 25 44 49 60 60 28 62 28 54 25 49 28 40 43 73 37 47 31 31 80 57
## [426] 31 52 59 29 30 77 10 34 61 59 56 28 61 35 42 20 44 75 43 66 44 39 64 74 62
## [451] 5 68 70 39 48 72 73 34 50 36 56 26 73 44 36 38 20 64 59 39 46 94 38 68 29
## [476] 72 48 80 24 75 36 10 47 34 41 42 53 57 57 30 81 32 24 56 52 47 54 50 50 49
## [501] 35 37 24 50 76 38 47 56 32 42 66 36 37 46 43 33 43 42 26 41 63 59 29 42 30
## [526] 28 48 44 41 17 32 70 60 64 42 8 29 69 9 61 51 27 29 56 20 64 65 61 53 27
## [551] 42 56 49 65 52 33 41 51 37 41 45 41 30 25 27 51 66 51 65 49 23 51 49 16 60
## [576] 64 60 62 77 69 49 12 15 46 60 54 62 60 45 37 37 31 33 56 54 38 52 69 32 55
## [601] 48 43 35 29 51 35 28 78 38 36 56 55 63 65 68 46 48 45 47 83 66 35 47 8 51
## [626] 52 45 41 27 60 59 22 45 65 50 77 48 49 66 47 43 67 33 53 50 60 62 42 41 49
## [651] 41 59 64 35 75 61 36 20 45 9 43 49 24 39 11 45 58 53 42 39 65 21 64 63 53
## [676] 39 71 45 27 42 25 84 39 68 49 24 21 55 33 63 30 64 38 35 67 49 42 26 37 24
## [701] 41 54 29 38 29 58 41 56 68 55 27 1 46 55 33 23 27 53 34 79 58 57 45 67 33
## [726] 40 49 29 47 54 60 65 38 26 87 27 4 50 39 2 84 39 68 24 21 55 49 33 21 26
## [751] 64 73 51 51 43 67 37 41 25 54 50 61 66 27 17 51 68 26 30 53 35 27 28 58 33
## [776] 33 50 33 45 24 88 29 21 78 52 60 50 60 29 82 29 55 50 33 7 33 7 44 69 16
## [801] 47 35 8 43 10 55 47 25 47 38 30 26 47 42 34 62 39 40 42 40 64 38 53 24 52
## [826] 51 36 71 39 54 9 31 37 2 35 39 30 34 46 48 37 54 62 39 54 30 30 26 55 30
## [851] 61 51 57 44 54 50 61 28 56 70 65 46 57 27 32 35 79 26 27 25 40 82 43 29 71
## [876] 37 50 1 35 65 58 73 57 35 38 50 69 24 38 77 78 67 68 45 32 30 41 70 64 78
## [901] 40 96 10 62 52 43 44 55 20 40 28 43 32 63 64 19 22 24 53 68 57 50 51 52 41
## [926] 33 20 75 58 47 38 50 62 22 24 36 53 61 21 22 38 35 40 25 33 55 55 36 60 41
## [951] 61 47 20 50 21 16 80 33 55 24 60 77 25 25 50 54 65 62 8 31 29 18 28 72 54
## [976] 43 4 10 10 15 17 17 17 24 26 28 64 44 12 34 55 30 23 45 88 45 38 39
den <- density(usia_pasien_covid, bw =3)
plot(den, main = "Densitas Usia Pasien Covid")
den <- density(usia_pasien_covid, bw =3, kernel = "epanechnikov" )
plot(den, main = "Densitas Usia Pasien Covid", sub = " Epanechnikov")
den <- density(usia_pasien_covid, bw =3, kernel = "gaussian" )
plot(den, main = "Densitas Usia Pasien Covid", sub = " Gaussian")
den <- density(usia_pasien_covid, bw =3, kernel = "rectangular" )
plot(den, main = "Densitas Usia Pasien Covid", sub = " Rectangular")
den <- density(usia_pasien_covid, bw =3, kernel = "triangular" )
plot(den, main = "Densitas Usia Pasien Covid", sub = " Triangular")
den <- density(usia_pasien_covid, bw =3, kernel = "biweight" )
plot(den, main = "Densitas Usia Pasien Covid", sub = " Biweight")
Dalam melakukan eksplorasi data, lebih mudah kita amati sebaran datanya dengan melihat sebaran datanya dengam menggunakan histogram. Namun, penduga kurva fungsi kepekatan peluang juga akan memberikan tambahan informasi sehingga lebih lengkap dan sebaran datanya data teramati dengan jelas. Sehingga, kita dapat menggabungkan histogram dan penduga kurva fungsi kepekatan peluang dengan berbagai fungsi kernel. Berikut ini beberapa ilustrasi terkait penduga kurva fungsi kepekatan peluang overlay dengan histogram. Pada ilustrasi ini data yang digunakan adalah data usia pasien covid-19.
par(mfrow=c(2,3))
#epanechnikov
den <- density(usia_pasien_covid, bw =1, kernel = "epanechnikov")
hist(usia_pasien_covid, freq = FALSE, breaks = 10, col = "skyblue", main = "Kernel Epanechnikov")
lines(den, col = 'red', lwd =2 )
#rectangular
den <- density(usia_pasien_covid, bw =1, kernel = "rectangular")
hist(usia_pasien_covid, freq = FALSE, breaks = 10, col = "skyblue", main = "Kernel Rectangular")
lines(den, col = 'red', lwd =2)
#triangular
den <- density(usia_pasien_covid, bw =1, kernel = "triangular")
hist(usia_pasien_covid, freq = FALSE, breaks = 10, col = "skyblue", main = "Kernel Triangular")
lines(den, col = 'red', lwd =2)
#biweight
den <- density(usia_pasien_covid, bw =1, kernel = "biweight")
hist(usia_pasien_covid, freq = FALSE, breaks = 10, col = "skyblue", main = "Kernel Biweight")
lines(den, col = 'red', lwd =2)
#gaussian
den <- density(usia_pasien_covid, bw =1, kernel = "gaussian")
hist(usia_pasien_covid, freq = FALSE, breaks = 10, col = "skyblue", main = "Kernel Gaussian")
lines(den, col = 'red', lwd =2)
Berdasarkan gambar di atas, opsi utama yang ada pada fungsi density()
adalah bw yang digunakan untuk penentuan lebar jendela dan kernel untuk memilih fungsi kernel apa yang akan digunakan. Fungsi density()
menyediakan beberapa fungsi kernel, seperti epanochnikov, rectangular, triangular, biweight, dan gaussian. Selain itu, jika diamati nampak kurva fungsi kernel rectangular lebih banyak bergerigi. Sedangkan fungsi kernel epanechnikov, gaussian, dan biweight diperoleh kurva yang hampir mirip.
Seperti pada penduga Naive, bentuk kurva penduga fungsi kepekatan peluang akan bergantung pada lebar jendela (h). yang merupakan parameter pemulusan. Perlu diperhatikan bahwa untuk kernel-kernel yang biasa seperti kernel normal, semua titik pengamatan digunakan untuk menghitung pemulusan pada setiap titik, tetapi titik-titik data yang terletak sangat jauh mendapatkan pembobot yang sangat kecil. Nilai lebar jendela yang besar akan memberikan hasil yang sangat mulus karena pembobotan pada titik-titik data hanya berubah sedikit sepanjang interval pemulusan. Sedangkan nilai lebar jendela yang kecil akan memberikan hasil yang lebih kasar (wiggles) karena titik-titik data yang berdekatan mendapatan bobot yang jauh lebih besar dibandingkan dengan titik yang jauh (Rizzo, 2008).
Hal ini berarti apabila lebar jendela (h) kecil, maka kurva fungsi kernel cenderung lebih kurus dan memberi nilai 0 pada banyak nilai t sehingga hasil penjumlahan fungsi kernel akan berbentuk lebih bergerigi (spiky). Sedangkan, nilai lebar jendela yang besar akan membuat kurva fungsi kernel menjadi melebar dan tidak banyak yang bernilai nol, sehingga ketika dijumlahkan akan memperoleh penduga fungsi kepekatan yang cenderung datar dan tidak banyak lembah.
Berikut ini ilustrasi penduga kurva fungsi kepekatan peluang dengan fungsi kernel gaussian menggunakan lebar jendela berbeda, yaitu 0.2,1,1.7,2.5.
par(mfrow=c(2,2))
den <- density(usia_pasien_covid, bw =0.2, kernel = "gaussian")
hist(usia_pasien_covid, freq = FALSE, breaks = 10, col = "pink", main = "Kernel Gaussian BW = 0.2")
lines(den, col = 'red', lwd =2)
den <- density(usia_pasien_covid, bw =1, kernel = "gaussian")
hist(usia_pasien_covid, freq = FALSE, breaks = 10, col = "pink", main = "Kernel Gaussian BW = 1")
lines(den, col = 'red', lwd =2)
den <- density(usia_pasien_covid, bw =1.7, kernel = "gaussian")
hist(usia_pasien_covid, freq = FALSE, breaks = 10, col = "pink", main = "Kernel Gaussian BW = 1.7")
lines(den, col = 'red', lwd =2)
den <- density(usia_pasien_covid, bw =2.5, kernel = "gaussian")
hist(usia_pasien_covid, freq = FALSE, breaks = 10, col = "pink", main = "Kernel Gaussian BW = 2.5")
lines(den, col = 'red', lwd =2)
Berdasarkan hasil di atas, terlihat bahwa kurva fungsi kernel gaussian dengan lebar jendela terkecil akan memiliki banyak gerigi dan kurva fungsi kernel gaussian dengan lebar jendela terbesar lebih mulus dengan sedikit gerigi. Selain itu, pada lebar jendela terbesar sebaran datanya cenderung mendekati data sebenarnya.