Email:
RPubs: https://rpubs.com/Ayoung1403


library(dplyr)      #data manipulation
library(ggplot2)    #data visualization
library(DT)         #beautify the data table
library(plotly)     #make a pie chart
library(knitr)

1 Apa yang Kita Cakup?

  • Dasar-dasar analisis bertahan hidup, termasuk fungsi bertahan hidup Kaplan-Meier dan regresi Cox.

  • Analisis landmark dan kovariat waktu dependen.

  • Insiden kumulatif dan regresi untuk analisis resiko bersaing.

2 Apa yang tersisa?

Banyaknya hal kecil yang dapat muncul dan berguna untuk diketahui:

  • Menilai asumsi bahaya yang proporsional.

  • Membuat plot bertahan hidup yang mulus, berdasarkan bertahan hidup selama x tahun yang didasari dengan kovariat berkelanjutan.

  • Syarat kelangsungan hidup.

3 Menilai Bahaya yang Proporsional

Satu asumsi dari model regresi bahaya Cox yang proporsional di setiap titik waktu selama adanya kegiatan tindak lanjut. Bagaimana kita bisa memeriksa jika data kita bertemu dengan asumsi ini?

Gunakan fungsi cox.zph dari paket survival. Ini akan menghasilkan dua hal utama:

  • Uji hipotesis dari pengaruh setiap kovariat yang berdasarkan waktunya berbeda, dan uji global dari semua kovariat sekaligus.

    • Ini dilakukan dengan melakukan pengujian untuk efek interaksi di antara kovariat dan log (waktu).

    • Nilai p yang signifikan menunjukkan bahwa asumsi bahaya proporsional telah dilanggar.

  • Plot dari Nilai Residu Schoenfeld

    • Deviasi dari garis kemiringan nol adalah bukti bahwa asumsi bahaya proporsional telah dilanggar.
library(survival)
mv_fit <- coxph(Surv(time, status) ~ sex + age, data = lung)
cz <- cox.zph(mv_fit)
print(cz)
##        chisq df    p
## sex    2.608  1 0.11
## age    0.209  1 0.65
## GLOBAL 2.771  2 0.25
plot(cz)

3.1 Plot Survival yang Halus

Terkadang, Anda akan mau untuk memvisualisasikan estimasi bertahan hidup yang didasari dengan variabel berkelanjutan. Fungsi sm.survival dari paket sm mengijinkan Anda melakukan ini untuk distribusi kuantil dari data survival. Kuantil default adalah p = 0.5 untuk median survival.

library(sm)

sm.options(
  list(
    xlab = "Age (years)",
    ylab = "Time to death (years)")
  )

sm.survival(
  x = lung$age,
  y = lung$time,
  status = lung$status,
  h = sd(lung$age) / nrow(lung)^(-1/4)
)

  • X mewakili peristiwanya.

  • O mewakili penyensorannya.

  • Garis itu adalah estimasi dari rata-rata bertahan hidup berdasarkan usia.

    • Dalam kasus ini, terlalu halus!

Opsi h merupakan parameter yang sangat halus. Ini harus berhubungan dengan standar deviasi dari kovariat berkelanjutan, x. Disarankan untuk memulainya dengan \(\frac {sd(x)}{n^{-1/4}}\) lalu dikurangi dengan \(1/2, 1/4\), dan lain-lain untuk mendapatkan nilai yang bagus dari kehalusannya. Plot sebelumnya terlalu halus, jadi ayo menguranginya dengan \(1/4\)

sm.survival(
  x = lung$age,
  y = lung$time,
  status = lung$status,
  h = (1/4) * sd(lung$age) / nrow(lung)^(-1/4)
)

3.2 Kondisi Bertahan Hidup

Terkadang, menarik untuk menghasilkan suatu perkiraan bertahan hidup diantara sekelompok pasien yang sudah bertahan hidup sejak beberapa lama.

\[ S(y|x) = \frac {S(x+y)}{S(x)}\]

  • y: jumlah angka dari tahun bertahan hidup yang diinginkan

  • x: jumlah angka dari tahun pasien yang telah bertahan hidup

Referensinya: Zabor, E., Gonen, M., Chapman, P., & Panageas, K. (2013). Dynamic prognostication using conditional survival estimates. Cancer, 119(20), 3589-3592.

3.3 Estimasi Kondisi Bertahan Hidup

Perkiraan yang mudah dibuat dengan matematika dasar Anda sendiri.

Sebagai alternatif, saya memiliki satu paket sederhana dalam pengembangannya yang disebut condSURV, untuk menghasilkan perkiraan dan plot yang terkait dengan kelangsungan hidup bersyarat. Kita bisa menggunakan fungsi conditional_surv_est untuk mendapatkan perkiraan dan 95% interval kepercayaan. Mari kondisi kelangsungan hidup sampai 6 bulan

remotes::install_github("zabore/condsurv")
library(condsurv)
library(DT)
library(kableExtra)

fit1 <- survfit(Surv(time,status) ~ 1, data = lung)

prob_times <- seq(365.25, 182.625 * 5, 182.625)

purrr::map_df(
  prob_times,
  ~conditional_surv_est(
    basekm = fit1,
    t1 = 182.625,
    t2 = .x)

) %>%
  mutate(months = round(prob_times / 30.4)) %>%
  select(months,everything()) %>%
  datatable()

Ingat kembali bahwa inisial estimasi 1 tahun bertahan hidup kita adalah 0.41. Kita melihat bahwa pasien yang sudah bertahan hidup selama 6 bulan meningkat menjadi 0.58.

3.4 Kondisional Plot Bertahan Hidup

Kita juga dapat memvisualisasikan kondisi data bertahan hidup yang didasari dengan perbedaan waktu bertahan hidup. Fungsi condsurv::condKMggplot dapat membantu untuk ini.

library(condsurv)
cond_times <- seq(0, 182.625 * 4, 182.625)

gg_conditional_surv(
  basekm = fit1,
  at = cond_times,
  main = "Conditional survival in lung data",
  xlab = "Days"
) +
  labs(color = "Conditional time")

Plot yang dihasilkan memiliki satu kurva bertahan hidup untuk setiap waktu yang kita kondisikan. Dalam kasus ini, baris pertama adalah kurva bertahan hidup secara keseluruhan karena dikondisikan pada waktu 0.

library(knitr)
knit_exit()