Data yang digunakan adalah pembiayaan kapitasi di BPJS Kesehatan Cabang Bojonegoro. Kapitasi adalah besaran pembayaran per bulan yang dibayar dimuka oleh BPJS Kesehatan kepada Fasilitas Kesehatan Tingkat Pertama (FKTP) berdasarkan jumlah Peserta yang terdaftar tanpa memperhitungkan jenis dan jumlah pelayanan kesehatan yang diberikan. BPJS Kesehatan Cabang Bojonegoro meliputi 2 (dua) Kabupaten, antara lain Kabupaten Bojonegoro dan Kabupaten Tuban.
## [1] "D:\\MMT-ITS\\Materi Kuliah Semester 3\\Big Data Analytics\\Wahyu Wibowo\\R BDA\\kapitasi_bjn_okt20.csv"
setwd("D://MMT-ITS//Materi Kuliah Semester 3//Big Data Analytics//Wahyu Wibowo//R BDA")
library(stats)
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
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.2 v purrr 0.3.4
## v tibble 3.0.4 v stringr 1.4.0
## v tidyr 1.1.2 v forcats 0.5.0
## v readr 1.4.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## 'data.frame': 32995 obs. of 39 variables:
## $ insertdate : chr "10/18/2020 10:06:54 AM" "10/18/2020 10:06:54 AM" "10/18/2020 10:06:54 AM" "10/18/2020 10:06:54 AM" ...
## $ jeniskoreksi : chr "" "" "" "" ...
## $ jnspstreg : chr "Non PBI" "Non PBI" "PBI" "PBI" ...
## $ kddati2 : int 203 203 203 203 203 203 203 203 203 203 ...
## $ kdjnsppk : chr "B" "B" "U" "U" ...
## $ kdkc : int 1302 1302 1302 1302 1302 1302 1302 1302 1302 1302 ...
## $ kdkepemilikan : chr "2" "4" "S" "S" ...
## $ kdkr : int 7 7 7 7 7 7 7 7 7 7 ...
## $ kdppk : chr "02030001" "02030002" "0203U002" "0203U019" ...
## $ kdprov : int 14 14 14 14 14 14 14 14 14 14 ...
## $ kdtypeppk : chr "BP" "BP" "DU" "DU" ...
## $ nmdati2 : chr "KAB. TUBAN" "KAB. TUBAN" "KAB. TUBAN" "KAB. TUBAN" ...
## $ nmjnsppk : chr "Klinik Pratama" "Klinik Pratama" "Dokter Umum" "Dokter Umum" ...
## $ nmkc : chr "BOJONEGORO" "BOJONEGORO" "BOJONEGORO" "BOJONEGORO" ...
## $ nmkepemilikan : chr "TNI AD" "POLRI" "Swasta" "Swasta" ...
## $ nmppk : chr "POSKES 05.10.07 TUBAN" "POLRES TUBAN" "LILIANA NENI ISDWIYATI,dr" "HUSIN ALMASHUR,dr" ...
## $ nmprov : chr "JAWA TIMUR" "JAWA TIMUR" "JAWA TIMUR" "JAWA TIMUR" ...
## $ nmtypeppk : chr "Klinik Non Rawat Inap" "Klinik Non Rawat Inap" "Dokter Prakter Perorangan" "Dokter Prakter Perorangan" ...
## $ nofpk : int 0 0 0 0 0 0 0 0 0 0 ...
## $ noreg : chr "1302K011500001" "1302K011500002" "1302K011500011" "1302K011500012" ...
## $ noregkoreksi : chr "" "" "" "" ...
## $ tanggalbayar : chr "1/15/2015" "1/15/2015" "1/15/2015" "1/15/2015" ...
## $ tglkoreksi : chr "" "" "" "" ...
## $ tglpelayanan : chr "1/1/2015" "1/1/2015" "1/1/2015" "1/1/2015" ...
## $ tglreg : chr "1/12/2015" "1/12/2015" "1/12/2015" "1/12/2015" ...
## $ tglstjkeu : chr "1/15/2015" "1/15/2015" "1/15/2015" "1/15/2015" ...
## $ tglstjreg : chr "1/12/2015" "1/12/2015" "1/12/2015" "1/12/2015" ...
## $ tglverreg : chr "1/12/2015" "1/12/2015" "1/12/2015" "1/12/2015" ...
## $ userakses : chr "True" "True" "True" "True" ...
## $ bpjkoreksi : int NA NA NA NA NA NA NA NA NA NA ...
## $ bykapitasi : int 13696000 20944000 24000 8000 56000 8075000 37335000 8435000 76830000 5580000 ...
## $ flagjarkomdat : int NA NA NA NA NA NA NA NA NA NA ...
## $ flagkapitasikhusus: int NA NA NA NA NA NA NA NA NA NA ...
## $ jmlpstkap : int 1712 2618 3 1 7 1615 7467 1687 15366 1116 ...
## $ jmlpstkoreksi : int NA NA NA NA NA NA NA NA NA NA ...
## $ kapbpj : int 8000 8000 8000 8000 8000 5000 5000 5000 5000 5000 ...
## $ konskbk : num NA NA NA NA NA NA NA NA NA NA ...
## $ normakapitasi : int NA NA NA NA NA NA NA NA NA NA ...
## $ Number.of.Records : int 1 1 1 1 1 1 1 1 1 1 ...
Sebelum membuat visualisasi data maka dilakukan seleksi terhadap variabel data yang akan digunakan.
## 'data.frame': 32995 obs. of 6 variables:
## $ tglpelayanan: chr "1/1/2015" "1/1/2015" "1/1/2015" "1/1/2015" ...
## $ jmlpstkap : int 1712 2618 3 1 7 1615 7467 1687 15366 1116 ...
## $ bykapitasi : int 13696000 20944000 24000 8000 56000 8075000 37335000 8435000 76830000 5580000 ...
## $ nmdati2 : chr "KAB. TUBAN" "KAB. TUBAN" "KAB. TUBAN" "KAB. TUBAN" ...
## $ nmjnsppk : chr "Klinik Pratama" "Klinik Pratama" "Dokter Umum" "Dokter Umum" ...
## $ nmppk : chr "POSKES 05.10.07 TUBAN" "POLRES TUBAN" "LILIANA NENI ISDWIYATI,dr" "HUSIN ALMASHUR,dr" ...
Variabel yang akan digunakan yaitu:
Mengubah data menjadi data frame: df.kapitasi
kapitasi$tglpelayanan <- as.Date(kapitasi$tglpelayanan, format = "%m/%d/%Y")
df.kapitasi <- data.frame(kapitasi)Untuk mendapatkan agregat per bulan, maka data frame disusun perbulan kapitasi. Mengubah format tanggal pelayanan as Date dan mengelompokkan as Month Year (Bulan Tahun) menjadi: bln.kapitasi
df.kapitasi$tglpelayanan <- format(as.Date(df.kapitasi$tglpelayanan), "%m/%Y")
df.kapitasi$tglpelayanan <- paste("01/", df.kapitasi$tglpelayanan)
df.kapitasi$tglpelayanan <- as.Date(df.kapitasi$tglpelayanan, format = "%d/%m/%Y")bln.kapitasi <- df.kapitasi %>%
group_by(tglpelayanan, nmdati2, nmjnsppk, nmppk)%>%
summarize(jmlpstkap = sum(jmlpstkap),
bykapitasi = sum(bykapitasi))## Rows: 11,953
## Columns: 6
## Groups: tglpelayanan, nmdati2, nmjnsppk [655]
## $ tglpelayanan <date> 2014-01-01, 2014-01-01, 2014-01-01, 2014-01-01, 2014-...
## $ nmdati2 <chr> "KAB. BOJONEGORO", "KAB. BOJONEGORO", "KAB. BOJONEGORO...
## $ nmjnsppk <chr> "Dokter gigi", "Dokter Umum", "Dokter Umum", "Dokter U...
## $ nmppk <chr> "SUSARTO SUBIANTO, MSc, drg", "AMIROH FARIA, dr", "ART...
## $ jmlpstkap <int> 9230, 923, 813, 4688, 532, 518, 1705, 403, 142, 921, 5...
## $ bykapitasi <int> 18460000, 7384000, 6504000, 37504000, 4256000, 4144000...
Bln.kap.dati <- bln.kapitasi %>%
dplyr::group_by(tglpelayanan, nmdati2)%>%
summarize(jmlpstkap = sum(jmlpstkap),
bykapitasi = sum(bykapitasi))## Rows: 164
## Columns: 4
## Groups: tglpelayanan [82]
## $ tglpelayanan <date> 2014-01-01, 2014-01-01, 2014-02-01, 2014-02-01, 2014-...
## $ nmdati2 <chr> "KAB. BOJONEGORO", "KAB. TUBAN", "KAB. BOJONEGORO", "K...
## $ jmlpstkap <int> 635323, 533468, 620525, 537377, 638379, 321661, 655665...
## $ bykapitasi <dbl> 3306760000, 2610670000, 3211739500, 2635947500, 331289...
# Basic line plot (Jumlah Peserta Terdaftar)
ggplot(Bln.kap.dati %>% subset(nmdati2 == "KAB. TUBAN"),
aes(x = tglpelayanan, y = jmlpstkap))+
geom_line(color = "#00AFBB", size = 2) +
geom_smooth(method = "gam", formula = y ~ s(x))# Plot a subset of the data (Biaya Kapitasi Kab. Tuban mulai Tahun 2018)
ss <- subset(Bln.kap.dati, tglpelayanan >= as.Date("2018-01-01")
& nmdati2 == "KAB. TUBAN")
ggplot(data = ss, aes(x = tglpelayanan, y = bykapitasi)) +
geom_line(color = "#FC4E07", size = 2) +
geom_smooth(method = "gam", formula = y ~ s(x)) +
labs(x="Bulan Kapitasi (bulan/tahun)", y="Biaya Kapitasi",
title="Biaya Kapitasi Kabupaten Tuban Tahun 2018-2020")## You will likely need to install these fonts on your system as well.
##
## You can find them in [C:/Users/Lenovo/Documents/R/win-library/4.0/hrbrthemes/fonts/roboto-condensed]
ggplot(Bln.kap.dati %>% subset (nmdati2 == "KAB. BOJONEGORO"),
aes(x = tglpelayanan, y = bykapitasi)) +
geom_point(color = ft_cols$yellow) +
geom_smooth(method = "gam", formula = y ~ s(x)) +
geom_line(color="#69b3a2") +
labs(x="Bulan Kapitasi (bulan/tahun)",
y="Biaya Kapitasi (Rupiah)",
title="Biaya Kapitasi Kabupaten Bojonegoro 2014-2020") +
theme_ft_rc()library(ggplot2)
ggplot(bln.kapitasi %>%
select(nmdati2, nmjnsppk, nmppk, jmlpstkap),
aes(nmdati2, jmlpstkap)) +
geom_point() +
geom_violin() +
facet_wrap(~nmjnsppk, ncol = 2)## Adding missing grouping variables: `tglpelayanan`
ggplot(bln.kapitasi %>%
subset(nmjnsppk == "Dokter Umum")%>%
dplyr::group_by(tglpelayanan)%>%
summarize(jmlpstkap = sum(jmlpstkap),
bykapitasi = sum(bykapitasi)),
aes(tglpelayanan, bykapitasi)) +
geom_line(color = "yellow", size = 1) +
geom_smooth() +
labs(x="Bulan Kapitasi (bulan/tahun)",
y="Biaya Kapitasi (Rupiah)",
title="Tren Biaya Kapitasi Dokter Umum") +
theme_ft_rc()## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Nm_jnsppk <- bln.kapitasi %>%
dplyr::group_by(tglpelayanan, nmdati2, nmjnsppk)%>%
summarize(jmlpstkap = sum(jmlpstkap),
bykapitasi = sum(bykapitasi))## Rows: 655
## Columns: 5
## Groups: tglpelayanan, nmdati2 [164]
## $ tglpelayanan <date> 2014-01-01, 2014-01-01, 2014-01-01, 2014-01-01, 2014-...
## $ nmdati2 <chr> "KAB. BOJONEGORO", "KAB. BOJONEGORO", "KAB. BOJONEGORO...
## $ nmjnsppk <chr> "Dokter gigi", "Dokter Umum", "Puskesmas", "Dokter gig...
## $ jmlpstkap <int> 9230, 13701, 612392, 9727, 8100, 4555, 511086, 9339, 1...
## $ bykapitasi <dbl> 18460000, 109608000, 3178692000, 19454000, 64800000, 3...
ggplot(Nm_jnsppk %>% subset(nmjnsppk == "Puskesmas"),
aes(nmdati2, bykapitasi)) +
geom_point() +
geom_violin()ggplot(Nm_jnsppk %>% subset(nmjnsppk == "Puskesmas"),
aes(nmdati2, bykapitasi)) +
geom_point() +
geom_boxplot()Nm.ppk <- bln.kapitasi %>%
subset(nmdati2 == "KAB. BOJONEGORO")%>%
dplyr::group_by(tglpelayanan, nmppk)%>%
summarize(jmlpstkap = sum(jmlpstkap),
bykapitasi = sum(bykapitasi))
Nm.ppk <- Nm.ppk [order(-Nm.ppk$bykapitasi),]
head(Nm.ppk, n = 5)## Rows: 6,922
## Columns: 4
## Groups: tglpelayanan [82]
## $ tglpelayanan <date> 2020-02-01, 2020-04-01, 2020-03-01, 2020-10-01, 2020-...
## $ nmppk <chr> "BALEN", "BALEN", "BALEN", "BALEN", "BALEN", "BALEN", ...
## $ jmlpstkap <int> 63012, 62412, 62396, 61845, 61564, 61452, 61443, 61437...
## $ bykapitasi <int> 340264800, 337024800, 336938400, 333963000, 332445600,...
ggplot(Nm.ppk %>% subset(nmppk == "NGASEM"),
aes(tglpelayanan, bykapitasi)) +
geom_point(color = ft_cols$yellow) +
geom_smooth(method = "gam", formula = y ~ s(x)) +
labs(x="Bulan Kapitasi (bulan/tahun)",
y="Biaya Kapitasi (Rupiah)",
title="Trend Biaya Kapitasi Puskesmas Ngasem") +
theme_ft_rc()Time series atau runtun waktu adalah himpunan observasi data terurut dalam waktu (Hanke&Winchern, 2005: 58).
#declaring the data as time series (Kab Tuban)
ts.kap.dati <- ts(Bln.kap.dati %>%
select(tglpelayanan, nmdati2, bykapitasi) %>%
subset(nmdati2 == "KAB. TUBAN"),
start = c(2014,1), end = c(2020,10), frequency = 12)## $dim
## [1] 82 3
##
## $dimnames
## $dimnames[[1]]
## NULL
##
## $dimnames[[2]]
## [1] "tglpelayanan" "nmdati2" "bykapitasi"
##
##
## $tsp
## [1] 2014.00 2020.75 12.00
##
## $class
## [1] "mts" "ts" "matrix"
## Time-Series [1:82, 1:3] from 2014 to 2021: 16071 16102 16130 16161 16191 ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr [1:3] "tglpelayanan" "nmdati2" "bykapitasi"
## tglpelayanan nmdati2 bykapitasi
## Jan 2014 16071 1 2610670000
## Feb 2014 16102 1 2635947500
## Mar 2014 16130 1 1568092000
## Apr 2014 16161 1 2726967000
## May 2014 16191 1 2766540500
## Jun 2014 16222 1 2779661000
## Jul 2014 16252 1 2793074500
## Aug 2014 16283 1 2792196500
## Sep 2014 16314 1 2780605000
## Oct 2014 16344 1 2810931500
## Nov 2014 16375 1 2819544000
## Dec 2014 16405 1 2825265000
## Jan 2015 16436 1 2876956500
## Feb 2015 16467 1 2986313000
## Mar 2015 16495 1 2965994500
## Apr 2015 16526 1 3024982500
## May 2015 16556 1 3022452000
## Jun 2015 16587 1 3063016000
## Jul 2015 16617 1 3146693000
## Aug 2015 16648 1 2294498750
## Sep 2015 16679 1 3213796500
## Oct 2015 16709 1 3221598000
## Nov 2015 16740 1 3180497000
## Dec 2015 16770 1 3191884500
## Jan 2016 16801 1 3213122000
## Feb 2016 16832 1 3455514500
## Mar 2016 16861 1 3471523000
## Apr 2016 16892 1 3501701500
## May 2016 16922 1 3539175500
## Jun 2016 16953 1 3570539000
## Jul 2016 16983 1 3577812000
## Aug 2016 17014 1 3549006000
## Sep 2016 17045 1 3423793500
## Oct 2016 17075 1 3552735000
## Nov 2016 17106 1 3565846000
## Dec 2016 17136 1 3575573000
## Jan 2017 17167 1 3600736500
## Feb 2017 17198 1 3603592000
## Mar 2017 17226 1 3618488000
## Apr 2017 17257 1 3434247328
## May 2017 17287 1 3510019258
## Jun 2017 17318 1 3513535162
## Jul 2017 17348 1 3647530010
## Aug 2017 17379 1 3451946174
## Sep 2017 17410 1 3558035557
## Oct 2017 17440 1 3634483550
## Nov 2017 17471 1 3647386825
## Dec 2017 17501 1 3674999000
## Jan 2018 17532 1 3658308125
## Feb 2018 17563 1 3600943600
## Mar 2018 17591 1 3694372925
## Apr 2018 17622 1 3739694150
## May 2018 17652 1 3754903625
## Jun 2018 17683 1 3794427000
## Jul 2018 17713 1 3709503054
## Aug 2018 17744 1 3698279598
## Sep 2018 17775 1 3746875129
## Oct 2018 17805 1 3809162136
## Nov 2018 17836 1 3823270247
## Dec 2018 17866 1 3842796156
## Jan 2019 17897 1 3938228527
## Feb 2019 17928 1 3864339373
## Mar 2019 17956 1 3956300722
## Apr 2019 17987 1 3958889148
## May 2019 18017 1 3951811327
## Jun 2019 18048 1 4041370692
## Jul 2019 18078 1 4082220000
## Aug 2019 18109 1 4014930900
## Sep 2019 18140 1 3839193666
## Oct 2019 18170 1 3944894195
## Nov 2019 18201 1 4072085675
## Dec 2019 18231 1 3941142850
## Jan 2020 18262 1 3951231700
## Feb 2020 18293 1 3880526550
## Mar 2020 18322 1 3949330050
## Apr 2020 18353 1 3966319300
## May 2020 18383 1 3927173650
## Jun 2020 18414 1 4016193750
## Jul 2020 18444 1 4027259350
## Aug 2020 18475 1 4036698500
## Sep 2020 18506 1 4017260950
## Oct 2020 18536 1 4014353350