Fungsi daya tahan menunjukkan peluang subjek bertahan setelah waktu tertentu. Secara teoritis, fungsi daya tahan didefinisikan sebagai berikut:
\(S(t)=P(T>t)=1-P(T<=t)=1-F(t)\)
dengan \(F(t)\) adalah peluang kumulatif.
\(\hat S(t)=\frac{individu\;yang\;bertahan\;di\;waktu\;t}{total\;individu}\)
\(\hat S(t)=\Pi(1-\frac{d_i}{n_i})\)
\(d_i\): banyaknya kejadian pada waktu t
\(n_i\): banyaknya individu pada waktu t
Pada ilustrasi ini akan kita gunakan data percobaan acak terapi untuk menghentikan kebiasaan merokok. Data memuat peubah sebagai berikut:
id: id responden
ttr: waktu (hari) sampai individu kembali merokok
relapse: indikator kembali merokok (0: Tidak/tersensor, 1:Ya/kejadian)
grp: jenis terapi yang diberikan (combination atau patchOnly)
age: usia (tahun) saat percobaan
gender: jenis kelamin (Female atau Male)
race: ras (black, hispanic, white atau other)
employment: pekerjaan (ft: full-time, pt: part-time, other)
yearsSmoking: lama merokok (tahun)
levelSmoking: kategori perokok (heavy atau light)
ageGroup2: kelompok umur dengan kategori 21-49 atau 50+
ageGroup4: kelompok umur dengan kategori 21-34, 35-49, 50-64 atau 65+
priorAttempts: banyaknya percobaan yang telah dilakukan untuk berhenti merokok
longestNoSmoke: jangka waktu terlama (hari) yang pernah dilakukan tanpa merokok
library(asaur)
library(dplyr)
library(survival)
library(survminer)
library(ggsurvfit)
data("pharmacoSmoking")
str(pharmacoSmoking)
## 'data.frame': 125 obs. of 14 variables:
## $ id : int 21 113 39 80 87 29 16 35 54 70 ...
## $ ttr : int 182 14 5 16 0 182 14 77 2 0 ...
## $ relapse : int 0 1 1 1 1 0 1 1 1 1 ...
## $ grp : Factor w/ 2 levels "combination",..: 2 2 1 1 1 1 2 2 2 2 ...
## $ age : int 36 41 25 54 45 43 66 78 40 38 ...
## $ gender : Factor w/ 2 levels "Female","Male": 2 2 1 2 2 2 2 1 1 2 ...
## $ race : Factor w/ 4 levels "black","hispanic",..: 4 4 4 4 4 2 1 1 1 1 ...
## $ employment : Factor w/ 3 levels "ft","other","pt": 1 2 2 1 2 1 3 2 1 1 ...
## $ yearsSmoking : int 26 27 12 39 30 30 54 56 25 23 ...
## $ levelSmoking : Factor w/ 2 levels "heavy","light": 1 1 1 1 1 1 1 2 1 2 ...
## $ ageGroup2 : Factor w/ 2 levels "21-49","50+": 1 1 1 2 1 1 2 2 1 1 ...
## $ ageGroup4 : Factor w/ 4 levels "21-34","35-49",..: 2 2 1 3 2 2 4 4 2 2 ...
## $ priorAttempts : int 0 3 3 0 0 2 0 10 4 10 ...
## $ longestNoSmoke: int 0 90 21 0 0 1825 0 15 7 90 ...
Pertama kita akan melihat perbedaan peluang daya tahan perokok berdasarkan jenis terapi yang diberikan.
surv_obj=Surv(pharmacoSmoking$ttr,pharmacoSmoking$relapse)
fit=survfit(surv_obj~grp, data=pharmacoSmoking)
summary(fit, times=head(fit$time,10))
## Call: survfit(formula = surv_obj ~ grp, data = pharmacoSmoking)
##
## grp=combination
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 0 61 4 0.934 0.0317 0.874 0.999
## 2 57 3 0.885 0.0408 0.809 0.969
## 4 54 1 0.869 0.0432 0.788 0.958
## 5 53 2 0.836 0.0474 0.748 0.934
## 8 51 2 0.803 0.0509 0.709 0.909
## 10 49 1 0.787 0.0524 0.691 0.897
## 12 48 1 0.770 0.0538 0.672 0.884
## 14 47 1 0.754 0.0551 0.653 0.870
## 15 46 2 0.721 0.0574 0.617 0.843
## 16 44 1 0.705 0.0584 0.599 0.829
##
## grp=patchOnly
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 0 64 8 0.875 0.0413 0.798 0.960
## 2 51 8 0.750 0.0541 0.651 0.864
## 4 47 3 0.703 0.0571 0.600 0.824
## 5 45 0 0.703 0.0571 0.600 0.824
## 8 43 3 0.656 0.0594 0.550 0.784
## 10 42 0 0.656 0.0594 0.550 0.784
## 12 42 1 0.641 0.0600 0.533 0.770
## 14 41 6 0.547 0.0622 0.438 0.684
## 15 35 2 0.516 0.0625 0.407 0.654
## 16 33 0 0.516 0.0625 0.407 0.654
Berdasarkan hasil di atas, perokok yang memperoleh terapi combination memiliki daya tahan yang lebih baik dibanding yang memperoleh terapi patchOnly, hal ini dapat dilihat dari nilai peluang bertahan (survival) dari kedua kelompok. Misalnya untuk waktu 14 hari, dari kelompok terapi combination peluang bertahan untuk tidak merokok setelah 14 hari adalah 75.4% sementara dari kelompok terapi patchOnly peluang bertahan untuk tidak merokok setelah 14 hari 54.7%. Sehingga dapat dikatakan bahwa terapi combination lebih efektif untuk digunakan.
Plot Kaplan Meier untuk hasil di atas adalah sebagai berikut.
ggsurvplot(fit,
conf.int = T,
risk.table = T,
risk.table.col='strata',
surv.median.line = 'hv',
ggtheme = theme_bw())
Garis hitam pada plot merupakan nilai median waktu bertahan untuk kedua jenis terapi, yaitu 65 hari untuk terapi combination dan 23 hari untuk terapi patchOnly.
fit
## Call: survfit(formula = surv_obj ~ grp, data = pharmacoSmoking)
##
## n events median 0.95LCL 0.95UCL
## grp=combination 61 37 65 50 NA
## grp=patchOnly 64 52 23 14 56
Kita akan memperbaiki tampilan plot di atas dengan menambahkan info banyaknya pengamatan tersensor.
ggsurvplot(fit,
conf.int = T,
conf.int.style='step',
break.time.by=25,
xlab='Waktu (hari)',
xlim=c(0,190),
fontsize=3,
risk.table = 'abs_pct',
risk.table.y.text.col=T,
risk.table.y.text=F,
ncensor.plot=T,
surv.median.line = 'hv',
ggtheme = theme_light())
Dari tabel banyaknya pengamatan tersensor tampak bahwa untuk kedua jenis terapi tidak ada pengamatan tersensor yang waktu bertahannya kurang dari masa studi (182 hari), sehingga dapat kita duga bahwa pengamatan-pengamatan yang tersensor adalah tersensor kanan (sampai akhir masa studi tidak merokok kembali).
Selanjutnya kita lihat perbedaan peluang daya tahan perokok berdasarkan semua peubah kategorik yang ada dalam data, yaitu gender, race, employment, levelsmoking, dan agegroup4
grup=c('gender','race','employment','levelSmoking','ageGroup4')
formula=sapply(grup,
function(x) as.formula(paste('Surv(ttr,relapse)~',x)))
models=lapply(formula, function(x) survfit(x, data=pharmacoSmoking))
models
## $gender
## Call: survfit(formula = x, data = pharmacoSmoking)
##
## n events median 0.95LCL 0.95UCL
## gender=Female 81 61 49 21 75
## gender=Male 44 28 40 14 NA
##
## $race
## Call: survfit(formula = x, data = pharmacoSmoking)
##
## n events median 0.95LCL 0.95UCL
## race=black 38 29 22.5 12 77
## race=hispanic 8 5 94.5 2 NA
## race=other 2 1 80.0 80 NA
## race=white 77 54 56.0 25 140
##
## $employment
## Call: survfit(formula = x, data = pharmacoSmoking)
##
## n events median 0.95LCL 0.95UCL
## employment=ft 72 49 56 30 140
## employment=other 39 28 25 12 110
## employment=pt 14 12 18 14 NA
##
## $levelSmoking
## Call: survfit(formula = x, data = pharmacoSmoking)
##
## n events median 0.95LCL 0.95UCL
## levelSmoking=heavy 89 62 49.0 15 80
## levelSmoking=light 36 27 50.5 28 140
##
## $ageGroup4
## Call: survfit(formula = x, data = pharmacoSmoking)
##
## n events median 0.95LCL 0.95UCL
## ageGroup4=21-34 16 14 53 5 140
## ageGroup4=35-49 50 42 18 12 63
## ageGroup4=50-64 48 25 122 49 NA
## ageGroup4=65+ 11 8 45 20 NA
splot=lapply(models, function(x) {ggsurvfit(x)+add_confidence_interval(type='lines')+
add_risktable(risktable_stats ='n.risk',
risktable_group='risktable_stats',
size=3)+
add_quantile()})
splot
## $gender
##
## $race
##
## $employment
##
## $levelSmoking
##
## $ageGroup4
Dari hasil di atas, untuk peubah jenis kelamin, perempuan (female) memiliki median waktu bertahan 49 hari, sementara laki-laki (male) 40 hari. Jika kita perhatikan plot peluang daya tahan untuk jenis kelamin di atas, peluang daya tahan perempuan sebelum 60 hari relatif sama dengan laki-laki, akan tetapi setelah 60 hari peluang daya tahan perempuan mengecil sedangkan peluang daya tahan laki-laki cukup konstan. Peluang daya tahan perempuan dan laki-laki setelah 140 hari berturut-turut adalah 27.2% dan 38.6%.
Sementara untuk jenis pekerjaan (employment), tampak bahwa pekerja penuh waktu (fulltime) memiliki peluang daya tahan yang lebih besar dibanding paruh waktu (parttime) atau lainnya (other), sedangkan pekerja paruh waktu memiliki peluang daya tahan paling kecil,dengan median waktu daya tahan untuk fulltime, parttime dan other berturut-turut 56 hari, 18 hari, dan 25 hari.
Jika kita lihat berdasarkan kategori perokok, antara perokok berat dan perokok ringan, peluang daya tahan kedua tidak berbeda secara signifikan.
Interpretasi untuk peubah kategorik yang lain silakan anda interpretasikan.
Selanjutnya kita akan mencoba melihat peluang daya tahan jika kita gunakan beberapa peubah kategorik, yang dalam hal ini kita gunakan peubah jenis kelamin dan pekerjaan.
fit2<-survfit(surv_obj~grp+employment, data=pharmacoSmoking)
fit2
## Call: survfit(formula = surv_obj ~ grp + employment, data = pharmacoSmoking)
##
## n events median 0.95LCL 0.95UCL
## grp=combination, employment=ft 34 21 64.0 50 NA
## grp=combination, employment=other 20 11 125.0 20 NA
## grp=combination, employment=pt 7 5 63.0 8 NA
## grp=patchOnly, employment=ft 38 28 42.5 14 140
## grp=patchOnly, employment=other 19 17 8.0 3 77
## grp=patchOnly, employment=pt 7 7 15.0 1 NA
ggsurv=ggsurvplot(fit2,
conf.int = T,
conf.int.style='step',
surv.median.line = 'hv',
ggtheme = theme_bw())
ggsurv$plot+
theme_bw()+
theme(legend.position = 'right')+
facet_grid(rows =vars(grp))
Untuk jenis terapi combination, peluang daya tahan pekerja fulltime dan other relatif sama, tetapi pekerja other memiliki median waktu daya tahan yang lebih besar yaitu 125 hari, sedangkan median waktu bertahan antara pekerja fulltime atau parttime hampir sama yaitu 64 dan 63 hari. Sementara untuk jenis terapi patchOnly, pekerja fulltime memiliki peluang daya tahan yang paling besar dibanding parttime dan other dengan median waktu bertahan berturut-turut 43 hari, 25 hari, dan 8 hari.
Untuk model yang lebih kompleks lagi kita gunakan 3 peubah yaitu jenis kelamin, pekerjaan, dan jenis terapi
fit3<-survfit(surv_obj~grp+employment+gender, data=pharmacoSmoking)
fit3
## Call: survfit(formula = surv_obj ~ grp + employment + gender, data = pharmacoSmoking)
##
## n events median 0.95LCL
## grp=combination, employment=ft , gender=Female 19 12 60.0 42
## grp=combination, employment=ft , gender=Male 15 9 140.0 16
## grp=combination, employment=other, gender=Female 14 7 110.0 20
## grp=combination, employment=other, gender=Male 6 4 85.0 0
## grp=combination, employment=pt , gender=Female 6 4 69.0 14
## grp=combination, employment=pt , gender=Male 1 1 8.0 NA
## grp=patchOnly, employment=ft , gender=Female 26 23 34.0 14
## grp=patchOnly, employment=ft , gender=Male 12 5 NA 6
## grp=patchOnly, employment=other, gender=Female 10 9 7.5 2
## grp=patchOnly, employment=other, gender=Male 9 8 14.0 2
## grp=patchOnly, employment=pt , gender=Female 6 6 18.0 1
## grp=patchOnly, employment=pt , gender=Male 1 1 14.0 NA
## 0.95UCL
## grp=combination, employment=ft , gender=Female NA
## grp=combination, employment=ft , gender=Male NA
## grp=combination, employment=other, gender=Female NA
## grp=combination, employment=other, gender=Male NA
## grp=combination, employment=pt , gender=Female NA
## grp=combination, employment=pt , gender=Male NA
## grp=patchOnly, employment=ft , gender=Female 84
## grp=patchOnly, employment=ft , gender=Male NA
## grp=patchOnly, employment=other, gender=Female NA
## grp=patchOnly, employment=other, gender=Male NA
## grp=patchOnly, employment=pt , gender=Female NA
## grp=patchOnly, employment=pt , gender=Male NA
ggsurv=ggsurvplot(fit3,
conf.int = T,
conf.int.style='step',
ggtheme = theme_bw())
ggsurv$plot+
theme_bw()+
theme(legend.position = 'bottom',
legend.text = element_text(size=4),
legend.title = element_text(size=4))+
facet_grid(cols =vars(employment),
rows=vars(gender))
Silakan anda interpretasikan dan coba untuk peubah yang lain.