Phân tích sự sống sót tương ứng với tập hợp các phương pháp thống kê được sử dụng để điều tra thời gian xảy ra một sự kiện quan tâm.

Phân tích sự sống sót được sử dụng trong nhiều lĩnh vực như:

  • Các nghiên cứu ung thư phân tích thời gian sống sót của bệnh nhân,
  • Xã hội học để “phân tích lịch sử sự kiện”,
  • Trong kỹ thuật “phân tích thời gian thất bại”,
  • Và trong lĩnh vực Ngân hàng “phân tích thời gian khách hàng vỡ nợ”.

Trong các bài toán về rủi ro ngân hàng, các câu hỏi nghiên cứu điển hình như:

  • Tác động của các đặc điểm của khách hàng nhất định đối đối với khả năng vỡ nợ là gì ?
  • Xác suất để một khách hàng vỡ nợ sau 12 tháng là bao nhiêu?
  • Có sự khác biệt về khả năng vỡ nợ giữa các nhóm khách hàng không?

1 Mục tiêu

Mục đích của chương này là mô tả các khái niệm cơ bản của phân tích sự sống còn. Trong các nghiên cứu ung thư, hầu hết các phân tích tỷ lệ sống sót sử dụng các phương pháp sau:

  • Biểu đồ Kaplan-Meier vẽ các đường cong sinh tồn
  • Log-rank test để so sánh các đường cong sống sót của hai hoặc nhiều nhóm
  • Hồi quy mối nguy theo tỷ lệ cox để mô tả ảnh hưởng của các biến đối với tỷ lệ sống sót. Mô hình Cox được thảo luận trong chương tiếp theo: Mô hình mối nguy theo tỷ lệ Cox .

Ở đây, chúng ta sẽ bắt đầu bằng cách giải thích các khái niệm cơ bản về phân tích sự sống còn, bao gồm:

  • Cách tạo và diễn giải các đường cong sinh tồn,
  • và cách định lượng và kiểm tra sự khác biệt về khả năng sống sót giữa hai hoặc nhiều nhóm bệnh nhân.

Sau đó, chúng ta sẽ tiếp tục bằng cách mô tả phân tích đa biến sử dụng mô hình nguy cơ tỷ lệ Cox .

2 Các khái niệm cơ bản

Ở đây, chúng ta bắt đầu bằng cách xác định các thuật ngữ cơ bản của phân tích sự sống còn bao gồm:

  • Thời gian tồn tại và sự kiện
  • Nhóm kiểm chứng (censoring)
  • Hàm sinh tồn và hàm nguy cơ

2.1 Thời gian sống sót và loại sự kiện trong nghiên cứu ung thư

Có nhiều loại sự kiện khác nhau, bao gồm:

  • Tái phát (Relapse)
  • Sự tiến triển (Progression)
  • Cái chết (Death)

Hai thước đo quan trọng nhất trong nghiên cứu ung thư bao gồm: i) thời gian chết ; và ii) thời gian sống sót không tái phát, tương ứng với thời gian từ khi đáp ứng điều trị đến khi bệnh tái phát. Nó còn được gọi là thời gian sống sót không bệnh tật và thời gian sống sót không biến cố.

2.2 Nhóm kiểm chứng (censoring)

Như đã đề cập ở trên, phân tích khả năng sống sót tập trung vào khoảng thời gian dự kiến cho đến khi xảy ra một sự kiện quan tâm (tái phát hoặc tử vong). Tuy nhiên, sự kiện có thể không xảy ra đối với một số cá nhân trong khoảng thời gian nghiên cứu, gọi là quan sát được kiểm chứng.

Nhóm kiểm chứng có thể phát sinh theo những cách sau:

  • một bệnh nhân chưa trải qua sự kiện đang quan tâm, chẳng hạn như tái phát hoặc tử vong, trong khoảng thời gian nghiên cứu;
  • một bệnh nhân bị mất theo dõi trong thời gian nghiên cứu;
  • một bệnh nhân trải qua một sự kiện khác khiến không thể theo dõi thêm.

Loại kiểm chứng này, được đặt tên là right censoring, được xử lý trong phân tích Sống sót.

2.3 Hàm sinh tồn và nguy cơ (survival and hazard functions)

Hai xác suất liên quan được sử dụng để mô tả dữ liệu sống sót: xác suất sống sót và xác suất nguy cơ.

Xác suất sống sót, còn được gọi là hàm sống sót, là xác suất mà một cá nhân sống sót từ thời gian gốc (ví dụ chẩn đoán ung thư) đến một thời điểm cụ thể trong tương lai.S(t)

Nguy cơ, được ký hiệu là h(t), là xác suất mà một cá nhân đang được quan sát tại thời điểm t xảy ra sự kiện trong thời gian quan sát.

3 Ước tính sống sót của Kaplan-Meier

Phương pháp Kaplan-Meier (KM) là một phương pháp phi tham số được sử dụng để ước tính xác suất sống sót từ các thời gian sống sót đã được quan sát (Kaplan và Meier, 1958).

Xác suất sống sót tại thời điểm \(t_i\), \(S(t_i)\), được tính như sau:

\[S(t_i) = S(t_{i-1})(1-\frac{d_i}{n_i})\]

Trong đó:

  • \(S(t_{i-1})\): xác suất sống sót tại \(t_i\)
  • \(n_i\): số bệnh nhân còn sống ngay trước \(t_i\)
  • \(d_i\): số sự kiện tại \(t_i\)
  • \(t_0 = 0\), \(S (0) = 1\)

Xác suất ước tính (\(S(t)\)) là một step function chỉ thay đổi giá trị tại thời điểm của mỗi sự kiện. Cũng có thể tính toán khoảng tin cậy cho xác suất sống sót.

Đường cong tỷ lệ sống sót của KM, một biểu đồ về xác suất sống sót của KM theo thời gian, cung cấp một bản tóm tắt hữu ích về dữ liệu có thể được sử dụng để ước tính các biện pháp như thời gian sống sót trung bình.

4 Phân tích sống sót trên R

4.1 Cài đặt và sử dụng 2 packages

  • survival cho tính toán các phân tích tồn tại
  • survminer cho để tóm tắt và vẽ hình kết quả phân tích sự sống sót
library("survival")
library("survminer")
## Loading required package: ggplot2
## Loading required package: ggpubr
## 
## Attaching package: 'survminer'
## The following object is masked from 'package:survival':
## 
##     myeloma

4.2 Dữ liệu

Chúng tôi sẽ sử dụng dữ liệu ung thư phổi có sẵn trong gói survival.

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
  • inst: Mã tổ chức
  • time: Thời gian tồn tại tính bằng ngày
  • status: trạng thái kiểm chứng 1 = kiểm chứng, 2 = chết
  • age: Tuổi tính theo năm
  • sex: Nam = 1, Nữ = 2
  • ph.ecog: Điểm hiệu suất ECOG (0 = tốt 5 = chết)
  • ph.karno: Điểm hiệu suất của Karnofsky (xấu = 0-tốt = 100) do bác sĩ đánh giá
  • pat.karno: Điểm hiệu suất của Karnofsky theo đánh giá của bệnh nhân
  • meal.cal: Lượng calo tiêu thụ trong bữa ăn
  • wt.loss: Giảm cân trong sáu tháng qua

4.3 Tính toán các đường cong sinh tồn: survfit ()

Hàm survfit() (trong gói survival) có thể được sử dụng để tính toán ước lượng sống sót theo Kaplan-Meier. Các đối số chính của nó bao gồm:

  • một đối tượng survival được tạo bằng cách sử dụng hàm Surv()
  • và tập dữ liệu chứa các biến.

Để tính toán các đường cong survival, hãy nhập cái này:

fit <- survfit(Surv(time, status) ~ sex, data = lung)
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

Nếu bạn muốn hiển thị bản tóm tắt đầy đủ hơn về các đường cong sinh tồn, hãy nhập vào:

# Summary of survival curves
summary(fit)
# Access to the sort summary table
summary(fit)$table

4.4 Tiếp cận giá trị được trả về bởi survfit()

Hàm survfit() trả về danh sách các biến, bao gồm các thành phần sau:

  • n: tổng số chủ thể trong mỗi đường cong.
  • time: các điểm thời gian trên đường cong.
  • n.risk: số đối tượng gặp rủi ro tại thời điểm t
  • n.event: số sự kiện xảy ra tại thời điểm t.
  • n.censor: số đối tượng bị kiểm duyệt, thoát khỏi nhóm rủi ro, không có sự kiện, tại thời điểm t.
  • lower,upper: giới hạn tin cậy dưới và trên cho đường cong, tương ứng.
  • strata: chỉ ra sự phân tầng của ước lượng đường cong. Nếu phân tầng is not NULL, có nhiều đường cong trong kết quả. Các mức của phân tầng (factor) là nhãn cho các đường cong.

Các thành phần có thể được truy cập như sau:

d <- data.frame(time = fit$time,
                  n.risk = fit$n.risk,
                  n.event = fit$n.event,
                  n.censor = fit$n.censor,
                  surv = fit$surv,
                  upper = fit$upper,
                  lower = fit$lower
                  )
head(d)
##   time n.risk n.event n.censor      surv     upper     lower
## 1   11    138       3        0 0.9782609 1.0000000 0.9542301
## 2   12    135       1        0 0.9710145 0.9994124 0.9434235
## 3   13    134       2        0 0.9565217 0.9911586 0.9230952
## 4   15    132       1        0 0.9492754 0.9866017 0.9133612
## 5   26    131       1        0 0.9420290 0.9818365 0.9038355
## 6   30    130       1        0 0.9347826 0.9768989 0.8944820

4.5 Vẽ hình các đường cong sinh tồn

Chúng ta sẽ sử dụng hàm ggsurvplot() (trong gói Survminer) để tạo ra các đường cong sinh tồn cho hai nhóm đối tượng.

Nó cũng có thể hiển thị:

  • giới hạn tin cậy 95% của hàm Survivor bằng cách sử dụng đối số conf.int = TRUE .

  • số lượng và/hoặc tỷ lệ cá nhân gặp rủi ro theo thời gian sử dụng lựa chọn risk.table. Các giá trị được phép cho rủi ro. Bảng bao gồm:

    • TRUE hoặc FALSE xác định có hiển thị hay không bảng rủi ro. Mặc định là FALSE.
    • absolute” or “percentage”: để hiển thị số tuyệt đối và tỷ lệ phần trăm đối tượng gặp rủi ro tương ứng theo thời gian. Sử dụng “abs_pct” để hiển thị cả số tuyệt đối và tỷ lệ phần trăm.
  • p-value của Log-Rank test so sánh các nhóm bằng cách sử dụng pval = TRUE .

  • đường ngang / dọc ở mức tồn tại trung bình bằng cách sử dụng đối số surv.median.line. Các giá trị được phép bao gồm một trong c (“none”, “hv”, “h”, “v”). v: dọc, h: ngang.

# Change color, linetype by strata, risk.table color by strata
ggsurvplot(fit,
          pval = TRUE, conf.int = TRUE,
          risk.table = TRUE, # Add risk table
          risk.table.col = "strata", # Change risk table color by groups
          linetype = "strata", # Change line type by groups
          surv.median.line = "hv", # Specify median survival
          ggtheme = theme_bw(), # Change ggplot2 theme
          palette = c("#E7B800", "#2E9FDF"))

Biểu đồ có thể được tùy chỉnh thêm bằng cách sử dụng các đối số sau:

  • conf.int.style = “step” để thay đổi kiểu của dải khoảng tin cậy.
  • xlab để thay đổi nhãn trục x.
  • break.time.by = 200 ngắt trục x trong khoảng thời gian 200.
  • risk.table = “abs_pct” để hiển thị cả số lượng tuyệt đối và tỷ lệ phần trăm các cá nhân có nguy cơ.
  • risk.table.y.text.col = TRUE và risk.table.y.text = FALSE để cung cấp các thanh thay vì tên trong chú thích văn bản của chú giải bảng rủi ro.
  • ncensor.plot = TRUE để vẽ biểu đồ số đối tượng bị kiểm duyệt tại thời điểm t. Theo đề xuất của Marcin - Kosinski, Đây là một phản hồi bổ sung tốt cho các đường cong sinh tồn, để người ta có thể nhận ra: đường cong sinh tồn trông như thế nào, số lượng rủi ro là bao nhiêu VÀ nguyên nhân khiến tập hợp rủi ro trở nên nhỏ hơn: có phải gây ra bởi các sự kiện hoặc bởi các sự kiện được kiểm duyệt?
  • Legend.labs để thay đổi nhãn chú giải.
ggsurvplot(
   fit,                     # survfit object with calculated statistics.
   pval = TRUE,             # show p-value of log-rank test.
   conf.int = TRUE,         # show confidence intervals for 
                            # point estimaes of survival curves.
   conf.int.style = "step",  # customize style of confidence intervals
   xlab = "Time in days",   # customize X axis label.
   break.time.by = 200,     # break X axis in time intervals by 200.
   ggtheme = theme_light(), # customize plot and risk table with a theme.
   risk.table = "abs_pct",  # absolute number and percentage at risk.
  risk.table.y.text.col = T,# colour risk table text annotations.
  risk.table.y.text = FALSE,# show bars instead of names in text annotations
                            # in legend of risk table.
  ncensor.plot = TRUE,      # plot the number of censored subjects at time t
  surv.median.line = "hv",  # add the median survival pointer.
  legend.labs = 
    c("Male", "Female"),    # change legend labels.
  palette = 
    c("#E7B800", "#2E9FDF") # custom color palettes.
)

Biểu đồ Kaplan-Meier có thể được hiểu như sau:

Trục hoành (trục x) biểu thị thời gian tính bằng ngày và trục tung (trục y) thể hiện xác suất sống sót hoặc tỷ lệ người sống sót. Các đường biểu diễn đường cong sinh tồn của hai nhóm. Sự sụt giảm thẳng đứng trong các đường cong biểu thị một sự kiện. Dấu tick dọc trên các đường cong có nghĩa là bệnh nhân đã được kiểm duyệt vào thời điểm này.

  • Tại thời điểm 0, xác suất sống sót là 1,0 (hoặc 100% người tham gia còn sống).
  • Tại thời điểm 250, xác suất sống sót là khoảng 0,55 (hoặc 55%) đối với giới tính = 1 và 0,75 (hoặc 75%) đối với giới tính = 2.
  • Thời gian sống sót trung bình là khoảng 270 ngày đối với giới tính = 1 và 426 ngày đối với giới tính = 2, cho thấy thời gian sống sót đối với giới tính = 2 tốt hơn so với giới tính = 1

Thời gian sống sót trung bình cho mỗi nhóm có thể được lấy bằng cách sử dụng mã dưới đây:

summary(fit)$table
##       records n.max n.start events    rmean se(rmean) median 0.95LCL 0.95UCL
## sex=1     138   138     138    112 326.0841  22.91156    270     212     310
## sex=2      90    90      90     53 460.6473  34.68985    426     348     550

Thời gian sống sót trung bình cho giới tính = 1 (Nhóm nam) là 270 ngày, trái ngược với 426 ngày cho giới tính = 2 (Nữ). Có vẻ như có một lợi thế sống sót cho phụ nữ bị ung thư phổi so với nam giới. Tuy nhiên, để đánh giá liệu sự khác biệt này có ý nghĩa về mặt thống kê hay không đòi hỏi một bài kiểm tra thống kê chính thức, một chủ đề sẽ được thảo luận trong các phần tiếp theo.

Lưu ý rằng, các giới hạn tin cậy rất rộng ở phần đuôi của các đường cong, khiến cho việc diễn giải có ý nghĩa trở nên khó khăn. Điều này có thể được giải thích là do trong thực tế, thường có những bệnh nhân mất khả năng theo dõi hoặc còn sống khi kết thúc theo dõi. Do đó, có thể hợp lý để rút ngắn biểu đồ trước khi kết thúc quá trình theo dõi trên trục x (Pocock và cộng sự, 2002).

Các đường cong sự tồn tại có thể được rút ngắn bằng cách sử dụng đối số xlim như sau:

ggsurvplot(fit,
          conf.int = TRUE,
          risk.table.col = "strata", # Change risk table color by groups
          ggtheme = theme_bw(), # Change ggplot2 theme
          palette = c("#E7B800", "#2E9FDF"),
          xlim = c(0, 600))

Lưu ý rằng, ba phép biến đổi thường được sử dụng có thể được chỉ định bằng cách sử dụng đối số fun : “Log”: log transformation của hàm sống sót, “event”: biểu đồ các sự kiện tích lũy (f (y) = 1-y). Nó còn được gọi là tỷ lệ tích lũy, “Cumhaz”: vẽ biểu đồ của hàm nguy cơ tích lũy (f (y) = -log (y))

Ví dụ: để vẽ các sự kiện tích lũy

ggsurvplot(fit,
          conf.int = TRUE,
          risk.table.col = "strata", # Change risk table color by groups
          ggtheme = theme_bw(), # Change ggplot2 theme
          palette = c("#E7B800", "#2E9FDF"),
          fun = "event")

Nguy cơ tích lũy thường được sử dụng để ước tính xác suất nguy hiểm. Nó được định nghĩa là \(H(t) = -log(survival function) = -log(S(t))\). Nguy cơ tích lũy H(t) có thể được hiểu là tử vong tích lũy. Nói cách khác, nó tương ứng với số lượng sự kiện sẽ được mong đợi đối với mỗi cá nhân tại thời điểm t nếu sự kiện đó là một quá trình lặp lại.

Để vẽ biểu đồ nguy cơ tích lũy

ggsurvplot(fit,
          conf.int = TRUE,
          risk.table.col = "strata", # Change risk table color by groups
          ggtheme = theme_bw(), # Change ggplot2 theme
          palette = c("#E7B800", "#2E9FDF"),
          fun = "cumhaz")

4.6 Kaplan-Meier life table: tóm tắt các đường cong sinh tồn

Như đã đề cập ở trên, bạn có thể sử dụng hàm summary() để có một bản tóm tắt hoàn chỉnh về các đường cong tồn tại:

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

Cũng có thể sử dụng hàm surv_summary() [trong gói survminer ] để nhận tóm tắt về các đường cong sinh tồn. So với hàm summary() mặc định, surv_summary() tạo một khung dữ liệu chứa một bản tóm tắt đẹp từ các kết quả survfit.

res.sum <- surv_summary(fit)
## Warning in .get_data(x, data = data): The `data` argument is not provided. Data
## will be extracted from model fit.
head(res.sum)
##   time n.risk n.event n.censor      surv    std.err     upper     lower strata
## 1   11    138       3        0 0.9782609 0.01268978 1.0000000 0.9542301  sex=1
## 2   12    135       1        0 0.9710145 0.01470747 0.9994124 0.9434235  sex=1
## 3   13    134       2        0 0.9565217 0.01814885 0.9911586 0.9230952  sex=1
## 4   15    132       1        0 0.9492754 0.01967768 0.9866017 0.9133612  sex=1
## 5   26    131       1        0 0.9420290 0.02111708 0.9818365 0.9038355  sex=1
## 6   30    130       1        0 0.9347826 0.02248469 0.9768989 0.8944820  sex=1
##   sex
## 1   1
## 2   1
## 3   1
## 4   1
## 5   1
## 6   1

Hàm surv_summary() trả về một khung dữ liệu với các cột sau:

  • time: thời điểm mà đường cong có một bước.
  • n.risk: số đối tượng gặp rủi ro tại thời điểm t.
  • n.event: số sự kiện xảy ra tại thời điểm t.
  • n.censor: số lượng sự kiện được kiểm duyệt.
  • surv: ước tính xác suất sống sót.
  • std.err: sai số tiêu chuẩn của xác suất sống sót.
  • upper: cận trên của khoảng tin cậy
  • lower: cận dưới của khoảng tin cậy
  • strata: chỉ ra sự phân tầng của ước lượng đường cong. Các mức của phần tầng (factor) là nhãn cho các đường cong.

Trong một tình huống, khi các đường cong tồn tại đã được gắn với một hoặc nhiều biến, đối tượng surv_summary chứa các cột bổ sung đại diện cho các biến. Điều này làm cho nó có thể đối mặt với đầu ra của ggsurvplot theo tầng hoặc theo một số kết hợp của các yếu tố.

Đối tượng surv_summary cũng có một thuộc tính có tên là ‘table’ chứa thông tin về các đường cong sinh tồn, bao gồm các đường trung vị của sự sống sót với khoảng tin cậy, cũng như, tổng số đối tượng và số lượng sự kiện trong mỗi đường cong. Để tiếp cận vào thuộc tính ‘table’, hãy nhập vào:

attr(res.sum, "table")
##       records n.max n.start events    rmean se(rmean) median 0.95LCL 0.95UCL
## sex=1     138   138     138    112 326.0841  22.91156    270     212     310
## sex=2      90    90      90     53 460.6473  34.68985    426     348     550

4.7 Log-Rank test so sánh các đường cong sống sót: survdiff()

Log-Rank test là phương pháp được sử dụng rộng rãi nhất để so sánh hai hoặc nhiều đường cong sống sót. Giả thuyết không (null hypothesis) là không có sự khác biệt về khả năng sống sót giữa hai nhóm. Log-Rank test là kiểm định phi tham số, không đưa ra giả định nào về các phân phối tồn tại. Về cơ bản, Log-Rank test so sánh số lượng sự kiện quan sát được trong mỗi nhóm với những gì sẽ được mong đợi nếu giả thuyết vô hiệu là đúng (tức là, nếu các đường cong sống sót giống hệt nhau). Thống kê thứ hạng Log-Rank được phân phối gần đúng dưới dạng thống kê kiểm định Chi-square.

Hàm survdiff() [trong gói survival] có thể được sử dụng để tính toán Log-Rank test so sánh hai hoặc nhiều đường cong sinh tồn.

survdiff() có thể được sử dụng như sau:

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

Hàm trả về danh sách các thành phần, bao gồm:

  • n: số chủ thể trong mỗi nhóm.
  • obs: số lượng sự kiện được quan sát có trọng số trong mỗi nhóm.
  • exp: số lượng sự kiện dự kiến có trọng số trong mỗi nhóm.
  • chisq: thống kê chisquare để kiểm tra sự bằng nhau.
  • strata: (tùy chọn) số lượng đối tượng có trong mỗi tầng.

Log-Rank test về sự khác biệt trong khả năng sống sót cho giá trị p là p = 0,0013, cho thấy rằng các nhóm giới tính có sự khác biệt đáng kể về khả năng sống sót.

4.8 Fit complex survival curves

Trong phần này, chúng tôi sẽ tính toán các đường cong sống sót bằng cách sử dụng kết hợp nhiều yếu tố. Tiếp theo, chúng ta sẽ đối mặt với đầu ra của ggsurvplot() bằng sự kết hợp của các yếu tố

Điều chỉnh các đường cong tồn tại (phức tạp) bằng cách sử dụng tập dữ liệu colon

require("survival")
fit2 <- survfit( Surv(time, status) ~ sex + rx + adhere,
                data = colon )

Biểu diễn kết quả đầu ra bằng survminer. Biểu đồ dưới đây cho thấy các đường cong sống sót của biến giới tính được biểu thị theo các giá trị của rx & adhere.

# Plot survival curves by sex and facet by rx and adhere
ggsurv <- ggsurvplot(fit2, fun = "event", conf.int = TRUE,
                     ggtheme = theme_bw())
   
ggsurv$plot +theme_bw() + 
  theme (legend.position = "right")+
  facet_grid(rx ~ adhere)

5 Tóm tắt

Phân tích tồn tại là một tập hợp các phương pháp tiếp cận thống kê để phân tích dữ liệu trong đó biến kết quả được quan tâm là thời gian cho đến khi một sự kiện xảy ra.

Dữ liệu tồn tại thường được mô tả và mô hình hóa theo hai hàm liên quan:

  • Hàm sống sót đại diện cho xác suất mà một cá nhân sống sót từ thời điểm xuất phát đến một thời điểm nào đó ngoài thời gian t. Nó thường được ước tính bằng phương pháp Kaplan-Meier. logrank test có thể được sử dụng để kiểm tra sự khác biệt giữa các đường cong sống sót cho các nhóm, chẳng hạn như nhóm điều trị.

  • Hàm nguy cơ cung cấp khả năng xảy ra tức thời của một sự kiện tại một thời điểm, cho khả năng tồn tại cho đến thời điểm đó. Nó được sử dụng chủ yếu như một công cụ chẩn đoán hoặc xác định một mô hình toán học để phân tích tỷ lệ sống sót.

Trong bài viết này, chúng tôi trình bày cách thực hiện và trực quan hóa các phân tích tỷ lệ sống bằng cách sử dụng kết hợp hai gói R: survival (để phân tích) và survminer (để hiển thị).

6 Tham khảo

  • Clark TG, Bradburn MJ, Love SB and Altman DG. Survival Analysis Part I: Basic concepts and first analyses. British Journal of Cancer (2003) 89, 232 – 238

  • Kaplan EL, Meier P (1958) Nonparametric estimation from incomplete observations. J Am Stat Assoc 53: 457–481.

  • Pocock S, Clayton TC, Altman DG (2002) Survival plots of time-to-event outcomes in clinical trials: good practice and pitfalls. Lancet 359: 1686– 1689.