R: Tibble - ggplot2 (grafiklerin çizimi)
R'de bir öğreticiyi takip etmeye çalışıyorum (https://rviews.rstudio.com/2017/09/25/survival-analysis-with-r/İş için kullandığım bilgisayarda bir USB bağlantı noktası veya internet bağlantısı yok - sadece birkaç kitaplık kurulu olan R'ye sahip. İş bilgisayarımda "survival, ranger, ggplot2 ve dplyr" var. Ancak, "ggfortify" özelliği yoktur. Öğreticideki grafikleri 'ggfortify' olmadan nasıl çizeceğimi anlamaya çalışıyorum. Aşağıda kullandığım kod:
#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)
Ancak, bunu çalıştıramıyorum:
#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
Veya bunun işe yaraması için:
# Bölüm 3: çalışmıyor
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
Lütfen birisi bunları düzeltmeme yardım edebilir mi?
Teşekkürler (Önceki Yazı: R: grafikleri çizme (ggplot vs autoplot) )
Yanıtlar
Biraz dedektiflik yapman gerekecek!
Bugün 2. bölüm için vaktim var. Öyleyse: Katmanlar hakkındaki bilgilerin öğede bulunduğu ortaya çıktı km_trt_fit$strata. Şöyle görünüyor:
km_trt_fit <- survfit(Surv(time, status) ~ trt, data=veteran)
km_trt_fit$strata
#> trt=1 trt=2
#> 61 53
Bu size 61 elementin trt=1ve 53 elementin olduğunu söylüyor trt=2. Bunların toplamı neden 137'ye kadar çıkmadığını bilmiyorum (içerideki satır sayısı veteran) ama sanırım bu şekilde survfit()çalışıyor. Hatayı almanızın nedeni de budur, çünkü ortaya çıkan model verilerinin, kullanarak eklemeye çalıştığınız orijinal veri çerçevesinden farklı sayıda satırları vardır veteran$trt.
Benim çözümüm: strata61 ve 53 elemanlı bir vektör oluşturun trt=1ve trt=2sırasıyla:
strata = km_trt_fit$strata
strata = rep(names(strata), times = strata)
Bunu giriş verilerinize ekleyin:
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)
Sonuç, öğreticinin sahip olduğu şeye oldukça yakın.
Ggfortify'a fazla aşina değilim ama işi muhtemelen sizin için otomatik olarak benzer bir şey yapmak. Onun yokluğunda, model fonksiyonları tarafından üretilen yapıları araştırmanız ve yukarıda yaptığım gibi verileri manuel olarak çıkarmanız gerekecektir.