| 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 |
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.
## 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:
futime, adalah waktu ketahanan hidup pasien bertahan sejak awal penelitian sampai event atau hingga data tersensor dalam satuan hari
fustat, adalah status kejadian. Dimana 1 menyimbolkan pasien mengalami event (meninggal) dan 0 menyimbolkan data tersensor (pasien masih hidup ketika penelitian berakhir)
age, adalah usia pasien saat masuk penelitian dalam satuan tahun
resid.ds, adalah tingkat residual disease yaitu ukuran sisa tumor setelah operasi, semakin besar nilainya maka kondisi penyakit lebih parah
rx, adalah jenis pengobatan/terapi yang diterima pasien (variabel treatment untuk membandingkan efektivitas terapi tertentu)
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Asumsi Proportional Hazards terpenuhi, Uji Schoenfeld Residuals menunjukkan seluruh variabel, termasuk uji global, memiliki nilai p di atas 0.05 (\(p_{\text{GLOBAL}} = 0.348\)). Artinya, tidak ada bukti bahwa efek kovariat berubah terhadap waktu, sehingga model memenuhi asumsi dasar Cox.
Daya prediksi model baik, Nilai Concordance = 0.807, menunjukkan model mampu membedakan urutan waktu kejadian dengan akurasi sekitar 80%.
Pemeriksaan residual mendukung kesesuaian model. Plot Martingale Residuals menunjukkan hubungan prediktor sudah tepat (tidak tampak pola non-linear), sedangkan Deviance Residuals mengungkap beberapa pencilan (sekitar indeks 10 dan 22–23). Meskipun begitu, sebagian besar data berada dekat nilai nol, sehingga model tetap memadai.
Usia (Age) merupakan faktor risiko yang signifikan (p = 0.00777). Dengan HR = 1.1329 (HR > 1) dan interval kepercayaan yang tidak melintasi 1, hal ini menunjukkan bahwa setiap kenaikan usia 1 tahun meningkatkan risiko kematian sebesar 13.3%.
Variabel lain tidak signifikan: Variabel resid.ds, rx, dan ecog.ps semuanya memiliki p-value di atas 0.16. resid.ds dan ecog.ps memiliki HR > 1, namun CI-nya melintasi 1 → tidak signifikan. rx memiliki HR < 1, namun CI-nya juga melintasi 1 → tidak signifikan. Usia adalah satu-satunya kovariat yang secara statistik memengaruhi risiko kematian dalam model ini.
Meskipun rx tidak signifikan secara statistik, pola survival memberikan informasi klinis yang tetap relevan. Pasien dengan rx = 2 memiliki peluang hidup lebih tinggi dibandingkan rx = 1.
Pada sekitar hari ke-600, probabilitas survival. rx = 2 masih > 60%. rx = 1 turun menjadi < 40%. Perbedaan visual ini menunjukkan bahwa terapi rx = 2 berpotensi memberikan manfaat klinis yang lebih baik dan dapat dipertimbangkan untuk penelitian lanjutan, meskipun belum terbukti signifikan secara statistik pada dataset kecil ini.