No Nama NIM
1 Muhammad Dafiq Nur 16231036
2 Novi Dyah Ramadhani 16231042
3 Rivaldo Rumimpunu 16231053
4 Siti Nailya 16231054
5 Syifa Izzati Daryoto 16231056

Pendahuluan

Analisis survival merupakan metode statistik yang digunakan untuk mempelajari waktu hingga terjadinya suatu peristiwa penting, seperti kematian, kegagalan alat, atau munculnya suatu kondisi tertentu. Berbeda dengan analisis data biasa, analisis survival memiliki karakteristik khusus karena sering melibatkan data tersensor, yaitu kondisi ketika waktu kejadian tidak diketahui secara pasti. Dalam tugas ini, digunakan model Cox Proportional Hazards, salah satu metode paling populer dalam analisis survival karena mampu mengukur pengaruh variabel-variabel kovariat terhadap risiko terjadinya peristiwa tanpa harus menentukan bentuk distribusi waktu kegagalan. Melalui penerapan model ini pada dataset lung atau ovarian, tujuan tugas adalah untuk memahami faktor-faktor yang berkontribusi terhadap peningkatan atau penurunan risiko kejadian, serta mengevaluasi apakah asumsi-asumsi model Cox terpenuhi.

Eksplorasi & Deskriptif

Identifikasi Dataset

## Warning in data(ovarian): data set 'ovarian' not found
##   futime fustat     age resid.ds rx ecog.ps
## 1     59      1 72.3315        2  1       1
## 2    115      1 74.4932        2  1       1
## 3    156      1 66.4658        2  1       2
## 4    421      0 53.3644        2  2       1
## 5    431      1 50.3397        2  1       1
## 6    448      0 56.4301        1  1       2

Dataset ini berisi informasi mengenai waktu ketahanan hidup dari pasien kanker ovarium yang mengikuti sebuah penelitian klinis. Tujuan utama penelitian untuk melihat bagaimana beberapa faktor klinis memengaruhi risiko terjadinya suatu peristiwa, yaitu kematian pasien.

Terdiri dari 26 observasi (pasien) dan 6 variabel , yaitu:

  1. futime, adalah waktu ketahanan hidup pasien bertahan sejak awal penelitian sampai event atau hingga data tersensor dalam satuan hari

  2. fustat, adalah status kejadian. Dimana 1 menyimbolkan pasien mengalami event (meninggal) dan 0 menyimbolkan data tersensor (pasien masih hidup ketika penelitian berakhir)

  3. age, adalah usia pasien saat masuk penelitian dalam satuan tahun

  4. resid.ds, adalah tingkat residual disease yaitu ukuran sisa tumor setelah operasi, semakin besar nilainya maka kondisi penyakit lebih parah

  5. rx, adalah jenis pengobatan/terapi yang diterima pasien (variabel treatment untuk membandingkan efektivitas terapi tertentu)

  6. ecog.ps, adalah skor ECOG Performance Status yaitu ukuran kondisi fisik pasien. Dimana nilai rendah sebagai pasien masih aktif dan nilai tinggi sebagai pasien semakin lemah aktivitas fisiknya terbatas

Statistika Deskriptif

summary(ovarian)
##      futime           fustat            age           resid.ds    
##  Min.   :  59.0   Min.   :0.0000   Min.   :38.89   Min.   :1.000  
##  1st Qu.: 368.0   1st Qu.:0.0000   1st Qu.:50.17   1st Qu.:1.000  
##  Median : 476.0   Median :0.0000   Median :56.85   Median :2.000  
##  Mean   : 599.5   Mean   :0.4615   Mean   :56.17   Mean   :1.577  
##  3rd Qu.: 794.8   3rd Qu.:1.0000   3rd Qu.:62.38   3rd Qu.:2.000  
##  Max.   :1227.0   Max.   :1.0000   Max.   :74.50   Max.   :2.000  
##        rx         ecog.ps     
##  Min.   :1.0   Min.   :1.000  
##  1st Qu.:1.0   1st Qu.:1.000  
##  Median :1.5   Median :1.000  
##  Mean   :1.5   Mean   :1.462  
##  3rd Qu.:2.0   3rd Qu.:2.000  
##  Max.   :2.0   Max.   :2.000

Variabel futime berkisar dari 59 hingga 1.227 hari dengan median 476 hari menunjukkan setengah pasien mengalami kejadian atau sensor sebelum 1,3 tahun. fustat memiliki median 0, yang berarti sebagian besar observasi merupakan kejadian belum terjadi (data tersensor). age berada pada rentang 38,9 hingga 74,5 tahun dengan rata-rata sekitar 56 tahun. Status residu tumor (resid.ds) setelah operasi didominasi nilai 1–2 yang menunjukkan tingkat hasil operasi berbeda pada tiap pasien. Variabel perlakuan (rx) dan kondisi performa pasien (ecog.ps) juga dari 1 hingga 2.

Event dan Tersensor

table(ovarian$fustat)
## 
##  0  1 
## 14 12

Dari seluruh pasien terdapat 14 pasien yang tersensor (fustat = 0) dan 12 pasien yang mengalami event/meninggal (fustat = 1). Artinya, sedikit lebih banyak pasien yang masih hidup hingga akhir periode penelitian dibandingkan yang mengalami kejadian.

Analisis Kaplan-Meier

surv_obj <- Surv(time = ovarian$futime, event = ovarian$fustat)

km_fit <- survfit(surv_obj ~ rx, data = ovarian)
km_fit
## Call: survfit(formula = surv_obj ~ rx, data = ovarian)
## 
##       n events median 0.95LCL 0.95UCL
## rx=1 13      7    638     268      NA
## rx=2 13      5     NA     475      NA

Median survival pada kelompok rx=1 adalah 638 hari, yang berarti sekitar 50% pasien pada kelompok ini diperkirakan mengalami kematian sebelum hari ke-638, sementara sisanya bertahan hidup lebih lama. Interval kepercayaan 95% untuk median tersebut memiliki batas bawah 268 hari, sehingga median survival pasien dengan rx=1 diyakini tidak lebih pendek dari angka tersebut berdasarkan data. Untuk kelompok rx=2, median survival tidak terestimasi (NA) karena lebih dari 50% pasien masih bertahan hidup hingga akhir periode pengamatan. Namun, batas bawah interval kepercayaan 95% sebesar 475 hari menunjukkan bahwa ketahanan hidup median pada kelompok rx=2 setidaknya mencapai durasi tersebut. Temuan ini mengindikasikan bahwa kelompok rx=2 memiliki kecenderungan ketahanan hidup yang lebih baik dibandingkan rx=1, meskipun jumlah kejadian dan ukuran sampel relatif kecil.

Kurva

library(survival)
library(survminer)
## Loading required package: ggplot2
## Loading required package: ggpubr
## Warning: package 'ggpubr' was built under R version 4.3.3
## 
## Attaching package: 'survminer'
## The following object is masked from 'package:survival':
## 
##     myeloma
ggsurvplot(km_fit, data = ovarian, pval = TRUE, risk.table = TRUE,
surv.median.line = "hv",
title = "Kaplan–Meier Curve by Treatment (rx)")

Kurva Kaplan–Meier menunjukkan bahwa kelompok pasien dengan perlakuan rx=2 memiliki peluang bertahan hidup yang cenderung lebih tinggi dibandingkan kelompok rx=1 sepanjang waktu pengamatan. Meskipun demikian, perbedaan antara kedua kurva tidak signifikan secara statistik, ditunjukkan oleh nilai p = 0.3, sehingga secara data tidak ada bukti kuat bahwa jenis perlakuan memberikan pengaruh yang berbeda terhadap kelangsungan hidup.

Uji Log-Rank

logrank_test <- survdiff(Surv(futime, fustat) ~ rx, data = ovarian)
logrank_test
## Call:
## survdiff(formula = Surv(futime, fustat) ~ rx, data = ovarian)
## 
##       N Observed Expected (O-E)^2/E (O-E)^2/V
## rx=1 13        7     5.23     0.596      1.06
## rx=2 13        5     6.77     0.461      1.06
## 
##  Chisq= 1.1  on 1 degrees of freedom, p= 0.3

Hasil uji Log-Rank menunjukkan bahwa tidak terdapat perbedaan yang signifikan secara statistik antara kurva ketahanan hidup pada kelompok perlakuan rx=1 dan rx=2. Nilai chi-square sebesar 1.1 dengan derajat bebas 1 menghasilkan nilai p = 0.3, yang jauh di atas batas signifikansi umum (α = 0.05). Artinya, tidak ada bukti kuat bahwa jenis perlakuan (rx) memberikan perbedaan yang bermakna dalam probabilitas survival pasien.

Pemodelan Cox Proportional Hazards

Estimasi Model

cox_model <- coxph(Surv(futime, fustat) ~ age + resid.ds + rx + ecog.ps,
                   data = ovarian)

summary(cox_model)
## Call:
## coxph(formula = Surv(futime, fustat) ~ age + resid.ds + rx + 
##     ecog.ps, data = ovarian)
## 
##   n= 26, number of events= 12 
## 
##              coef exp(coef) se(coef)      z Pr(>|z|)   
## age       0.12481   1.13294  0.04689  2.662  0.00777 **
## resid.ds  0.82619   2.28459  0.78961  1.046  0.29541   
## rx       -0.91450   0.40072  0.65332 -1.400  0.16158   
## ecog.ps   0.33621   1.39964  0.64392  0.522  0.60158   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##          exp(coef) exp(-coef) lower .95 upper .95
## age         1.1329     0.8827    1.0335     1.242
## resid.ds    2.2846     0.4377    0.4861    10.738
## rx          0.4007     2.4955    0.1114     1.442
## ecog.ps     1.3996     0.7145    0.3962     4.945
## 
## Concordance= 0.807  (se = 0.068 )
## Likelihood ratio test= 17.04  on 4 df,   p=0.002
## Wald test            = 14.25  on 4 df,   p=0.007
## Score (logrank) test = 20.81  on 4 df,   p=3e-04

Hasil model Cox menunjukkan bahwa usia merupakan satu-satunya faktor yang berpengaruh signifikan terhadap risiko kematian (HR = 1.13, p = 0.0078), artinya risiko meningkat sekitar 13% tiap kenaikan satu tahun usia. Variabel lain seperti resid.ds, rx, dan ecog.ps tidak menunjukkan pengaruh signifikan. Model ini memiliki kinerja yang baik dengan nilai concordance 0.807.

Hazard Ratio

hr <- exp(coef(cox_model))
ci <- exp(confint(cox_model))

hr
##      age resid.ds       rx  ecog.ps 
## 1.132937 2.284590 0.400717 1.399635
ci
##              2.5 %    97.5 %
## age      1.0334572  1.241992
## resid.ds 0.4860602 10.738073
## rx       0.1113613  1.441919
## ecog.ps  0.3961928  4.944509

Hasil output menunjukkan bahwa Hazard Ratio (HR) menggambarkan seberapa besar sebuah variabel memengaruhi risiko kematian, sedangkan interval kepercayaan (CI) menunjukkan tingkat kepastian dari nilai HR tersebut. Pada hasil ini, usia memiliki HR 1.13 dengan CI yang tidak melewati 1, sehingga dapat dipastikan bahwa semakin tinggi usia, semakin meningkat pula risiko kematian. Sebaliknya, variabel resid.ds, rx, dan ecog.ps memiliki CI yang melewati angka 1, sehingga meskipun HR-nya ada yang >1 atau <1, pengaruhnya belum dapat dianggap pasti atau signifikan.

Uji Asumsi Proportional Hazards (Schoenfeld Test)

ph_test <- cox.zph(cox_model)
ph_test
##          chisq df     p
## age      0.170  1 0.680
## resid.ds 1.155  1 0.282
## rx       0.595  1 0.440
## ecog.ps  2.928  1 0.087
## GLOBAL   4.455  4 0.348
ggcoxzph(ph_test,
    font.main = 14,        # ukuran judul global
  font.x = 12,           # ukuran label sumbu X
  font.y = 12,           # ukuran label sumbu Y
  var.lab = TRUE,        # tampilkan label variabel
  ggtheme = theme_bw(),  # pakai tema putih bersih
  layout = c(1, 4)       # atur layout jadi 1 kolom 4 baris
  )

Hasil Uji Schoenfeld Residuals menunjukkan bahwa asumsi Proportional Hazards (PH) pada model Cox terpenuhi. Semua nilai p, baik untuk masing-masing variabel (age, resid.ds, rx, dan ecog.ps) maupun untuk uji global (p = 0.348), berada di atas 0.05 yang berarti tidak ada bukti bahwa koefisien regresi berubah seiring waktu. Pemeriksaan visual terhadap plot Schoenfeld memiliki garis tren berada dekat nol dan tetap di dalam batas interval kepercayaan. Koefisien dalam model Cox dapat dianggap stabil dan valid untuk diinterpretasikan sepanjang waktu.

Pemeriksaan Residual (Martingale & Deviance)

martingale_res <- residuals(cox_model, type = "martingale")

par(mfrow = c(1, 2))

plot(ovarian$age, martingale_res,
main = "Martingale Residual vs Age",
xlab = "Age",
ylab = "Martingale Residual",
pch = 19, col = "darkblue")

plot(ovarian$resid.ds, martingale_res,
main = "Martingale Residual vs Residual Disease",
xlab = "resid.ds",
ylab = "Martingale Residual",
pch = 19, col = "darkred")

dev_res <- residuals(cox_model, type = "deviance")

plot(dev_res,
main = "Deviance Residual",
ylab = "Deviance Residual",
pch = 19, col = "purple")
abline(h = 0, lty = 2)

Pemeriksaan residual pada model Cox menunjukkan bahwa model sudah sesuai dan bentuk hubungannya tepat. Plot Martingale Residuals (terhadap Age dan resid.ds) menampilkan sebaran titik yang acak di sekitar garis nol, menandakan bahwa hubungan antara variabel prediktor dan risiko bahaya telah tertangkap dengan baik tanpa indikasi kebutuhan transformasi non-linear. Sementara itu, plot Deviance Residuals mengidentifikasi beberapa pencilan (sekitar indeks 10 dan 22–23) dengan nilai melampaui batas ±2. Meski residual ekstrem ini menunjukkan adanya observasi yang kurang sesuai dengan model, sebagian besar titik berada dekat nol, sehingga kinerja prediksi model secara umum tetap memadai.

Kurva Survival Terprediksi

ggadjustedcurves(cox_model, data = ovarian, variable = "rx",
legend.title = "Sex",
title = "Adjusted Survival Curves by Treatment (rx)")

Kurva ini membandingkan seberapa besar kemungkinan pasien bisa bertahan hidup antara dua kelompok terapi, yaitu \(\text{rx}=1\) (garis biru) dan \(\text{rx}=2\) (garis merah), selama lebih dari seribu hari. Terlihat jelas bahwa pasien yang menerima terapi \(\text{rx}=2\) memiliki tingkat harapan hidup yang jauh lebih baik daripada pasien \(\text{rx}=1\). Sebagai contoh, setelah sekitar 600 hari, kelompok \(\text{rx}=2\) masih memiliki peluang bertahan hidup di atas 60%, sementara peluang untuk kelompok \(\text{rx}=1\) sudah turun drastis hingga di bawah 40%. Kesimpulannya, terapi \(\text{rx}=2\) tampak lebih efektif dan sangat disarankan karena berhubungan dengan risiko kematian yang lebih rendah dan masa hidup yang lebih panjang.

Kesimpulan

Analisis survival terhadap 26 pasien kanker ovarium (12 kejadian kematian) menggunakan model Regresi Cox Proportional Hazards memberikan beberapa temuan penting terkait faktor-faktor yang memengaruhi ketahanan hidup pasien.

  1. Kualitas dan Validitas Model
  1. Faktor Risiko Signifikan (Hazard Ratio)
  1. Implikasi Klinis Terapi (rx) WImplikasi Klinis Variabel Terapi (rx)