Pengantar Analisis Survival

1. Pengertian Sensoring

Sensoring dalam analisis survival adalah kondisi di mana pengamatan terhadap subjek berakhir sebelum kejadian yang ditunggu terjadi. Ini bukan berarti data hilang, melainkan kita hanya tahu bahwa waktu survival melebihi nilai tertentu pada akhir observasi.

Penyebab utama sensoring yaitu:

  • Kejadian belum terjadi pada subjek tersebut.
  • Rentang data observasi tidak sesuai atau berakhir lebih awal.

Sensoring membuat data tidak bisa dianalisis dengan statistik biasa seperti uji hipotesis, karena akan menyebabkan bias jika diabaikan. Analisis survival dirancang untuk menangani ini dengan tepat, sehingga estimasi probabilitas survival tetap akurat.

2. Alasan Pentingnya Mempelajari Analisis Survival

Metode statistik standar seperti regresi linier, ANOVA, atau uji hipotesis biasa tidak mampu menangani data yang mengandung sensoring dengan benar, jika sensoring diabaikan atau diperlakukan sebagai data hilang, hasil estimasi akan bias dan tidak akurat.

Oleh karena itu, analisis survival perlu dipelajari dan dikembangkan khusus untuk:

  1. Mengelola sensoring secara tepat sehingga estimasi tetap akurat

  2. Menjawab pertanyaan inti seperti:
    • Berapa lama rata-rata hingga kejadian terjadi?
    • Berapa persentase subjek yang masih belum mengalami kejadian pada waktu tertentu?
    • Faktor apa saja yang mempercepat atau memperlambat terjadinya kejadian?

Kemampuan ini membuat analisis survival menjadi alat penting di berbagai bidang, mulai dari kesehatan, bisnis, teknik, hingga analisis sumber daya manusia.

3. Waktu yang Tepat untuk Menggunakan Analisis Survival

Analisis survival adalah pilihan yang tepat ketika data memiliki tiga ciri utama berikut:

  1. Ada pengukuran durasi waktu dari titik mulai hingga terjadinya kejadian tertentu (time-to-event).
  2. Kejadian yang diamati bersifat biner: terjadi atau belum terjadi.
  3. Tidak semua subjek mengalami kejadian selama periode pengamatan (adanya sensoring).

Contoh kasus yang sangat cocok yaitu seperti:

  • Waktu hingga pasien sembuh, kambuh, atau meninggal.
  • Waktu hingga mesin atau komponen mengalami kerusakan.
  • Waktu hingga karyawan resign atau dipromosikan.

Sebaliknya, jika data hanya berupa nilai yang berubah sepanjang waktu tanpa konsep “kejadian iya/tidak” (misalnya harga saham harian, suhu bulanan, atau pendapatan perusahaan), maka metode time series lebih sesuai daripada analisis survival.

4. Penerapan Analisis Survival dalam Sains Data

Analisis survival banyak dimanfaatkan dalam berbagai domain sains data, antara lain:

  • Kesehatan: memprediksi kelangsungan hidup pasien kanker, waktu hingga kesembuhan penyakit, atau membandingkan efektivitas berbagai terapi.
  • Bisnis & Keuangan: memprediksi churn pelanggan, memperkirakan waktu gagal bayar kredit, serta menghitung customer lifetime value.
  • E-commerce & Marketing: menganalisis waktu hingga pembelian pertama, atau pembelian ulang.
  • Manajemen SDM: mempelajari retensi karyawan, faktor risiko turnover, serta waktu hingga promosi.
  • Industri & Teknik: predictive maintenance, yaitu memperkirakan kapan peralatan atau mesin kemungkinan besar akan rusak.

Di era saat ini, analisis survival sering diintegrasikan dengan machine learning, misalnya menggunakan model Cox dengan banyak prediktor, accelerated failure time model, atau bahkan pendekatan deep learning untuk data survival berskala besar.

5. Contoh Data Sensoring dengan R

Berikut contoh analisis survival menggunakan R untuk menunjukkan penanganan sensoring dan visualisasi dengan kurva Kaplan-Meier, yaitu visualisasi paling umum dan penting dalam analisis survival. Kurva Kaplan-Meier adalah estimator non-parametrik populer untuk menghitung probabilitas survival (proporsi subjek yang belum mengalami kejadian) sepanjang waktu. Kurva berbentuk tangga, turun hanya saat kejadian terjadi, menangani sensoring dengan tepat (ditandai ‘+’ tanpa asumsi kejadian setelahnya), dan bebas asumsi distribusi. Sehingga, sangat cocok untuk data time-to-event dengan sensoring seperti pada contoh ini.

Secara keseluruhan, kode ini tentang mengolah data sederhana berisi 10 pasien (time-to-event data), di mana:

  • Ada waktu observasi (dalam bulan),
  • Ada kejadian (sembuh = 1, atau belum sembuh = 0),

Beberapa pasien disensor (misalnya di bulan ke-24 karena studi berakhir, jadi kita mengetahui mereka bertahan minimal 24 bulan tapi tidak mengetahui kapan waktu pasti sembuhnya).

Tujuannya:

  • Menghitung dan menampilkan probabilitas survival (proporsi pasien yang belum sembuh seiring waktu).
  • Menunjukkan secara visual bagaimana sensoring memengaruhi analisis (tanda + pada kurva).
  • Membandingkan survival antar kelompok (A vs B) sebagai ilustrasi.
knitr::opts_chunk$set(echo = TRUE, warning = TRUE, message = TRUE)

library(survival)    
library(survminer)  
## Loading required package: ggplot2
## Loading required package: ggpubr
## 
## Attaching package: 'survminer'
## The following object is masked from 'package:survival':
## 
##     myeloma
# Data contoh: 10 pasien, waktu dalam bulan
df <- data.frame(
  ID       = 1:10,
  Waktu    = c(8, 12, 24, 15, 24, 6, 18, 24, 10, 24),
  Event    = c(1,  1,  0,  1,  0,  1,  1,  0,  1,  0),
  Kelompok = c("A", "A", "B", "A", "B", "A", "B", "A", "B", "A")
)
# Objek Surv
surv_obj <- Surv(time = df$Waktu, event = df$Event)

# Kaplan-Meier keseluruhan
km_overall <- survfit(surv_obj ~ 1, data = df)

# Ringkasan hasil di console
summary(km_overall)
## Call: survfit(formula = surv_obj ~ 1, data = df)
## 
##  time n.risk n.event survival std.err lower 95% CI upper 95% CI
##     6     10       1      0.9  0.0949        0.732        1.000
##     8      9       1      0.8  0.1265        0.587        1.000
##    10      8       1      0.7  0.1449        0.467        1.000
##    12      7       1      0.6  0.1549        0.362        0.995
##    15      6       1      0.5  0.1581        0.269        0.929
##    18      5       1      0.4  0.1549        0.187        0.855
# Plot cantik keseluruhan (dibatasi sampai bulan 24)
ggsurvplot(km_overall,
           data = df,
           conf.int = TRUE,
           censor = TRUE, censor.shape = "+", censor.size = 4,
           risk.table = TRUE,
           risk.table.y.text = FALSE,  
           title = "Kurva Survival Kaplan-Meier (Keseluruhan)",
           xlab = "Waktu (bulan)",
           ylab = "Proporsi yang Belum Sembuh",
           palette = "maroon",
           legend = "none",
           font.title = c(16, "bold", "black"),
           font.x = 12, font.y = 12,
           xlim = c(0, 24),          
           break.time.by = 6)          
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the ggpubr package.
##   Please report the issue at <https://github.com/kassambara/ggpubr/issues>.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Ignoring unknown labels:
## • fill : "Strata"
## Ignoring unknown labels:
## • fill : "Strata"
## Ignoring unknown labels:
## • fill : "Strata"
## Ignoring unknown labels:
## • fill : "Strata"
## Ignoring unknown labels:
## • colour : "Strata"

# Kaplan-Meier per kelompok
km_group <- survfit(surv_obj ~ Kelompok, data = df)

# Ringkasan hasil per kelompok
summary(km_group)
## Call: survfit(formula = surv_obj ~ Kelompok, data = df)
## 
##                 Kelompok=A 
##  time n.risk n.event survival std.err lower 95% CI upper 95% CI
##     6      6       1    0.833   0.152        0.583            1
##     8      5       1    0.667   0.192        0.379            1
##    12      4       1    0.500   0.204        0.225            1
##    15      3       1    0.333   0.192        0.108            1
## 
##                 Kelompok=B 
##  time n.risk n.event survival std.err lower 95% CI upper 95% CI
##    10      4       1     0.75   0.217        0.426            1
##    18      3       1     0.50   0.250        0.188            1
# Plot cantik dengan perbandingan (dibatasi sampai bulan 24)
ggsurvplot(km_group,
           data = df,
           pval = TRUE,                    
           conf.int = TRUE,                
           risk.table = TRUE,
           censor = TRUE, censor.shape = "+", censor.size = 5,
           palette = c("#1F77B4", "#F781BF"),  # biru & pink
           title = "Kurva Survival Kaplan-Meier per Kelompok",
           subtitle = "Contoh Sensoring di bulan ke-24",
           xlab = "Waktu (bulan)",
           ylab = "Proporsi yang Belum Sembuh",
           legend.title = "Kelompok",
           legend.labs = c("A", "B"),
           add.median = TRUE,              
           median.line = "hv",             
           tables.theme = theme_cleantable(),
           xlim = c(0, 24),                
           break.time.by = 6)              
## Ignoring unknown labels:
## • colour : "Kelompok"

Berikut adalah interpretasi untuk kedua visualisasi diatas:

5.1 Interpretasi Kurva Kaplan-Meier Keseluruhan

Kurva Kaplan-Meier keseluruhan menunjukkan probabilitas survival (proporsi pasien yang belum sembuh) dari 10 pasien turun secara stepwise dari 1,00 hingga sekitar 0,35–0,40 pada bulan ke-24. Penurunan utama terjadi pada bulan 6–18, mengindikasikan sebagian besar pasien sembuh di periode tersebut (sekitar 60–65% mengalami kejadian). Confidence interval melebar di akhir karena jumlah pasien at risk menurun drastis (dari 10 menjadi 4 pada bulan 24). Risk table mengonfirmasi penurunan akibat kejadian dan sensoring. Hasil menunjukkan pengobatan cukup efektif secara umum.

5.2 Interpretasi Kurva Kaplan-Meier per Kelompok

Kurva per kelompok menunjukkan pola survival yang relatif serupa antara Kelompok A dan B. Kelompok A turun lebih cepat di awal (sembuh lebih dini), sementara Kelompok B lebih stabil di tengah. Pada bulan ke-24, kedua kurva mencapai probabilitas survival sekitar 0,30–0,35. Tanda censor (+) terlihat jelas pada bulan ke-24 pada kedua kurva. Uji log-rank menghasilkan p-value = 0,47 (> 0,05), sehingga tidak ada perbedaan survival yang signifikan secara statistik antar kelompok. Risk table menunjukkan penurunan pasien at risk (A: dari 6 menjadi 2; B: dari 4 menjadi 2 pada bulan 24). Confidence interval melebar di akhir karena sampel kecil dan sensoring.

Kesimpulan

Pengobatan efektif secara keseluruhan (mayoritas pasien sembuh dalam 24 bulan), tanpa perbedaan signifikan antar kelompok (p = 0,47). Sensoring pada bulan ke-24 ditangani dengan baik oleh metode Kaplan-Meier, sehingga estimasi tetap tidak bias. Namun, diperlukan sampel lebih besar untuk mendeteksi perbedaan kecil jika ada.