📊 Eksplorasi & Deskriptif
#Eksplorasi & Deskriptif
library(survival)
library(survminer)
## Loading required package: ggplot2
## Loading required package: ggpubr
##
## Attaching package: 'survminer'
## The following object is masked from 'package:survival':
##
## myeloma
library(ggpubr)
library(ggplot2)
#1.Data set yang digunakan
data(ovarian)
## Warning in data(ovarian): data set 'ovarian' not found
head(ovarian)
## futime fustat age resid.ds rx ecog.ps
## 1 59 1 72.3315 2 1 1
## 2 115 1 74.4932 2 1 1
## 3 156 1 66.4658 2 1 2
## 4 421 0 53.3644 2 2 1
## 5 431 1 50.3397 2 1 1
## 6 448 0 56.4301 1 1 2
#2. Deskripsi Data
summary(ovarian)
## futime fustat age resid.ds
## Min. : 59.0 Min. :0.0000 Min. :38.89 Min. :1.000
## 1st Qu.: 368.0 1st Qu.:0.0000 1st Qu.:50.17 1st Qu.:1.000
## Median : 476.0 Median :0.0000 Median :56.85 Median :2.000
## Mean : 599.5 Mean :0.4615 Mean :56.17 Mean :1.577
## 3rd Qu.: 794.8 3rd Qu.:1.0000 3rd Qu.:62.38 3rd Qu.:2.000
## Max. :1227.0 Max. :1.0000 Max. :74.50 Max. :2.000
## rx ecog.ps
## Min. :1.0 Min. :1.000
## 1st Qu.:1.0 1st Qu.:1.000
## Median :1.5 Median :1.000
## Mean :1.5 Mean :1.462
## 3rd Qu.:2.0 3rd Qu.:2.000
## Max. :2.0 Max. :2.000
#Distribusi Status (fustat)
table(ovarian$fustat)
##
## 0 1
## 14 12
📈 Analisis Kaplan–Meier
#Kurva Kaplan-Meier
km_fit <- survfit(Surv(futime, fustat) ~ rx, data = ovarian)
ggsurvplot(
km_fit,
data = ovarian,
pval = TRUE,
risk.table = TRUE,
surv.median.line = "hv",
title = "Kaplan–Meier Curve by Treatment (rx)"
)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the ggpubr package.
## Please report the issue at <https://github.com/kassambara/ggpubr/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Ignoring unknown labels:
## • colour : "Strata"

#Uji Log-Rank
survdiff(Surv(futime, fustat) ~ rx, data = ovarian)
## Call:
## survdiff(formula = Surv(futime, fustat) ~ rx, data = ovarian)
##
## N Observed Expected (O-E)^2/E (O-E)^2/V
## rx=1 13 7 5.23 0.596 1.06
## rx=2 13 5 6.77 0.461 1.06
##
## Chisq= 1.1 on 1 degrees of freedom, p= 0.3
⚙️ Pemodelan Cox Proportional Hazards
#5. Estimasi Model
fit <- coxph(
Surv(futime, fustat) ~ age + resid.ds + rx + ecog.ps,
data = ovarian
)
summary(fit)
## Call:
## coxph(formula = Surv(futime, fustat) ~ age + resid.ds + rx +
## ecog.ps, data = ovarian)
##
## n= 26, number of events= 12
##
## coef exp(coef) se(coef) z Pr(>|z|)
## age 0.12481 1.13294 0.04689 2.662 0.00777 **
## resid.ds 0.82619 2.28459 0.78961 1.046 0.29541
## rx -0.91450 0.40072 0.65332 -1.400 0.16158
## ecog.ps 0.33621 1.39964 0.64392 0.522 0.60158
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## exp(coef) exp(-coef) lower .95 upper .95
## age 1.1329 0.8827 1.0335 1.242
## resid.ds 2.2846 0.4377 0.4861 10.738
## rx 0.4007 2.4955 0.1114 1.442
## ecog.ps 1.3996 0.7145 0.3962 4.945
##
## Concordance= 0.807 (se = 0.068 )
## Likelihood ratio test= 17.04 on 4 df, p=0.002
## Wald test = 14.25 on 4 df, p=0.007
## Score (logrank) test = 20.81 on 4 df, p=3e-04
#6. Uji Asumsi Proportional Hazards
ph_test <- cox.zph(fit)
ph_test
## chisq df p
## age 0.170 1 0.680
## resid.ds 1.155 1 0.282
## rx 0.595 1 0.440
## ecog.ps 2.928 1 0.087
## GLOBAL 4.455 4 0.348
ggcoxzph(ph_test)

#7. Kurva Survival Terprediksi
ggadjustedcurves(
fit,
data = ovarian,
variable = "rx",
legend.title = "Treatment",
title = "Adjusted Survival Curves by Treatment"
)
## Ignoring unknown labels:
## • fill : "Treatment"
## • linetype : "Treatment"
## • shape : "Treatment"
