Analisis survival (survival analysis) adalah seperangkat metode untuk menganalisis data di mana variabel respon adalah waktu sampai terjadinya suatu peristiwa tertentu. Peristiwa dapat berupa kematian, timbulnya penyakit, perkawinan, perceraian, dll. Waktu survival dapat diukur dalam hitungan hari, minggu, tahun, dll. Misalnya, jika peristiwa tersebut adalah serangan jantung maka waktu survival bisa dinyatakan dalam hitungan tahun sampai seseorang terkena serangan jantung.
Dalam studi kanker misalnya, pertanyaan penelitian tipikal adalah seperti:
Apa dampak dari karakteristik klinis tertentu pada kelangsungan hidup pasien?
Berapa probabilitas seseorang bertahan selama 3 tahun?
Apakah ada perbedaan dalam kelangsungan hidup antara kelompok pasien?
Dalam analisis survival, subjek biasanya diamati dalam periode waktu tertentu dan fokusnya adalah pada waktu ketika peristiwa terjadi.Mengapa tidak menggunakan regresi linier untuk memodelkan waktu survive sebagai fungsi dari satu set variabel prediktor? Pertama, Waktu bertahan hidup biasanya merupakan angka positif; regresi linier biasa bukan pilihan terbaik kecuali data waktu ditransformasikan sedemikian rupa sehingga menghilangkan batasan ini. Kedua, regresi linier biasa tidak dapat secara efektif menangani data sensor.
Pengamatan disebut tersensor ketika informasi tentang waktu survival mereka tidak lengkap. Bentuk yang paling sering ditemukan adalah data tersensor-kanan (right-censored), yang mungkin terjadi pada salah satu keadaan berikut:
Pada saat studi berakhir subjek belum mengalami kegagalan.
Subjek mengundurkan diri dari penelitian dan tidak dapat diamati lebih lanjut (lost to follow-up; withdrawal).Subjek mengalami kegagalan lain yang menyebabkan pengamatan tidak dapat diteruskan (competing risk).
Subjek disebut tersensor-kiri (left-censored) jika kegagalan telah terjadi sebelum subjek memasuki studi, tetapi tidak diketahui secara tepat saat terjadinya. Berikut akan diuraikan mengenai sensoring-kanan, karena bentuk sensoring ini yang paling sering ditemukan dalam analisis survival.Ketiga bentuk tersensor-kanan diperlihatkan pada gambar berikut, yang menyajikan hasil pengamatan terhadap 12 subjek selama 6 tahun penelitian:
TERSENSOR
Sumber dari kompasiana
Tidak seperti model regresi biasa, metode survival menggabungkan informasi dari pengamatan yang disensor maupun yang tidak disensor dalam memperkirakan parameter model. Variabel dependen dalam analisis survival terdiri atas dua bagian: lama waktu untuk terjadinya peristiwa dan status peristiwa, yang mencatat apakah peristiwa terjadi atau tidak. Variabel dependen pertama (waktu) akan menghasilkan dua fungsi yang bergantung pada waktu, yaitu fungsi survival dan hazard.
Fungsi survival dan hazard adalah konsep kunci dalam analisis survival untuk menggambarkan distribusi waktu kejadian. Fungsi survival memberikan probabilitas selamat (tidak mengalami peristiwa) untuk setiap waktu hingga saat itu. Fungsi hazard memberikan probabilitas terjadinya peristiwa, per unit waktu, mengingat bahwa individu telah bertahan hingga waktu yang ditentukan. Meskipun dua fungsi tersebut paling sering dibutuhkan, banyak penghitungan lainnya (mis., median survival) yang dapat diperkirakan setelah mendapatkan fungsi survival dan hazard. Adalah hal yang umum untuk menggambarkan hubungan antar faktor (misalnya pengobatan) dengan waktu kejadian, di hadapan beberapa kovariat, seperti usia, jenis kelamin, ras, dll. Sejumlah model tersedia untuk menganalisis hubungan satu set variabel prediktor dengan waktu survival, yaitu model dengan pendekatan parametrik, nonparametrik, dan semiparametrik. Metode parametrik mengasumsikan bahwa distribusi waktu survival mengikuti distribusi probabilitas tertentu yang diketahui. Yang populer yaitu distribusi eksponensial, Weibull, dan lognormal. Parameter model biasanya diperkirakan menggunakan modifikasi maximum likelihood.
Estimator nonparametrik dari fungsi survival, metode Kaplan Meier, banyak digunakan untuk memperkirakan dan membuat grafik probabilitas survival sebagai fungsi dari waktu. Ini dapat digunakan untuk memperoleh statistik deskriptif univariat untuk data survival, termasuk rata-rata waktu survival, dan membandingkan pengalaman survival untuk dua atau lebih kelompok subjek. Untuk menguji perbedaan keseluruhan antara perkiraan kurva harapan hidup dari dua atau lebih kelompok subjek, seperti laki-laki versus perempuan, atau kelompok perlakuan dibandingkan kelompok yang tidak dikontrol, tersedia beberapa tes termasuk tes log-rank. Tes ini kelihatannya seperti jenis uji chi-square padahal pada kenyataannya adalah metode untuk membandingkan kurva Kaplan-Meier yang untuk setiap kelompok subjek.
Model regresi yang populer untuk analisis survival adalah Cox proportional hazards regression model. Model ini memungkinkan pengujian untuk melihat perbedaan waktu survival dari dua atau lebih kelompok kepentingan, dan dapat mendeskripsikan efek dari kovariat terhadap daya tahan hidup. Model regresi Cox adalah model semiparametrik, asumsinya lebih sedikit daripada metode parametrik tetapi lebih banyak daripada metode nonparametrik. Dan berbeda dengan model parametrik, ia tidak membutuhkan asumsi bentuk yang disebut fungsi baseline hazard. Model regresi Cox memberikan informasi penting dan mudah untuk diinterpretasikan mengenai hubungan fungsi hazard dengan prediktor. Sementara hubungan nonlinear antara fungsi hazard dan prediktor diasumsikan, rasio hazard membandingkan dua pengamatan yang sebenarnya konstan dari waktu ke waktu di mana variabel prediktor tidak bervariasi dari waktu ke waktu. Asumsi ini disebut asumsi proportional hazards dan pemeriksaan apakah asumsi ini terpenuhi adalah bagian penting dari analisis regresi Cox. Regresi Cox sejauh ini adalah model yang paling populer untuk analisis data survival dan telah diimplementasikan dalam sejumlah besar paket perangkat lunak statistik, termasuk SAS, STATA, SPSS, dan R.
Penjelasan di atas mencakup metode paling sederhana dan paling umum digunakan untuk menganalisis data survival yang tersensor kanan. Terdapat metode analisis lain, termasuk metode yang menangani berbagai jenis sensor dan variabel prediktor waktu yang bervariasi. Selanjutnya kita langsung eskplorasi bagaimana Analisis Survival itu.
#install.packages(c("survival", "survminer")) #install cukup sekali
library("survminer")
require("survival")
## Loading required package: ggplot2
## Loading required package: ggpubr
## Loading required package: magrittr
## Loading required package: survival
package survivaldata(package="survival")
lung dan kita lihat datanyaData lung adalah data kanker paru paru yang dimiliki oleh Data Kanker Paru The North Central Cancer Treatment Group
data("lung")
head(lung)
## inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss
## 1 3 306 2 74 1 1 90 100 1175 NA
## 2 3 455 2 68 1 0 90 90 1225 15
## 3 3 1010 1 56 1 0 90 90 NA 15
## 4 5 210 2 57 1 1 90 60 1150 11
## 5 1 883 2 60 1 0 100 90 NA 0
## 6 12 1022 1 74 1 1 50 80 513 0
Penjelasan variabel dalam dataset :
Inst : kode institusi
Time : waktu survival dalam satuan hari
Status : status penyensoran (1 = tersensor, 2 = meninggal)
Age : usia pasien dalam satuan tahun
Sex : jenis kelamin (1 = laki-laki, 2 = perempuan)
Ph.ecog : skala yang digunakan dokter untuk mengetahui level kondisi pasien (0 = baik, 5 = meninggal)
Ph.karno : skala karnofsky yang dinilai dari dokter (0= buruk,100=baik)
Pat.karno : skala karnofsky dari pasien
Meal.cal : banyak kalori yang dikonsumsi
Wt.loss : banyak berat badan yang berkurang dalam kurun waktu 6 bulan terakhir
sex
Untuk menjawab kasus ini kita akan menggunakan fungsi survfit() dalam package survival untuk menghitung estimasi lalu memvisualisasikannya menggunakan fungsi ggsurvplot() yang terdapat dalam package survminer. (kita akan mengestimasi berdasarkan gender)
fit <- survfit(Surv(time, status) ~ sex, data = lung)
ggsurvplot(fit,
pval = TRUE, # Menampilkan p-value uji log rank
conf.int = TRUE, # Menampilkan interval konfidensi
risk.table = TRUE, # Menampilkan tabel risiko
legend.labs = c("Male", "Female"), # Mengubah legend
risk.table.col = "strata", # Mengubah warna tabel
linetype = "strata", # Mengubah tipe garis
ggtheme = theme_bw(), # Mengubah tema ggplot2
palette = c("#E7B800", "#2E9FDF")) # Mengubah warna kurva
## Warning: Vectorized input to `element_text()` is not officially supported.
## Results may be unexpected or may change in future versions of ggplot2.
Selanjutnya kita gunakan Syntax print() menampilkan ringkasan dari perhitungan kurva survival :
print(fit)
## Call: survfit(formula = Surv(time, status) ~ sex, data = lung)
##
## n events median 0.95LCL 0.95UCL
## sex=1 138 112 270 212 310
## sex=2 90 53 426 348 550
Namun apabila kita ingin output yang lebih lengkap maka bisa menggunakan syntax berikut :
summary(fit)
## Call: survfit(formula = Surv(time, status) ~ sex, data = lung)
##
## sex=1
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 11 138 3 0.9783 0.0124 0.9542 1.000
## 12 135 1 0.9710 0.0143 0.9434 0.999
## 13 134 2 0.9565 0.0174 0.9231 0.991
## 15 132 1 0.9493 0.0187 0.9134 0.987
## 26 131 1 0.9420 0.0199 0.9038 0.982
## 30 130 1 0.9348 0.0210 0.8945 0.977
## 31 129 1 0.9275 0.0221 0.8853 0.972
## 53 128 2 0.9130 0.0240 0.8672 0.961
## 54 126 1 0.9058 0.0249 0.8583 0.956
## 59 125 1 0.8986 0.0257 0.8496 0.950
## 60 124 1 0.8913 0.0265 0.8409 0.945
## 65 123 2 0.8768 0.0280 0.8237 0.933
## 71 121 1 0.8696 0.0287 0.8152 0.928
## 81 120 1 0.8623 0.0293 0.8067 0.922
## 88 119 2 0.8478 0.0306 0.7900 0.910
## 92 117 1 0.8406 0.0312 0.7817 0.904
## 93 116 1 0.8333 0.0317 0.7734 0.898
## 95 115 1 0.8261 0.0323 0.7652 0.892
## 105 114 1 0.8188 0.0328 0.7570 0.886
## 107 113 1 0.8116 0.0333 0.7489 0.880
## 110 112 1 0.8043 0.0338 0.7408 0.873
## 116 111 1 0.7971 0.0342 0.7328 0.867
## 118 110 1 0.7899 0.0347 0.7247 0.861
## 131 109 1 0.7826 0.0351 0.7167 0.855
## 132 108 2 0.7681 0.0359 0.7008 0.842
## 135 106 1 0.7609 0.0363 0.6929 0.835
## 142 105 1 0.7536 0.0367 0.6851 0.829
## 144 104 1 0.7464 0.0370 0.6772 0.823
## 147 103 1 0.7391 0.0374 0.6694 0.816
## 156 102 2 0.7246 0.0380 0.6538 0.803
## 163 100 3 0.7029 0.0389 0.6306 0.783
## 166 97 1 0.6957 0.0392 0.6230 0.777
## 170 96 1 0.6884 0.0394 0.6153 0.770
## 175 94 1 0.6811 0.0397 0.6076 0.763
## 176 93 1 0.6738 0.0399 0.5999 0.757
## 177 92 1 0.6664 0.0402 0.5922 0.750
## 179 91 2 0.6518 0.0406 0.5769 0.736
## 180 89 1 0.6445 0.0408 0.5693 0.730
## 181 88 2 0.6298 0.0412 0.5541 0.716
## 183 86 1 0.6225 0.0413 0.5466 0.709
## 189 83 1 0.6150 0.0415 0.5388 0.702
## 197 80 1 0.6073 0.0417 0.5309 0.695
## 202 78 1 0.5995 0.0419 0.5228 0.687
## 207 77 1 0.5917 0.0420 0.5148 0.680
## 210 76 1 0.5839 0.0422 0.5068 0.673
## 212 75 1 0.5762 0.0424 0.4988 0.665
## 218 74 1 0.5684 0.0425 0.4909 0.658
## 222 72 1 0.5605 0.0426 0.4829 0.651
## 223 70 1 0.5525 0.0428 0.4747 0.643
## 229 67 1 0.5442 0.0429 0.4663 0.635
## 230 66 1 0.5360 0.0431 0.4579 0.627
## 239 64 1 0.5276 0.0432 0.4494 0.619
## 246 63 1 0.5192 0.0433 0.4409 0.611
## 267 61 1 0.5107 0.0434 0.4323 0.603
## 269 60 1 0.5022 0.0435 0.4238 0.595
## 270 59 1 0.4937 0.0436 0.4152 0.587
## 283 57 1 0.4850 0.0437 0.4065 0.579
## 284 56 1 0.4764 0.0438 0.3979 0.570
## 285 54 1 0.4676 0.0438 0.3891 0.562
## 286 53 1 0.4587 0.0439 0.3803 0.553
## 288 52 1 0.4499 0.0439 0.3716 0.545
## 291 51 1 0.4411 0.0439 0.3629 0.536
## 301 48 1 0.4319 0.0440 0.3538 0.527
## 303 46 1 0.4225 0.0440 0.3445 0.518
## 306 44 1 0.4129 0.0440 0.3350 0.509
## 310 43 1 0.4033 0.0441 0.3256 0.500
## 320 42 1 0.3937 0.0440 0.3162 0.490
## 329 41 1 0.3841 0.0440 0.3069 0.481
## 337 40 1 0.3745 0.0439 0.2976 0.471
## 353 39 2 0.3553 0.0437 0.2791 0.452
## 363 37 1 0.3457 0.0436 0.2700 0.443
## 364 36 1 0.3361 0.0434 0.2609 0.433
## 371 35 1 0.3265 0.0432 0.2519 0.423
## 387 34 1 0.3169 0.0430 0.2429 0.413
## 390 33 1 0.3073 0.0428 0.2339 0.404
## 394 32 1 0.2977 0.0425 0.2250 0.394
## 428 29 1 0.2874 0.0423 0.2155 0.383
## 429 28 1 0.2771 0.0420 0.2060 0.373
## 442 27 1 0.2669 0.0417 0.1965 0.362
## 455 25 1 0.2562 0.0413 0.1868 0.351
## 457 24 1 0.2455 0.0410 0.1770 0.341
## 460 22 1 0.2344 0.0406 0.1669 0.329
## 477 21 1 0.2232 0.0402 0.1569 0.318
## 519 20 1 0.2121 0.0397 0.1469 0.306
## 524 19 1 0.2009 0.0391 0.1371 0.294
## 533 18 1 0.1897 0.0385 0.1275 0.282
## 558 17 1 0.1786 0.0378 0.1179 0.270
## 567 16 1 0.1674 0.0371 0.1085 0.258
## 574 15 1 0.1562 0.0362 0.0992 0.246
## 583 14 1 0.1451 0.0353 0.0900 0.234
## 613 13 1 0.1339 0.0343 0.0810 0.221
## 624 12 1 0.1228 0.0332 0.0722 0.209
## 643 11 1 0.1116 0.0320 0.0636 0.196
## 655 10 1 0.1004 0.0307 0.0552 0.183
## 689 9 1 0.0893 0.0293 0.0470 0.170
## 707 8 1 0.0781 0.0276 0.0390 0.156
## 791 7 1 0.0670 0.0259 0.0314 0.143
## 814 5 1 0.0536 0.0239 0.0223 0.128
## 883 3 1 0.0357 0.0216 0.0109 0.117
##
## sex=2
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 5 90 1 0.9889 0.0110 0.9675 1.000
## 60 89 1 0.9778 0.0155 0.9478 1.000
## 61 88 1 0.9667 0.0189 0.9303 1.000
## 62 87 1 0.9556 0.0217 0.9139 0.999
## 79 86 1 0.9444 0.0241 0.8983 0.993
## 81 85 1 0.9333 0.0263 0.8832 0.986
## 95 83 1 0.9221 0.0283 0.8683 0.979
## 107 81 1 0.9107 0.0301 0.8535 0.972
## 122 80 1 0.8993 0.0318 0.8390 0.964
## 145 79 2 0.8766 0.0349 0.8108 0.948
## 153 77 1 0.8652 0.0362 0.7970 0.939
## 166 76 1 0.8538 0.0375 0.7834 0.931
## 167 75 1 0.8424 0.0387 0.7699 0.922
## 182 71 1 0.8305 0.0399 0.7559 0.913
## 186 70 1 0.8187 0.0411 0.7420 0.903
## 194 68 1 0.8066 0.0422 0.7280 0.894
## 199 67 1 0.7946 0.0432 0.7142 0.884
## 201 66 2 0.7705 0.0452 0.6869 0.864
## 208 62 1 0.7581 0.0461 0.6729 0.854
## 226 59 1 0.7452 0.0471 0.6584 0.843
## 239 57 1 0.7322 0.0480 0.6438 0.833
## 245 54 1 0.7186 0.0490 0.6287 0.821
## 268 51 1 0.7045 0.0501 0.6129 0.810
## 285 47 1 0.6895 0.0512 0.5962 0.798
## 293 45 1 0.6742 0.0523 0.5791 0.785
## 305 43 1 0.6585 0.0534 0.5618 0.772
## 310 42 1 0.6428 0.0544 0.5447 0.759
## 340 39 1 0.6264 0.0554 0.5267 0.745
## 345 38 1 0.6099 0.0563 0.5089 0.731
## 348 37 1 0.5934 0.0572 0.4913 0.717
## 350 36 1 0.5769 0.0579 0.4739 0.702
## 351 35 1 0.5604 0.0586 0.4566 0.688
## 361 33 1 0.5434 0.0592 0.4390 0.673
## 363 32 1 0.5265 0.0597 0.4215 0.658
## 371 30 1 0.5089 0.0603 0.4035 0.642
## 426 26 1 0.4893 0.0610 0.3832 0.625
## 433 25 1 0.4698 0.0617 0.3632 0.608
## 444 24 1 0.4502 0.0621 0.3435 0.590
## 450 23 1 0.4306 0.0624 0.3241 0.572
## 473 22 1 0.4110 0.0626 0.3050 0.554
## 520 19 1 0.3894 0.0629 0.2837 0.534
## 524 18 1 0.3678 0.0630 0.2628 0.515
## 550 15 1 0.3433 0.0634 0.2390 0.493
## 641 11 1 0.3121 0.0649 0.2076 0.469
## 654 10 1 0.2808 0.0655 0.1778 0.443
## 687 9 1 0.2496 0.0652 0.1496 0.417
## 705 8 1 0.2184 0.0641 0.1229 0.388
## 728 7 1 0.1872 0.0621 0.0978 0.359
## 731 6 1 0.1560 0.0590 0.0743 0.328
## 735 5 1 0.1248 0.0549 0.0527 0.295
## 765 3 1 0.0832 0.0499 0.0257 0.270
atau
summary(fit)$table
## records n.max n.start events *rmean *se(rmean) median 0.95LCL 0.95UCL
## sex=1 138 138 138 112 325.0663 22.59845 270 212 310
## sex=2 90 90 90 53 458.2757 33.78530 426 348 550
Kita dapat melihat pada hasil analisis bahwa banyaknya n pada jenis kelamin laki-laki yaitu sebanyak 138, sedangkan perempuan sebanyak 90 pasien. Selanjutnya yaitu banyaknya pasien meninggal dari masing-masing jenis kelamin yaitu 112 dan 90 pasien. Selain menampilkan banyak n dan event, output juga menampilkan median serta interval konfidensi.
Pada Visualisasi data diatas juga diketahui bahwa p-value uji log rank sebesar \(p(0.0013)<α(0.05)\) oleh karena itu berarti tolak H0 dan dapat disimpulkan bahwa terdapat perbedaan yang signifikan pada fungsi survival kedua jenis kelamin. Untuk mengetahui apakah terdapat perbedaan antara jenis kelamin terhadap fungsi survival maka menggunakan uji log rank.
Apabila kita hanya ingin melakukan uji log rank tanpa visualisasi kaplan meier juga bisa loh yaitu dengan menggunakan fungsi survdiff() pada package survival. Sebagai contoh yaitu syntax berikut untuk uji log rank berdasarkan jenis kelamin :
surv_diff <- survdiff(Surv(time, status) ~ sex, data = lung)
surv_diff
## Call:
## survdiff(formula = Surv(time, status) ~ sex, data = lung)
##
## N Observed Expected (O-E)^2/E (O-E)^2/V
## sex=1 138 112 91.6 4.55 10.3
## sex=2 90 53 73.4 5.68 10.3
##
## Chisq= 10.3 on 1 degrees of freedom, p= 0.001
Sama halnya dengan penjelasan sebelumnya didapatkan kesimpulan bahwa terdapat perbedaan yang signifikan pada fungsi survival kedua jenis kelamin karena didapatkan hasil \(pvalue(0.001)<α(0.05)\).
Kurva \(h(t)\) tidak harus dimulai dari satu dan bergerak menuju nol, tetapi kurva \(h(t)\) dapat dimulai dari nilai berapapun dengan syarat \(h(t)???0\) dan dapat bergerak ke atas maupun ke bawah terhadap waktu \(t\).
ggsurvplot(fit,
conf.int = TRUE,
legend.labs = c("Male", "Female"), # Mengubah legend
ggtheme = theme_bw(), # Mengubah tema ggplot2
palette = c("#E7B800", "#2E9FDF"), # Mengubah warna kurva
fun = "cumhaz") # Memanggil hazard kumulatif
ageggsurvplot(survfit(Surv(time, status)~age, data=lung))
Mari kita dapatkan usia rata-rata dalam dataset, dan plot histogram yang menunjukkan distribusi usia.
mean(lung$age)
## [1] 62.44737
hist(lung$age)
ggplot(lung, aes(age)) + geom_histogram(bins=20)
Sekarang, mari kita coba membuat variabel kategori lung$age dengan cut pounts pada 0, 62 (rata-rata), dan + Infinity (tanpa batas atas). Kita dapat terus menambahkan labels= opsi di sini untuk memberi label pada pengelompokan yang kita buat, misalnya, “muda” dan “tua”. Setelahnya, kita bisa menetapkan hasil ini ke objek baru di dataset paru.
cut(lung$age, breaks=c(0, 62, Inf))
## [1] (62,Inf] (62,Inf] (0,62] (0,62] (0,62] (62,Inf] (62,Inf] (62,Inf]
## [9] (0,62] (0,62] (0,62] (62,Inf] (62,Inf] (0,62] (0,62] (62,Inf]
## [17] (62,Inf] (62,Inf] (0,62] (0,62] (62,Inf] (0,62] (0,62] (0,62]
## [25] (62,Inf] (62,Inf] (0,62] (62,Inf] (0,62] (62,Inf] (62,Inf] (62,Inf]
## [33] (0,62] (0,62] (0,62] (0,62] (62,Inf] (62,Inf] (62,Inf] (62,Inf]
## [41] (62,Inf] (62,Inf] (0,62] (0,62] (62,Inf] (62,Inf] (62,Inf] (62,Inf]
## [49] (62,Inf] (0,62] (62,Inf] (62,Inf] (62,Inf] (0,62] (0,62] (0,62]
## [57] (62,Inf] (0,62] (0,62] (62,Inf] (62,Inf] (0,62] (62,Inf] (62,Inf]
## [65] (62,Inf] (62,Inf] (62,Inf] (62,Inf] (62,Inf] (62,Inf] (62,Inf] (0,62]
## [73] (62,Inf] (0,62] (0,62] (62,Inf] (0,62] (0,62] (62,Inf] (62,Inf]
## [81] (0,62] (0,62] (0,62] (0,62] (0,62] (62,Inf] (0,62] (0,62]
## [89] (0,62] (62,Inf] (62,Inf] (62,Inf] (62,Inf] (0,62] (62,Inf] (62,Inf]
## [97] (62,Inf] (62,Inf] (62,Inf] (62,Inf] (0,62] (62,Inf] (0,62] (62,Inf]
## [105] (0,62] (62,Inf] (0,62] (62,Inf] (0,62] (62,Inf] (62,Inf] (0,62]
## [113] (62,Inf] (62,Inf] (0,62] (62,Inf] (0,62] (62,Inf] (62,Inf] (62,Inf]
## [121] (62,Inf] (0,62] (62,Inf] (62,Inf] (62,Inf] (62,Inf] (0,62] (62,Inf]
## [129] (62,Inf] (0,62] (0,62] (0,62] (0,62] (0,62] (62,Inf] (62,Inf]
## [137] (0,62] (0,62] (0,62] (0,62] (62,Inf] (62,Inf] (62,Inf] (62,Inf]
## [145] (0,62] (0,62] (62,Inf] (0,62] (62,Inf] (0,62] (62,Inf] (0,62]
## [153] (0,62] (0,62] (0,62] (62,Inf] (62,Inf] (0,62] (62,Inf] (0,62]
## [161] (0,62] (0,62] (62,Inf] (62,Inf] (62,Inf] (0,62] (0,62] (0,62]
## [169] (0,62] (62,Inf] (0,62] (0,62] (0,62] (0,62] (0,62] (0,62]
## [177] (0,62] (0,62] (0,62] (62,Inf] (0,62] (0,62] (62,Inf] (62,Inf]
## [185] (0,62] (0,62] (62,Inf] (0,62] (62,Inf] (0,62] (62,Inf] (0,62]
## [193] (0,62] (62,Inf] (62,Inf] (62,Inf] (62,Inf] (62,Inf] (0,62] (0,62]
## [201] (62,Inf] (62,Inf] (62,Inf] (0,62] (62,Inf] (0,62] (0,62] (0,62]
## [209] (62,Inf] (0,62] (0,62] (62,Inf] (62,Inf] (62,Inf] (62,Inf] (62,Inf]
## [217] (0,62] (62,Inf] (62,Inf] (0,62] (62,Inf] (62,Inf] (62,Inf] (62,Inf]
## [225] (0,62] (62,Inf] (62,Inf] (0,62]
## Levels: (0,62] (62,Inf]
cut(lung$age, breaks=c(0, 62, Inf), labels=c("young", "old"))
## [1] old old young young young old old old young young young old
## [13] old young young old old old young young old young young young
## [25] old old young old young old old old young young young young
## [37] old old old old old old young young old old old old
## [49] old young old old old young young young old young young old
## [61] old young old old old old old old old old old young
## [73] old young young old young young old old young young young young
## [85] young old young young young old old old old young old old
## [97] old old old old young old young old young old young old
## [109] young old old young old old young old young old old old
## [121] old young old old old old young old old young young young
## [133] young young old old young young young young old old old old
## [145] young young old young old young old young young young young old
## [157] old young old young young young old old old young young young
## [169] young old young young young young young young young young young old
## [181] young young old old young young old young old young old young
## [193] young old old old old old young young old old old young
## [205] old young young young old young young old old old old old
## [217] young old old young old old old old young old old young
## Levels: young old
lung$agecat <- cut(lung$age, breaks=c(0, 62, Inf), labels=c("young", "old"))
lung <- lung %>%
mutate(agecat=cut(age, breaks=c(0, 62, Inf), labels=c("young", "old")))
head(lung)
## inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss agecat
## 1 3 306 2 74 1 1 90 100 1175 NA old
## 2 3 455 2 68 1 0 90 90 1225 15 old
## 3 3 1010 1 56 1 0 90 90 NA 15 young
## 4 5 210 2 57 1 1 90 60 1150 11 young
## 5 1 883 2 60 1 0 100 90 NA 0 young
## 6 12 1022 1 74 1 1 50 80 513 0 old
Sekarang, apa yang terjadi ketika kita membuat plot KM dengan kategorisasi baru ini? Dari hasil yang diperoleh kita bisa melihat sepertinya ada beberapa perbedaan dalam kurva antara pasien “tua” dan “muda”, dimana pasien yang lebih tua memiliki peluang bertahan hidup yang sedikit lebih buruk. Tetapi pada p = 0,39, perbedaan dalam kelangsungan hidup antara mereka yang lebih muda dari 62 dan lebih tua dari 62 tidak signifikan.
ggsurvplot(survfit(Surv(time, status)~agecat, data=lung), pval=TRUE)
Tetapi jika kita memilih titik potong yang berbeda, katakanlah, berusia 70 tahun, yang kira-kira merupakan batas untuk kuartil atas dari distribusi usia (?quantile). Hasilnya sekarang sedikit signifikan.
# the base r way:
lung$agecat <- cut(lung$age, breaks=c(0, 70, Inf), labels=c("young", "old"))
# or the dplyr way:
lung <- lung %>%
mutate(agecat=cut(age, breaks=c(0, 70, Inf), labels=c("young", "old")))
# plot!
ggsurvplot(survfit(Surv(time, status)~agecat, data=lung), pval=TRUE)
Itu dia sedikit pembahasan mengenai analisis survival khususnya kaplan meier, log rank, dan hazard kumulatif pada R. Teman-teman bisa mengesplorasi sendiri dengan data yang berbeda serta membuat visualisasi kurva agar lebih menarik. Mohon koreksinya hehe :D