R: Tibble vs ggplot2 (grafik plot)
Saya mencoba mengikuti tutorial di R (https://rviews.rstudio.com/2017/09/25/survival-analysis-with-r/Komputer yang saya gunakan untuk bekerja tidak memiliki port USB atau koneksi internet - hanya memiliki R dengan beberapa perpustakaan terpasang. Komputer kerja saya memiliki "survival, ranger, ggplot2 dan dplyr". Namun, itu tidak memiliki "ggfortify". Saya mencoba mencari cara untuk memplot grafik dari tutorial tanpa 'ggfortify'. Berikut adalah kode yang saya gunakan di bawah ini:
#load libraries
library(survival)
library(ranger)
library(ggplot2)
library(dplyr)
#load data
data(veteran)
head(veteran)
#Part 1 : works
# Kaplan Meier Survival Curve
km <- with(veteran, Surv(time, status))
km_fit <- survfit(Surv(time, status) ~ 1, data=veteran)
#plot(km_fit, xlab="Days", main = 'Kaplan Meyer Plot') #base graphics is always ready
tibble(time = km_fit$time, surv = km_fit$surv,
min = km_fit$lower, max = km_fit$upper) %>%
ggplot(aes(x = time)) +
geom_line(aes(y = surv)) +
geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.3)
Namun, saya tidak bisa membuat ini berfungsi:
#Part 2: does not work
km_trt_fit <- survfit(Surv(time, status) ~ trt, data=veteran)
tibble(time = km_trt_fit$time, surv = km_trt_fit$surv,
min = km_trt_fit$lower, max = km_trt_fit$upper) %>%
ggplot(aes(x = time, group = factor(veteran$trt), colour = factor(veteran$trt), fill = factor(veteran$trt))) +
geom_line(aes(y = surv)) +
geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.3)
Error: Aesthetics must be either length 1 or the same as the data (114): group, colour and fill
Atau ini berfungsi: #
Bagian 3: tidak berfungsi
vet <- mutate(veteran, AG = ifelse((age < 60), "LT60", "OV60"),
AG = factor(AG),
trt = factor(trt,labels=c("standard","test")),
prior = factor(prior,labels=c("N0","Yes")))
aa_fit <-aareg(Surv(time, status) ~ trt + celltype +
karno + diagtime + age + prior ,
data = vet)
tibble(time = aa_fit$time, surv = aa_fit$surv, min = aa_fit$lower, max = aa_fit$upper) %>%
ggplot(aes(x = time)) +
geom_line(aes(y = surv)) +
geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.3)
Error: geom_line requires the following missing aesthetics: y
Bisakah seseorang membantu saya memperbaiki ini?
Terima kasih (Posting Sebelumnya: R: merencanakan grafik (ggplot vs autoplot) )
Jawaban
Anda harus melakukan beberapa pekerjaan detektif!
Saya punya waktu untuk bagian # 2 hari ini. Jadi: Ternyata informasi tentang strata ada di dalam elemen km_trt_fit$strata. Ini terlihat seperti ini:
km_trt_fit <- survfit(Surv(time, status) ~ trt, data=veteran)
km_trt_fit$strata
#> trt=1 trt=2
#> 61 53
Ini memberi tahu Anda bahwa ada 61 elemen trt=1dan 53 elemen trt=2. Saya tidak tahu mengapa ini tidak berjumlah 137 (jumlah baris dalam veteran) tapi saya berasumsi begitulah cara survfit()kerjanya. Ini juga merupakan alasan Anda mendapatkan kesalahan, karena data model yang dihasilkan memiliki jumlah baris yang berbeda dari bingkai data asli, yang Anda coba sertakan dengan menggunakan veteran$trt.
Solusi saya: Buat vektor stratadengan 61 dan 53 elemen trt=1dan trt=2masing - masing:
strata = km_trt_fit$strata
strata = rep(names(strata), times = strata)
Sertakan dalam data masukan Anda:
tibble(time = km_trt_fit$time, surv = km_trt_fit$surv,
min = km_trt_fit$lower, max = km_trt_fit$upper,
trt = factor(strata)) %>%
ggplot(aes(x = time, colour = trt, fill = trt)) +
geom_line(aes(y = surv)) +
geom_ribbon(aes(ymin = min, ymax = max), alpha = 0.3)
Hasilnya cukup dekat dengan apa yang dimiliki tutorial.
Saya tidak terlalu akrab dengan ggfortify tetapi tugasnya mungkin melakukan sesuatu yang serupa untuk Anda secara otomatis. Jika tidak ada, Anda harus menyelidiki struktur yang dihasilkan oleh fungsi model dan mengekstrak data secara manual seperti yang saya lakukan di atas.