Packages

Import Data

data <- read_excel("C:\\Users\\Diva\\Documents\\SEMESTER 5\\PSD\\p11\\faskes jabar.xlsx")
head(data)
## # A tibble: 6 × 11
##   kabkot  perawat bidan puskesmas_nonri `puskesmas-ri` dokspes dokgi dokum    rs
##   <chr>     <dbl> <dbl>           <dbl>          <dbl>   <dbl> <dbl> <dbl> <dbl>
## 1 KABUPA…    4374  1950              71             30    1008    79   596    30
## 2 KABUPA…    2167  1516              48             10     199    21   173     9
## 3 KABUPA…    1678  1476              39              8      74     9    90     5
## 4 KABUPA…    2310   876              57              5     303    28   247    15
## 5 KABUPA…    2464  1460              34             33     133     8    98     7
## 6 KABUPA…    1091  1140              21             19      30    27    32     2
## # ℹ 2 more variables: klinik <dbl>, toko_obat <dbl>

Statistika Deskriptif

summary(data)
##     kabkot             perawat         bidan      puskesmas_nonri
##  Length:27          Min.   : 494   Min.   : 190   Min.   : 0.00  
##  Class :character   1st Qu.:1232   1st Qu.: 667   1st Qu.:14.00  
##  Mode  :character   Median :1648   Median : 962   Median :23.00  
##                     Mean   :2255   Mean   : 979   Mean   :28.59  
##                     3rd Qu.:3039   3rd Qu.:1360   3rd Qu.:38.50  
##                     Max.   :6645   Max.   :1950   Max.   :73.00  
##   puskesmas-ri     dokspes           dokgi            dokum       
##  Min.   : 0.0   Min.   :  20.0   Min.   :  1.00   Min.   :  12.0  
##  1st Qu.: 1.5   1st Qu.:  84.5   1st Qu.:  9.00   1st Qu.:  94.0  
##  Median : 8.0   Median : 178.0   Median : 19.00   Median : 128.0  
##  Mean   :10.3   Mean   : 418.4   Mean   : 41.15   Mean   : 292.1  
##  3rd Qu.:14.0   3rd Qu.: 441.5   3rd Qu.: 44.50   3rd Qu.: 320.0  
##  Max.   :33.0   Max.   :2132.0   Max.   :244.00   Max.   :2286.0  
##        rs            klinik         toko_obat     
##  Min.   : 1.00   Min.   :  0.00   Min.   :  0.00  
##  1st Qu.: 6.00   1st Qu.:  6.00   1st Qu.:  4.50  
##  Median :11.00   Median :  9.00   Median : 20.00  
##  Mean   :15.11   Mean   : 20.85   Mean   : 26.67  
##  3rd Qu.:18.50   3rd Qu.: 17.00   3rd Qu.: 38.00  
##  Max.   :53.00   Max.   :131.00   Max.   :119.00
dataku<-data[-1]

Terdapat perbedaan range dari peubah-peubah yang digunakan, hal ini menandakan bahwa terdapat perbedaan persebaran masing-masing peubah di tiap kabupaten/kota.

Pada beberapa peubah nilai minimumnya adalah 0, artinya tidak ada jumlah sama sekali fasilitas tersebut di kab/kota tertentu. Hal ini menandakan ada beberapa daerah yang belum tersedia fasilitas tersebut.

Eksplorasi Data

Cek missing value

data %>% 
  is.na() %>% 
  colSums()
##          kabkot         perawat           bidan puskesmas_nonri    puskesmas-ri 
##               0               0               0               0               0 
##         dokspes           dokgi           dokum              rs          klinik 
##               0               0               0               0               0 
##       toko_obat 
##               0

Tidak terdapat missing value, sehingga dapat dilanjutkan ke proses analisis.

hist(data$`puskesmas-ri`, col = "#4682B4", border = "black", main = "Histogram of Puskesmas Rawat Inap", xlab = "Jumlah Puskesmas Rawat Inap", ylab = "Frequency")

Boxplot masing-masing peubah

# membagi jendela grafik menajdi 2 baris dan 3 kolom
par(mfrow=c(2,3))

# Looping Box-Plot
type <- c("perawat", "bidan", "puskesmas_nonri", "puskesmas-ri","dokspes","dokgi","dokum", "rs","klinik","toko_obat")
for (i in type){
  boxplot(dataku[,i],
       main = paste("Variabel", i))
}

Terlihat terdapat beberapa peubah yang memiliki outlier sehingga menandakan terdapat ketidakmerataan fasilitas yang ada di kab/kota provinsi Jawa Barat. Hal ini sesuai dengan eksplorasi pada summary(data) di atas.

Matriks Korelasi

ggcorr(dataku, label = TRUE)

Terdapat korelasi yang tinggi dan bersifat positif diantaranta yaitu antara dokter umum dengan dokter gigi dan dokter umum dengan dokter spesiaslis yaitu sebesar 0.9, artinya jika suatu daerah memiliki jumlah dokter umum yang tinggi maka jumlah dokter gigi dan jumlah dokter spesialisnya akan cenderung memiliki jumlah yang tinggi juga, begitu pula sebaliknya.

Terdapat korelasi yang sedang dan bersifat positif antara bidan dengan puskesmas non rawat inap serta perawat dengan bidan.

Terdapat korelasi yang lemah dan bersifat positif antara dokter gigi dengan toko obat dan bidan dengan klinik.

Terdapat beberapa varibel yang tidak memiliki korelasi, nilai korelasi 0, yaitu antara perawat dengan puskesmas dengan klinik dan antara perawat dengan puskesmas rawat inap.

Terdapat peubah-peubah dengan nilai korelasi 1 sehingga apakah terdapat permasalahan multikolinearitas, multikolinearitas ini berarti terdapat hubungan antara variabel independennya.

Analisis Kluster

Uji Multikolinieritas

CekVIF <- function(data) {
  corr = as.matrix(cor(data))
  VIF = diag(solve(corr))
  
  return(VIF)
}

CekVIF(data[-1])
##         perawat           bidan puskesmas_nonri    puskesmas-ri         dokspes 
##       45.901966        5.768074        4.348137        2.795499      109.082360 
##           dokgi           dokum              rs          klinik       toko_obat 
##       57.332032       29.567795       15.443747        4.887629        3.644508

Terdapat beberapa peubah dengan nilai VIF>10 sehingga mengindikasikan adanya multikolinieritas sesuai dengan matriks korelasi di atas. Akan tetapi, tujuan cluster kali ini ingin mengamati semua kab/kota di Jawa Barat mengenai fasilitas kesehatanya sehingga tidak dilakukan penanganan untuk peubah-peubah tersebut.

Grafik Jarak Antar Objek

library(factoextra)
distance<-get_dist(dataku)
fviz_dist(distance, gradient=list(low="green", mid="white",high="red"))

## Penentuan Jumlah Klaster ### Metode Elbow

fviz_nbclust(dataku, kmeans, method = "wss")

Pada dasarnya nilai k optimum dapat ditentukan sendiri oleh peneliti, selain itu nilai k dapat ditentukan juga menggunakan bantuan grafik Elbow berikut. Dimana k minimum akan didapat ketika grafik sudah tidak bergerak menurun dengan tajam.Dari hasil diatas didapatkan nilai K optimum adalah 2.

Metode Silhouette

fviz_nbclust(dataku, kmeans, method = "silhouette") 

Berdasarkan metode sillhoute juga dihasilkan jumlah klaster yang sama yaitu 2

Ditentukan sendiri oleh peneliti

Dalam hal ini peneliti ingin menguji juga menggunakan 3 dan 4 klaster. Sehingga akan dianalisis clustering dengan klaster 2,3,4

Pemodelan K-Means menggunakan 2 klaster

kmeans_clustering = kmeans(dataku, 2, nstart = 5)
kmeans_clustering
## K-means clustering with 2 clusters of sizes 8, 19
## 
## Cluster means:
##    perawat     bidan puskesmas_nonri puskesmas-ri   dokspes     dokgi  dokum
## 1 4208.875 1319.1250        45.00000           11 1091.8750 100.25000 712.75
## 2 1432.579  835.8421        21.68421           10  134.8421  16.26316 115.00
##          rs    klinik toko_obat
## 1 31.875000 53.000000  45.37500
## 2  8.052632  7.315789  18.78947
## 
## Clustering vector:
##  [1] 1 2 2 2 2 2 2 2 1 2 2 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 2
## 
## Within cluster sum of squares by cluster:
## [1] 18602400  8142660
##  (between_SS / total_SS =  66.0 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
fviz_cluster(kmeans_clustering, data=dataku)

Insight :

Dari hasil visualisasi nampak jelas bahwa tiap klaster memiliki daerah tertentu yang terpisah dari klaster lain.

Terlihat bahwa klaster 2 memiliki wilayah yang lebih luas tetapi dengan jumlah kab/kota yang lebih sedikit. Sedangkan pada klaster 1 cenderung mengumpul.

letak= data.frame(dataku,kmeans_clustering$cluster)
colnames(letak)[colnames(letak)=="kluster.cluster"] = "Cluster"
letak
##    perawat bidan puskesmas_nonri puskesmas.ri dokspes dokgi dokum rs klinik
## 1     4374  1950              71           30    1008    79   596 30     14
## 2     2167  1516              48           10     199    21   173  9      5
## 3     1678  1476              39            8      74     9    90  5      8
## 4     2310   876              57            5     303    28   247 15     15
## 5     2464  1460              34           33     133     8    98  7      9
## 6     1091  1140              21           19      30    27    32  2      3
## 7     1207   773              13           22      84     8    63  6      0
## 8     1418  1023              31            6     178    17   125 12     10
## 9     3049  1560              49           11     353    17   321 12     18
## 10    1242  1099              23            9      84     7    63  5     10
## 11     944   763              18           17      85     7    69  3      0
## 12    1648  1101               0            0      60     9   126 12      0
## 13    1324   962              15           25     112    40   107 11      9
## 14    1835   674              13            7     241    18   180 11     15
## 15    3313  1577              19           31     530    49   319 26     98
## 16    4444  1632              37            9    1198   126   556 53     17
## 17    1091   660              26            6     171    18   128 11      7
## 18     562   450               4           11      20     3    12  1      2
## 19    3029   633              25            0     879    78   373 22     22
## 20    1221   298              15            0     113    13   119  6      5
## 21    6645  1261              73            7    2132   244  2286 39    131
## 22    1322   459              22            0     271    22   154 11     17
## 23    5445  1178              48            0    1624   138   819 47     70
## 24    3372   762              38            0    1011    71   432 26     54
## 25    1604   268              12            1     261    34   242  8      9
## 26    1597   693              13            9     112    19   118 14      7
## 27     494   190               8            2      31     1    39  4      8
##    toko_obat kmeans_clustering.cluster
## 1        119                         1
## 2         20                         2
## 3          8                         2
## 4          5                         2
## 5         71                         2
## 6          0                         2
## 7         30                         2
## 8         44                         2
## 9          5                         1
## 10        37                         2
## 11        11                         2
## 12         0                         2
## 13        28                         2
## 14        20                         2
## 15         4                         1
## 16        20                         1
## 17        39                         2
## 18         7                         2
## 19        54                         1
## 20         0                         2
## 21         0                         1
## 22        23                         2
## 23       104                         1
## 24        57                         1
## 25        11                         2
## 26         0                         2
## 27         3                         2
table(kmeans_clustering$cluster)
## 
##  1  2 
##  8 19
  • Klaster 1 berjumlah 19.

  • Klaster 2 berjumlah 8.

Pemodelan K-Means menggunakan 3 klaster

kmeans_clustering2 = kmeans(dataku, 3, nstart = 5)
kmeans_clustering2
## K-means clustering with 3 clusters of sizes 7, 4, 16
## 
## Cluster means:
##    perawat     bidan puskesmas_nonri puskesmas-ri   dokspes     dokgi     dokum
## 1 2814.857 1197.7143        38.57143     12.85714  486.8571  38.85714  280.4286
## 2 5227.000 1505.2500        57.25000     11.50000 1490.5000 146.75000 1064.2500
## 3 1267.375  751.8125        17.06250      8.87500  120.4375  15.75000  104.1875
##         rs   klinik toko_obat
## 1 16.71429 31.57143  30.85714
## 2 42.25000 58.00000  60.75000
## 3  7.62500  6.87500  16.31250
## 
## Clustering vector:
##  [1] 2 1 3 1 1 3 3 3 1 3 3 3 3 3 1 2 3 3 1 3 2 3 2 1 3 3 3
## 
## Within cluster sum of squares by cluster:
## [1] 3304036 6593661 4301091
##  (between_SS / total_SS =  82.0 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
fviz_cluster(kmeans_clustering2, data=dataku)

Insight :

Dari hasil visualisasi nampak jelas bahwa tiap klaster memiliki daerah tertentu yang terpisah dari klaster lain.

Perbedaanya dengan 2 klaster, pada klaster 3 ini wilayah klaster 2 lebih mengecil dan sebagian kab/kota nya menjadi masuk menjadi klaster 1. Sedangkan klaster 3 wilayah klasternya semakin mengecil dan beberapa kab/kota sebelumnya masuk ke dalam klaster 1.

letak2= data.frame(dataku,kmeans_clustering2$cluster)
colnames(letak2)[colnames(letak2)=="kluster.cluster"] = "Cluster"
letak
##    perawat bidan puskesmas_nonri puskesmas.ri dokspes dokgi dokum rs klinik
## 1     4374  1950              71           30    1008    79   596 30     14
## 2     2167  1516              48           10     199    21   173  9      5
## 3     1678  1476              39            8      74     9    90  5      8
## 4     2310   876              57            5     303    28   247 15     15
## 5     2464  1460              34           33     133     8    98  7      9
## 6     1091  1140              21           19      30    27    32  2      3
## 7     1207   773              13           22      84     8    63  6      0
## 8     1418  1023              31            6     178    17   125 12     10
## 9     3049  1560              49           11     353    17   321 12     18
## 10    1242  1099              23            9      84     7    63  5     10
## 11     944   763              18           17      85     7    69  3      0
## 12    1648  1101               0            0      60     9   126 12      0
## 13    1324   962              15           25     112    40   107 11      9
## 14    1835   674              13            7     241    18   180 11     15
## 15    3313  1577              19           31     530    49   319 26     98
## 16    4444  1632              37            9    1198   126   556 53     17
## 17    1091   660              26            6     171    18   128 11      7
## 18     562   450               4           11      20     3    12  1      2
## 19    3029   633              25            0     879    78   373 22     22
## 20    1221   298              15            0     113    13   119  6      5
## 21    6645  1261              73            7    2132   244  2286 39    131
## 22    1322   459              22            0     271    22   154 11     17
## 23    5445  1178              48            0    1624   138   819 47     70
## 24    3372   762              38            0    1011    71   432 26     54
## 25    1604   268              12            1     261    34   242  8      9
## 26    1597   693              13            9     112    19   118 14      7
## 27     494   190               8            2      31     1    39  4      8
##    toko_obat kmeans_clustering.cluster
## 1        119                         1
## 2         20                         2
## 3          8                         2
## 4          5                         2
## 5         71                         2
## 6          0                         2
## 7         30                         2
## 8         44                         2
## 9          5                         1
## 10        37                         2
## 11        11                         2
## 12         0                         2
## 13        28                         2
## 14        20                         2
## 15         4                         1
## 16        20                         1
## 17        39                         2
## 18         7                         2
## 19        54                         1
## 20         0                         2
## 21         0                         1
## 22        23                         2
## 23       104                         1
## 24        57                         1
## 25        11                         2
## 26         0                         2
## 27         3                         2
table(kmeans_clustering2$cluster)
## 
##  1  2  3 
##  7  4 16
  • Klaster 1 berjumlah 7

  • Klaster 2 berjumlah 4.

  • Klaster 3 berjumlah 16

Pemodelan K-Means menggunakan 4 klaster

kmeans_clustering3 = kmeans(dataku, 4, nstart = 5)
kmeans_clustering3
## K-means clustering with 4 clusters of sizes 3, 16, 7, 1
## 
## Cluster means:
##    perawat     bidan puskesmas_nonri puskesmas-ri   dokspes     dokgi     dokum
## 1 4754.333 1586.6667        52.00000     13.00000 1276.6667 114.33333  657.0000
## 2 1267.375  751.8125        17.06250      8.87500  120.4375  15.75000  104.1875
## 3 2814.857 1197.7143        38.57143     12.85714  486.8571  38.85714  280.4286
## 4 6645.000 1261.0000        73.00000      7.00000 2132.0000 244.00000 2286.0000
##         rs    klinik toko_obat
## 1 43.33333  33.66667  81.00000
## 2  7.62500   6.87500  16.31250
## 3 16.71429  31.57143  30.85714
## 4 39.00000 131.00000   0.00000
## 
## Clustering vector:
##  [1] 1 3 2 3 3 2 2 2 3 2 2 2 2 2 3 1 2 2 3 2 4 2 1 3 2 2 2
## 
## Within cluster sum of squares by cluster:
## [1] 1269216 4301091 3304036       0
##  (between_SS / total_SS =  88.7 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
fviz_cluster(kmeans_clustering3, data=dataku)

Dari hasil visualisasi nampak jelas bahwa tiap klaster memiliki daerah tertentu yang terpisah dari klaster lain.

Perbedaan pada klaster sebelumnya, pada 3 klaster ini amatan 21 terpisah menjadi 1 klaster sehingga terbentuk klaster 4 berjumlah 3 amatan.

table(kmeans_clustering3$cluster)
## 
##  1  2  3  4 
##  3 16  7  1
  • Klaster 1 berjumlah 7.

  • Klaster 2 berjumlah 16.

  • Klaster 3 berjumlah 1.

  • Klaster 4 berjumlah 3.

letak3= data.frame(dataku,kmeans_clustering3$cluster)
colnames(letak3)[colnames(letak3)=="kluster.cluster"] = "Cluster"
letak
##    perawat bidan puskesmas_nonri puskesmas.ri dokspes dokgi dokum rs klinik
## 1     4374  1950              71           30    1008    79   596 30     14
## 2     2167  1516              48           10     199    21   173  9      5
## 3     1678  1476              39            8      74     9    90  5      8
## 4     2310   876              57            5     303    28   247 15     15
## 5     2464  1460              34           33     133     8    98  7      9
## 6     1091  1140              21           19      30    27    32  2      3
## 7     1207   773              13           22      84     8    63  6      0
## 8     1418  1023              31            6     178    17   125 12     10
## 9     3049  1560              49           11     353    17   321 12     18
## 10    1242  1099              23            9      84     7    63  5     10
## 11     944   763              18           17      85     7    69  3      0
## 12    1648  1101               0            0      60     9   126 12      0
## 13    1324   962              15           25     112    40   107 11      9
## 14    1835   674              13            7     241    18   180 11     15
## 15    3313  1577              19           31     530    49   319 26     98
## 16    4444  1632              37            9    1198   126   556 53     17
## 17    1091   660              26            6     171    18   128 11      7
## 18     562   450               4           11      20     3    12  1      2
## 19    3029   633              25            0     879    78   373 22     22
## 20    1221   298              15            0     113    13   119  6      5
## 21    6645  1261              73            7    2132   244  2286 39    131
## 22    1322   459              22            0     271    22   154 11     17
## 23    5445  1178              48            0    1624   138   819 47     70
## 24    3372   762              38            0    1011    71   432 26     54
## 25    1604   268              12            1     261    34   242  8      9
## 26    1597   693              13            9     112    19   118 14      7
## 27     494   190               8            2      31     1    39  4      8
##    toko_obat kmeans_clustering.cluster
## 1        119                         1
## 2         20                         2
## 3          8                         2
## 4          5                         2
## 5         71                         2
## 6          0                         2
## 7         30                         2
## 8         44                         2
## 9          5                         1
## 10        37                         2
## 11        11                         2
## 12         0                         2
## 13        28                         2
## 14        20                         2
## 15         4                         1
## 16        20                         1
## 17        39                         2
## 18         7                         2
## 19        54                         1
## 20         0                         2
## 21         0                         1
## 22        23                         2
## 23       104                         1
## 24        57                         1
## 25        11                         2
## 26         0                         2
## 27         3                         2

Berdasarkan visualisasi data hasil cluster, penulis memilih klaster 3 sebagai jumlah klaster yang digunakan karena menurut penulis paling pas pembagianya. Tidak ada amatan yang terpisah jauh sendirian.

Interpretasi dan Profiling klaster

Dengan menggunakan visualisasi data, dapat memudahkan dalam melakukan profiling.

dataku$Cluster <- kmeans_clustering2$cluster
ggRadar(
  data = dataku,
  mapping = aes(colours = Cluster),
  interactive = T
)

Berdasarkan hasil diatas dapat diketahui bahwa karakteristik dari masing-masing klaster adalah sebagai berikut:

Klaster 1: Memiliki jumlah puskesmas rawat inap dan bidan yang banyak dari pada fasilitas lain sedangkan jumlah dokter umum dan dokteer gigi yang cukup rendah.

Klaster 2: Memiliki jumlah rumah sakit, perawat, dan puskesmas non rawat inap banyak

Klaster 3: Memiliki jumlah bidan dan puskesmas rawat inap yang banyak dari pada fasilitas lain sedangkan jumlah dokter gigi dan klinik yang sedikit

cluster_means <- aggregate(dataku[,1:ncol(dataku)-1], list(kmeans_clustering$cluster), mean)
print(cluster_means)
##   Group.1  perawat     bidan puskesmas_nonri puskesmas-ri   dokspes     dokgi
## 1       1 4208.875 1319.1250        45.00000           11 1091.8750 100.25000
## 2       2 1432.579  835.8421        21.68421           10  134.8421  16.26316
##    dokum        rs    klinik toko_obat
## 1 712.75 31.875000 53.000000  45.37500
## 2 115.00  8.052632  7.315789  18.78947

Hasil yang didapat tidak berbeda dengan menggunakan visualisasi sebelumnya, dengan menggunakan summarise data karakteristik dari masing-masing klaster dapat dilihat melalui angka sehingga dapat diketahui nilai tertinggi dan terendah secara detail.

Kesimpulan

Dari hasil analisis dan pembahasan yang telah diuraikan sebelumnya, maka diperoleh kesimpulan sebagai berikut :

Berdasarkan nilai wss diperoleh jumlah klaster untuk kasus ini adalah sebanyak 2. Akan tetapi, peneliti mencoba klaster lain dan dipilih yang terbaik adalah klaster 3

Berdasarkan jumlah k = 3, maka dibuat 3 klaster. Rincian dari ke 3 klaster adalah pada berikut :

Klaster 1 berjumlah 7 kab/kota.Klater 2 berjumlah 4 kab/kota dan klaster 3 berjumlah 16 kab/kota. Berdasarkan profiling klaster dapat diperoleh sebagai berikut : 1. Klaster 1 : Daerah dengan fasilitas kesehatan baik 2. Klaster 2 : Daerah dengan fasilitas kesehatan sangat baik 3. Klaster 3 : Daerah dengan fasilitas kesehatan kurang baik