R: Tibble vs ggplot2 (tracé de graphiques)
J'essaye de suivre un tutoriel en R (https://rviews.rstudio.com/2017/09/25/survival-analysis-with-r/L'ordinateur que j'utilise pour mon travail n'a pas de port USB ou de connexion Internet - il n'a que R avec quelques bibliothèques installées. Mon ordinateur de travail a "survival, ranger, ggplot2 et dplyr". Cependant, il n'a pas "ggfortify". J'essaie de comprendre comment tracer les graphiques du didacticiel sans «ggfortify». Voici le code que j'utilise ci-dessous:
#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)
Cependant, je ne peux pas faire fonctionner cela:
#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
Ou ceci pour fonctionner:
#Partie 3: ne fonctionne pas
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
Quelqu'un peut-il m'aider à corriger ces problèmes?
Merci ( Article précédent: R: tracer des graphiques (ggplot vs autoplot) )
Réponses
Vous allez devoir faire un travail de détective!
J'ai le temps pour la partie 2 aujourd'hui. Donc: Il s'avère que les informations sur les strates sont contenues dans l'élément km_trt_fit$strata
. Cela ressemble à ceci:
km_trt_fit <- survfit(Surv(time, status) ~ trt, data=veteran)
km_trt_fit$strata
#> trt=1 trt=2
#> 61 53
Cela vous indique qu'il existe 61 éléments de trt=1
et 53 éléments de trt=2
. Je ne sais pas pourquoi ceux-ci ne totalisent pas 137 (le nombre de lignes veteran
) mais je suppose que c'est comme ça que ça survfit()
marche. C'est également la raison pour laquelle vous obtenez l'erreur, car les données de modèle résultantes ont un nombre de lignes différent de celui du bloc de données d'origine, que vous essayez d'inclure en utilisant veteran$trt
.
Ma solution: créer un vecteur strata
avec 61 et 53 éléments de trt=1
et trt=2
respectivement:
strata = km_trt_fit$strata
strata = rep(names(strata), times = strata)
Incluez cela dans vos données d'entrée:
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)
Le résultat est assez proche de ce que propose le didacticiel.
Je ne suis pas trop familier avec ggfortify mais son travail est probablement de faire quelque chose de similaire pour vous automatiquement. En son absence, vous devrez étudier les structures produites par les fonctions du modèle et extraire les données manuellement comme je l'ai fait ci-dessus.