Sampling and Survey

Healthcare

Mohammad Riyadh

Check Sheet

# Buat data check sheet
check_sheet <- data.frame(
  No = 1:10,
  Hari = c("Senin", "Senin", "Selasa", "Rabu", "Rabu", "Kamis", "Jumat", "Sabtu", "Sabtu", "Minggu"),
  Nama_Pasien = c("Pasien A", "Pasien B", "Pasien C", "Pasien D", "Pasien E", 
                  "Pasien F", "Pasien G", "Pasien H", "Pasien I", "Pasien J"),
  Jenis_Keluhan = c("Kebersihan ruang tunggu",
                    "Waktu tunggu terlalu lama",
                    "Keterlambatan penanganan IGD",
                    "Petugas kurang ramah",
                    "Kurangnya informasi prosedur",
                    "Tidak tersedia obat",
                    "Kesalahan administrasi",
                    "Kamar mandi tidak bersih",
                    "Antrian tidak tertib",
                    "Peralatan medis tidak lengkap")
)

# Tampilkan tabel
print(check_sheet)
##    No   Hari Nama_Pasien                 Jenis_Keluhan
## 1   1  Senin    Pasien A       Kebersihan ruang tunggu
## 2   2  Senin    Pasien B     Waktu tunggu terlalu lama
## 3   3 Selasa    Pasien C  Keterlambatan penanganan IGD
## 4   4   Rabu    Pasien D          Petugas kurang ramah
## 5   5   Rabu    Pasien E  Kurangnya informasi prosedur
## 6   6  Kamis    Pasien F           Tidak tersedia obat
## 7   7  Jumat    Pasien G        Kesalahan administrasi
## 8   8  Sabtu    Pasien H      Kamar mandi tidak bersih
## 9   9  Sabtu    Pasien I          Antrian tidak tertib
## 10 10 Minggu    Pasien J Peralatan medis tidak lengkap

Control Chart

# Load library

library(qcc)
## Warning: package 'qcc' was built under R version 4.4.3
## Package 'qcc' version 2.7
## Type 'citation("qcc")' for citing this R package in publications.
# Data suhu tubuh pasien per jam
suhu <- c(36.7, 37.1, 37.5, 38.2, 37.8, 36.9, 37.0, 38.5)

# Buat data dalam format matrix (subgroup size = 1)
data_matrix <- matrix(suhu, ncol = 1)

# Buat Control Chart
qcc(data_matrix, 
    type = "xbar.one", 
    title = "Control Chart Suhu Tubuh Pasien per Jam di IGD", 
    xlab = "Jam ke-", 
    ylab = "Suhu Tubuh (°C)",
    center = 37.3,               # CL (Center Line)
    std.dev = (38.5 - 36.1)/6)   # Estimasi standar deviasi dari UCL dan LCL (±3σ)

## List of 11
##  $ call      : language qcc(data = data_matrix, type = "xbar.one", center = 37.3, std.dev = (38.5 -      36.1)/6, title = "Control Chart | __truncated__ ...
##  $ type      : chr "xbar.one"
##  $ data.name : chr "data_matrix"
##  $ data      : num [1:8, 1] 36.7 37.1 37.5 38.2 37.8 36.9 37 38.5
##   ..- attr(*, "dimnames")=List of 2
##  $ statistics: Named num [1:8] 36.7 37.1 37.5 38.2 37.8 36.9 37 38.5
##   ..- attr(*, "names")= chr [1:8] "1" "2" "3" "4" ...
##  $ sizes     : int [1:8] 1 1 1 1 1 1 1 1
##  $ center    : num 37.3
##  $ std.dev   : num 0.4
##  $ nsigmas   : num 3
##  $ limits    : num [1, 1:2] 36.1 38.5
##   ..- attr(*, "dimnames")=List of 2
##  $ violations:List of 2
##  - attr(*, "class")= chr "qcc"

Fishbone Diagram

# Load Library
library(DiagrammeR)
## Warning: package 'DiagrammeR' was built under R version 4.4.3
grViz("
digraph fishbone {
  graph [layout = dot, rankdir = LR]

  node [shape=plaintext, fontname = Helvetica]

  # Efek utama
  effect [label='Keterlambatan Pelayanan Pasien', fontsize=16, fontcolor=black]

  # Kategori utama
  Man       -> effect
  Method    -> effect
  Machine   -> effect
  Material  -> effect
  Measurement -> effect
  Environment -> effect

  # Sub-kategori
  Man1 -> Man; Man2 -> Man; Man3 -> Man
  Method1 -> Method; Method2 -> Method; Method3 -> Method
  Machine1 -> Machine; Machine2 -> Machine; Machine3 -> Machine
  Material1 -> Material; Material2 -> Material; Material3 -> Material
  Measurement1 -> Measurement; Measurement2 -> Measurement; Measurement3 -> Measurement
  Environment1 -> Environment; Environment2 -> Environment; Environment3 -> Environment

  # Label sub-kategori
  Man1 [label='Staf medis tidak cukup']
  Man2 [label='Perawat kurang terlatih']
  Man3 [label='Komunikasi antar petugas lambat']

  Method1 [label='Prosedur administrasi panjang']
  Method2 [label='Tidak ada sistem triase otomatis']
  Method3 [label='Jadwal dokter tidak sinkron']

  Machine1 [label='Komputer pendaftaran lambat']
  Machine2 [label='Alat medis rusak']
  Machine3 [label='Tidak ada sistem antrian digital']

  Material1 [label='Formulir manual habis']
  Material2 [label='Label pasien tidak tersedia']
  Material3 [label='Kekurangan perlengkapan medis']

  Measurement1 [label='Tidak ada monitoring waktu tunggu']
  Measurement2 [label='Indikator performa tidak tersedia']
  Measurement3 [label='Data pasien tidak di-update']

  Environment1 [label='Ruang tunggu sesak']
  Environment2 [label='Ventilasi buruk']
  Environment3 [label='Kebisingan menghambat komunikasi']
}
")

Flowchart

library(DiagrammeR)

grViz("
digraph RS_Flowchart {
  graph [layout = dot, rankdir = TB]

  node [shape = box, style = filled, fillcolor = grey, fontname = Helvetica]

  // Tahapan utama
  A [label = 'Pasien Datang']
  B [label = 'Pendaftaran']
  C [label = 'Pemeriksaan Awal']
  D [label = 'Pemeriksaan Dokter']
  E [label = 'Pemeriksaan Penunjang\\n(Lab, Radiologi, dll)']
  F [label = 'Diagnosis & Rencana Tindakan']
  DEC [label = 'Rawat Jalan atau Rawat Inap?', shape = diamond, fillcolor = lightblue]

  // Jalur rawat jalan
  G1 [label = 'Pemberian Obat / Resep']
  H1 [label = 'Evaluasi Akhir oleh Dokter']
  I1 [label = 'Administrasi & Pembayaran']
  
  // Jalur rawat inap
  G2 [label = 'Tindakan Medis / Terapi']
  H2 [label = 'Observasi / Rawat Inap']
  I2 [label = 'Evaluasi Akhir oleh Dokter']
  J2 [label = 'Administrasi & Pembayaran']
  
  // Tujuan akhir
  Z [label = 'Pasien Pulang / Keluar RS']

  // Alur utama ke keputusan
  A -> B -> C -> D -> E -> F -> DEC

  // Rawat jalan
  DEC -> G1 [label = 'Rawat Jalan']
  G1 -> H1 -> I1 -> Z

  // Rawat inap
  DEC -> G2 [label = 'Rawat Inap']
  G2 -> H2 -> I2 -> J2 -> Z
}
")

Histogram

# Simulasi data waktu tunggu pasien (dalam menit)
set.seed(123)  # agar hasil konsisten
waktu_tunggu <- round(rexp(10, rate = 1/5))  # rerata ~5 menit, 10 pasien

# Buat histogram waktu tunggu
hist(waktu_tunggu,
     main = "Histogram Waktu Tunggu Pasien di UGD",
     xlab = "Waktu Tunggu (menit)",
     ylab = "Jumlah Pasien",
     col = "grey",
     border = "white",
     breaks = 6)

# Tambahkan garis rata-rata
abline(v = mean(waktu_tunggu), col = "black", lwd = 2, lty = 2)
text(mean(waktu_tunggu), max(table(cut(waktu_tunggu, breaks = 6))) * 0.8,
     labels = paste("Rata-rata =", round(mean(waktu_tunggu), 1), "menit"),
     pos = 4, col = "black")

Pareto Chart

library(qcc)

# Data: penyakit dan frekuensinya
penyakit <- c("Demam", "Cedera", "Diare", "Asma", "Infeksi Saluran Pernapasan", "Hipertensi", "Nyeri Dada")
frekuensi <- c(25, 18, 10, 8, 7, 5, 4)

# Buat Pareto Chart dengan warna abu-abu
pareto.chart(frekuensi,
             names = penyakit,
             main = "Pareto Chart: Penyakit Paling Umum di UGD",
             ylab = "Frekuensi Kasus",
             col = rep("gray", length(frekuensi)))  # semua batang abu-abu

##    
## Pareto chart analysis for frekuensi
##      Frequency  Cum.Freq. Percentage Cum.Percent.
##   A  25.000000  25.000000  32.467532    32.467532
##   B  18.000000  43.000000  23.376623    55.844156
##   C  10.000000  53.000000  12.987013    68.831169
##   D   8.000000  61.000000  10.389610    79.220779
##   E   7.000000  68.000000   9.090909    88.311688
##   F   5.000000  73.000000   6.493506    94.805195
##   G   4.000000  77.000000   5.194805   100.000000

Scatter Diagram

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
# Data
waktu_pelayanan <- c(12, 18, 22, 27, 31, 36, 40, 44, 47, 50)
kepuasan_pasien <- c(9, 8, 7, 6, 6, 5, 4, 3, 2, 1)

# Buat data frame
data <- data.frame(WaktuPelayanan = waktu_pelayanan,
                   KepuasanPasien = kepuasan_pasien)

# Plot
ggplot(data, aes(x = WaktuPelayanan, y = KepuasanPasien)) +
  geom_point(color = "gray", size = 3) +
  labs(title = "Scatter Plot: Waktu Pelayanan vs Kepuasan Pasien",
       x = "Waktu Pelayanan (menit)",
       y = "Skor Kepuasan Pasien") +
  theme_minimal()