| 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 ~ 1)
km_fit
## Call: survfit(formula = surv_obj ~ 1)
##
## n events median 0.95LCL 0.95UCL
## [1,] 26 12 638 464 NA
Median survival time adalah 638 hari, yang berarti, 50% pasien mengalami kematian sebelum hari ke-638, dan, 50% sisanya masih hidup setelah hari ke-638.
dari interval kepercayaan 95% adalah 464 hari, yang berarti, 95% dapat dipercayai bahwa median survival minimal berada di angka ≥ 464 hari. Dengan kata lain, ketahanan hidup median pasien tidak mungkin lebih pendek dari 464 hari berdasarkan data.
plot(km_fit,
xlab = "Waktu (hari)",
ylab = "Probabilitas Survival",
main = "Kurva Kaplan-Meier",
conf.int = TRUE,
col = "blue",
lwd = 2)
abline(h = 0.5, lty = 2, col = "red")
Median survival ini adalah ukuran paling penting dalam survival
analysis. Penurunan pertama terjadi sekitar hari ke ~100-150 dari nilai
~1.0 ke ~0.9.
Penurunan yang lebih tajam terjadi antara hari ke ~300-500, di mana probabilitas survival turun dari ~0.8 ke ~0.5.
Setelah hari ~500, kurva relatif lebih landai menuju ~0.4 di akhir (~hari ke ~1000+).
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
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
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 estimasi model Cox Proportional Hazards memberikan informasi mengenai pengaruh setiap variabel terhadap risiko kematian pasien.
Koefisien model menunjukkan arah hubungan, sedangkan nilai exp(coef) mengindikasikan seberapa besar perubahan risiko yang ditimbulkan oleh masing-masing kovariat. Variabel age, resid.ds, rx, dan ecog.ps diuji secara simultan untuk mengetahui apakah faktor usia, sisa tumor setelah operasi, jenis terapi, serta kondisi fisik pasien berperan dalam meningkatkan atau menurunkan risiko kejadian.
Nilai p-value yang ditampilkan membantu menentukan apakah pengaruh masing-masing variabel signifikan secara statistik dalam memprediksi waktu ketahanan hidup.
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
Hazard Ratio (HR) mengukur seberapa besar perubahan risiko kematian yang terkait dengan setiap kovariat dalam model. Nilai HR > 1 menunjukkan bahwa variabel tersebut meningkatkan risiko kematian, sedangkan HR < 1 berarti variabel tersebut menurunkan risiko.
Interval kepercayaan 95% yang dihasilkan menjelaskan rentang nilai HR yang paling mungkin, sehingga membantu menilai kestabilan pengaruh variabel.
Melalui HR dan interval kepercayaannya, dapat diketahui apakah variabel seperti usia, ukuran sisa tumor, jenis terapi, atau kondisi fisik pasien memberikan dampak nyata terhadap probabilitas bertahan hidup.
# Uji asumsi proportional hazards
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
# Plot Schoenfeld residual
plot(ph_test,
var = 1:4,
main = "Plot Schoenfeld Residual – Uji Proportional Hazards")
Hasil dari Uji Schoenfeld Residuals menunjukkan bahwa asumsi
Proportional Hazards (PH) untuk model regresi Cox telah terpenuhi secara
kuat. Secara statistik, nilai p untuk setiap variabel prediktor (age,
resid.ds, rx, dan ecog.ps) dan untuk model secara keseluruhan (uji
GLOBAL) semuanya lebih besar dari 0.05 (pGLOBAL = 0.348$). Hal ini
mengindikasikan bahwa tidak ada bukti signifikan untuk menolak hipotesis
nol, yang menyatakan bahwa koefisien regresi adalah konstan seiring
waktu. Kesimpulan ini diperkuat oleh pemeriksaan visual dari plot
Schoenfeld Residuals, di mana garis halus yang mewakili tren koefisien
seiring waktu menunjukkan perilaku mendekati nol dan tetap berada di
dalam batas interval kepercayaan 95% sepanjang periode pengamatan,
menunjukkan stabilitas efek prediktor terhadap risiko bahaya. Oleh
karena itu, koefisien model Cox dapat diinterpretasikan sebagai ukuran
efek yang valid dan konstan 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)
Secara keseluruhan, pemeriksaan residual model Cox menunjukkan bahwa
model sudah pas dan bentuk hubungannya sudah benar. Plot Martingale
Residuals (terhadap Age dan resid.ds) meyakinkan karena titik-titik
tersebar acak di sekitar garis nol, artinya model sudah berhasil
menangkap hubungan prediktor dengan risiko bahaya (hazard). Kita tidak
perlu mengubah variabel ini ke bentuk non-linear. Namun, plot Deviance
Residuals menemukan beberapa data yang aneh atau ekstrem (outliers),
ditandai oleh nilai yang melewati batas \(\pm
2\) (sekitar Indeks 10 dan 22-23). Meskipun ada pencilan ini—yang
berarti prediksi model meleset untuk pasien tertentu—fakta bahwa
sebagian besar titik residual berkumpul di dekat nol menunjukkan bahwa
kemampuan prediksi model Anda masih memuaskan untuk sebagian besar
data.
# Survival prediksi untuk tiap kategori rx
newdata_rx <- data.frame(
age = mean(ovarian$age),
resid.ds = mean(ovarian$resid.ds),
ecog.ps = mean(ovarian$ecog.ps),
rx = c(1, 2)
)
cox_fit_rx <- survfit(cox_model, newdata = newdata_rx)
plot(cox_fit_rx,
col = c("blue", "red"),
lwd = 2,
xlab = "Waktu (hari)",
ylab = "Probabilitas Survival",
main = "Kurva Survival Terprediksi Berdasarkan Jenis Terapi (rx)")
legend("bottomleft",
legend = c("rx = 1", "rx = 2"),
col = c("blue", "red"),
lwd = 2)
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 terhadap data survival pasien kanker ovarium (total 26 observasi, 12 kejadian kematian) menggunakan model Regresi Cox Proportional Hazards telah berhasil mengidentifikasi faktor-faktor yang memengaruhi waktu ketahanan hidup pasien.
| Komponen | Deskripsi Penilaian Sesuai Isi Laporan | Poin |
|---|---|---|
| Eksplorasi & Deskriptif | Identifikasi dataset ovarian, statistik deskriptif, tabel event/sensoring | 20 |
| Analisis Kaplan–Meier | Estimasi KM, interpretasi median survival, kurva KM, dan uji Log-Rank | 20 |
| Model Cox Proportional Hazards | Pemodelan Cox (age, resid.ds, rx, ecog.ps), interpretasi koefisien & HR, CI | 25 |
| Uji Asumsi PH (Schoenfeld) | Uji cox.zph, grafik residual Schoenfeld, interpretasi asumsi terpenuhi | 15 |
| Residual Model | Martingale residual, deviance residual, identifikasi outlier & interpretasi | 10 |
| Kurva Survival Terprediksi | Prediksi survival berdasarkan rx & visualisasi | 5 |
| Laporan & Reproducibility | Struktur laporan rapi, bahasa ilmiah, kode dapat dijalankan tanpa error | 5 |
| Total | 100 |