Thư viện sử dụng
library(survival)
library(survminer)
## Loading required package: ggplot2
## Loading required package: ggpubr
##
## Attaching package: 'survminer'
## The following object is masked from 'package:survival':
##
## myeloma
Nhâp dữ liệu
df <- read.csv('https://math.ued.udn.vn/wp-content/uploads/2024/10/So_lieu.csv')
Xử lỹ dữ liệu thô. Gộp 2 giá trị “Cắt vú triệt căn” và “Cắt vú + tái tạo” thành giá trị 2, “bảo tồn” thành giá trị 1
df$Phuong_phap_phau_thuat_tai_vu<-replace(df$Phuong_phap_phau_thuat_tai_vu,df$Phuong_phap_phau_thuat_tai_vu=="Cắt vú triệt căn",2)
df$Phuong_phap_phau_thuat_tai_vu<-replace(df$Phuong_phap_phau_thuat_tai_vu,df$Phuong_phap_phau_thuat_tai_vu=="Cắt vú + tái tạo",2)
df$Phuong_phap_phau_thuat_tai_vu<-replace(df$Phuong_phap_phau_thuat_tai_vu,df$Phuong_phap_phau_thuat_tai_vu=="bảo tồn",1)
df$Phuong_phap_phau_thuat_tai_vu<-as.numeric(df$Phuong_phap_phau_thuat_tai_vu)
df$Phuong_phap_phau_thuat_tai_hach<-replace(df$Phuong_phap_phau_thuat_tai_hach,df$Phuong_phap_phau_thuat_tai_hach=="Nạo hạch nách",2)
df$Phuong_phap_phau_thuat_tai_hach<-replace(df$Phuong_phap_phau_thuat_tai_hach,df$Phuong_phap_phau_thuat_tai_hach=="Sinh thiết hạch cửa",1)
df$Phuong_phap_phau_thuat_tai_hach<-as.numeric(df$Phuong_phap_phau_thuat_tai_hach)
Sửa lỗi các giá trị biến Thời gian tái phẫu thuật sau điều trị.
df$Thoi_gian_tai_phat_sau_dieu_tri<-replace(df$Thoi_gian_tai_phat_sau_dieu_tri,df$Thoi_gian_tai_phat_sau_dieu_tri=="không",0)
df$Thoi_gian_tai_phat_sau_dieu_tri<-replace(df$Thoi_gian_tai_phat_sau_dieu_tri,df$Thoi_gian_tai_phat_sau_dieu_tri=="",0)
df$Thoi_gian_tai_phat_sau_dieu_tri<-as.numeric(df$Thoi_gian_tai_phat_sau_dieu_tri)
Bổ sung biến tái phát. Ta cần quan tâm bệnh nhân không tái phát sau phẫu thuật, do đó nếu bệnh nhân không tái phát thì biến tái phát nhận giá trị 1, ngược lại nhận giá trị 2.
n<-nrow(df)
df$Tai_phat=rep(0,n)
df$Tai_phat=replace(df$Tai_phat,df$Thoi_gian_tai_phat_sau_dieu_tri==0,1)
df$Tai_phat=replace(df$Tai_phat,df$Thoi_gian_tai_phat_sau_dieu_tri>0,2)
Thay đổi giá trị biến Thời gian tái phẫu thuật sau điều trị đối với bệnh nhân không tái phát sau điều trị
for (i in 1:n)
{ if (df$Thoi_gian_tai_phat_sau_dieu_tri[i]==0)
{df$Thoi_gian_tai_phat_sau_dieu_tri[i]=12*(2024-df$Nam_phau_thuat[i])}}
Thực hiện
fit <- survfit(Surv(df$Thoi_gian_tai_phat_sau_dieu_tri, df$Tai_phat) ~ df$Phuong_phap_phau_thuat_tai_vu, data = df)
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"),
legend.labs =
c("Bảo tồn", "Cắt vú"),
xlim = c(0, 77), break.x.by = 12,
xlab = "Thời gian (tháng)",
ylab = "Xác suất không tái phát"
)
## Warning in .add_surv_median(p, fit, type = surv.median.line, fun = fun, :
## Median survival not reached.
summary(fit)
## Call: survfit(formula = Surv(df$Thoi_gian_tai_phat_sau_dieu_tri, df$Tai_phat) ~
## df$Phuong_phap_phau_thuat_tai_vu, data = df)
##
## df$Phuong_phap_phau_thuat_tai_vu=1
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 5 257 1 0.996 0.00388 0.989 1.000
## 6 256 1 0.992 0.00548 0.982 1.000
## 7 255 1 0.988 0.00670 0.975 1.000
## 8 254 1 0.984 0.00772 0.969 1.000
## 12 253 2 0.977 0.00942 0.958 0.995
## 14 251 2 0.969 0.01083 0.948 0.990
## 15 249 1 0.965 0.01147 0.943 0.988
## 17 248 1 0.961 0.01206 0.938 0.985
## 19 247 1 0.957 0.01263 0.933 0.982
## 21 246 1 0.953 0.01316 0.928 0.979
## 22 245 1 0.949 0.01367 0.923 0.977
## 23 244 1 0.946 0.01416 0.918 0.974
## 24 243 2 0.938 0.01507 0.909 0.968
## 25 199 1 0.933 0.01572 0.903 0.964
## 29 198 1 0.928 0.01633 0.897 0.961
## 30 197 1 0.924 0.01691 0.891 0.957
## 48 136 1 0.917 0.01810 0.882 0.953
## 54 89 1 0.907 0.02062 0.867 0.948
##
## df$Phuong_phap_phau_thuat_tai_vu=2
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 3 612 1 0.998 0.00163 0.995 1.000
## 4 611 1 0.997 0.00231 0.992 1.000
## 6 610 5 0.989 0.00430 0.980 0.997
## 8 605 1 0.987 0.00459 0.978 0.996
## 10 604 2 0.984 0.00512 0.974 0.994
## 13 602 1 0.982 0.00537 0.972 0.993
## 16 601 2 0.979 0.00583 0.967 0.990
## 17 599 3 0.974 0.00645 0.961 0.987
## 20 596 2 0.971 0.00683 0.957 0.984
## 21 594 1 0.969 0.00701 0.955 0.983
## 22 593 1 0.967 0.00719 0.953 0.982
## 23 592 1 0.966 0.00736 0.951 0.980
## 24 591 2 0.962 0.00769 0.947 0.978
## 26 491 3 0.957 0.00836 0.940 0.973
## 29 488 1 0.955 0.00857 0.938 0.972
## 30 487 2 0.951 0.00897 0.933 0.968
## 32 485 1 0.949 0.00916 0.931 0.967
## 34 484 1 0.947 0.00935 0.929 0.965
## 35 483 1 0.945 0.00953 0.926 0.964
## 36 482 2 0.941 0.00989 0.922 0.960
## 37 355 1 0.938 0.01021 0.918 0.958
## 40 354 1 0.936 0.01052 0.915 0.956
## 48 353 1 0.933 0.01082 0.912 0.954
## 52 196 1 0.928 0.01176 0.905 0.951
## 54 195 1 0.923 0.01263 0.899 0.948
## 65 70 2 0.897 0.02210 0.855 0.941