[R-es] Gráfico tiempos de supervivencia

Griera- gr|er@ @end|ng |rom y@ndex@com
Mar Ago 6 17:16:22 CEST 2019


Hola Francisco:

Muchas gracias por este refinamiento. 

Tienes razón, el gráfico de Lexis representa mucho mejor los datos. 

Y gracias por el código. Lo guardo también para el futuro.

Saludos

On Tue, 6 Aug 2019 10:37:24 +0200
Francisco Viciana <franciscoj.viciana using juntadeandalucia.es> wrote:

> Hola, aunque con un poco de retraso, hago una aportación a este hilo:
> 
> Si tienes un problema con dos escalas de tiempo sobre las que 
> evolucionan las lineas de seguimiento, creo que es mejor que hacer un 
> solo gráfico en forma de   diagrama de Lexis, que dos gráficos 
> independientes. Muestro ejemplo usando el paquete "Epi":
> 
> # Código ----------------------------------------------------
> 
> #---- Generar Datos ----
> rm(list = ls())
> set.seed(20)
> XTIEMPO_2 = c(38, 2, 34, 29, 30, 3, 14, 8, 18, 31) # Per fe el gràfic 
> amb t=0
> set.seed(30)
> XTIEMPO_0 = sample(1:40, 10, replace=F)
> XTIEMPO_F = XTIEMPO_0 + XTIEMPO_2
> set.seed(20)
> XDEF = as.factor(sample(c("Mort", "Viu"), 10, replace=T))
> 
> DATOS <- data.frame (
>    ID         = c (1:10)
>    , TIEMPO_0 = XTIEMPO_0
>    , TIEMPO_F = XTIEMPO_F
>    , TIEMPO_2 = XTIEMPO_2 # Per fe el gràfic amb t=0
>    , DEF      = XDEF
> )
> 
> 
> names(DATOS)[2:5] <- c('marriage.age',
>                         'output.age',
>                         'duration','output')
> 
> DATOS$output <- factor(DATOS$output,levels = c('Casado','Viu','Mort'))
> DATOS$entry  <- factor('Casado',levels = c('Casado','Viu','Mort'))
> 
> # Crea objeto Lexis:
> library(Epi)
> lx.Datos <- Lexis( entry=list(antiguedad.del.matrimonio=0,
>                                 edad=marriage.age),
>                      exit=list(edad=output.age),
>                      entry.status = entry ,
>                      exit.status = output ,id=ID,data=DATOS,merge=F)
> 
> #----  Muestra datos originales y transformados
> DATOS
> lx.Datos
> 
> #---- Grafica: ----
> 
> plot.Lexis(lx.Datos,time.scale = 1:2,col='blue')
> with(lx.Datos, points(x=lex.dur,y=edad+lex.dur,
> pch=c(NA,19,3)[as.integer(lex.Xst)],
>                        col=1 ))
> grid()
> legend('bottomright',legend = levels(lx.Datos$lex.Xst)[-1],
>         pch=c(19,3),col=1)
> 
> ## ----------------------------------------------
> 
> On 19/7/19 15:03, Griera wrote:
> > Hola:
> >
> > Por si a alguien le interesa para un curso, aquí coloco la versión
> > definitiva de los dos gráficos que quería hacer (uno en escala del tiempo del calendario y la otra el tiempo de seguimiento) realizados gracias a la ayuda
> > de Carlos Ortega.
> >
> > Muchas gracias y saludos.
> >
> > # Código ----------------------------------------------------
> > set.seed(20)
> > # TIEMPO_2 = sample(1:40, 10, replace=F)
> > XTIEMPO_2 = c(38, 2, 34, 29, 30, 3, 14, 8, 18, 31) # Per fe el gràfic amb t=0
> > set.seed(30)
> > XTIEMPO_0 = sample(1:40, 10, replace=F)
> > XTIEMPO_F = XTIEMPO_0 + XTIEMPO_2
> > set.seed(20)
> > # XDEF     = as.factor(sample(c(0,1), 10, replace=T))
> > XDEF = as.factor(sample(c("Mort", "Viu"), 10, replace=T))
> >
> > DATOS <- data.frame (
> > 	  ID         = c (1:10)
> > 	, TIEMPO_0 = XTIEMPO_0
> > 	, TIEMPO_F = XTIEMPO_F
> > 	, TIEMPO_2 = XTIEMPO_2 # Per fe el gràfic amb t=0
> > 	, DEF      = XDEF
> > )
> >
> > library(ggplot2)
> >
> > ## Gràfic amb temps calendari
> > ggplot( data = DATOS ) +
> >    geom_point( aes(x = TIEMPO_F, y = ID , shape = DEF), size = 5 ) +
> >    geom_segment( aes( x = TIEMPO_0, y = ID,   xend = TIEMPO_F, yend = ID ) ) +
> >    scale_shape_manual (values = c(4, 16))  +
> >    xlim (0, 70) +
> >    xlab ("Data (temps del calendari)") +
> >    ylab ("Persones") +
> >     guides(colour = FALSE) +
> >     labs(shape = ' ', values = c(4, 16)) +
> >     scale_y_discrete() +
> >    theme_classic() +
> >    theme(axis.text.x = element_blank(), axis.ticks.x = element_blank())
> > ## Modificat
> > str (DATOS)
> > ggplot( data = DATOS ) +
> >    geom_point( aes(x = TIEMPO_2, y = ID , shape = DEF), size = 5 ) +
> >    scale_shape_manual (values = c(4, 16))  +
> >    geom_segment( aes( x = 0, y = ID,   xend = TIEMPO_2, yend = ID ) ) +
> >    xlim (0, 70) +
> >    xlab ("Temps de seguiment") +
> >    ylab ("Persones") +
> >     guides(colour = FALSE) +
> >     labs(shape = ' ', values = c(4, 16)) +
> >     scale_y_discrete() +
> >    theme_classic()
> >
> > # Código ----------------------------------------------------
> >
> >
> > On Thu, 18 Jul 2019 14:21:24 +0200
> > Carlos Ortega <cof using qualityexcellence.es> wrote:
> >  
> >> Hola,
> >>
> >> Sí, lo puedes hacer de esta forma...
> >>
> >> #-----------------
> >> set.seed(20)
> >> DATOS <- data.frame (
> >>      ID      = c (1:10)
> >>    , TIEMPO  = sample(1:40, 10, replace=F)
> >>    , DEF     = as.factor(sample(c(0,1), 10, replace=T))
> >> )
> >>
> >> library(ggplot2)
> >>
> >>    ggplot( data = DATOS ) +
> >>     geom_point( aes(x = TIEMPO, y = ID , shape = DEF, color = DEF), size = 5
> >> ) +
> >>     geom_segment( aes( x = 0, y = ID,  xend = TIEMPO, yend = ID ) ) +
> >>      guides(colour = FALSE) +
> >>      labs(shape = 'LEGEND') +
> >>      scale_y_discrete() +
> >>     theme_minimal()
> >> #-----------------
> >>
> >> E incluso puedes reproducirlo usando fuentes parecidas a la de los comics
> >> con el paquete "xkcd".
> >>
> >> Saludos,
> >> Carlos Ortega
> >> www.qualityexcellence.es
> >>
> >>
> >>
> >> El jue., 18 jul. 2019 a las 13:05, Griera-yandex (<griera using yandex.com>)
> >> escribió:
> >>  
> >>> Hola Pedro:
> >>>
> >>> Gracias por la ayuda. No conocía esta manera más elegante de mostrar las
> >>> curvas de Kaplan-Meier. Te la compro.
> >>>
> >>> En realidad quería mostrar un gráfico con la longitud de les tiempos de
> >>> seguimiento y al final un símbolo para indicar el estado. Seria un gráfico
> >>> similar a:
> >>>
> >>> https://miro.medium.com/max/700/1*yHhG4TVcAAi29Ln88t0_5Q.png
> >>>
> >>> Pero no encuentro la manera de hacerlo. Igual no se puede.
> >>>
> >>> Muchas gracias y saludos.
> >>>
> >>> On Thu, 18 Jul 2019 10:28:37 +0000
> >>> PEDRO CONCEJERO CEREZO <pedro.concejerocerezo using telefonica.com> wrote:
> >>>  
> >>>> Hola, te vale esto? Es forma estandar de representar graficos  
> >>> supervivencia  
> >>>> Basado en esto:
> >>>>
> >>>> https://rviews.rstudio.com/2017/09/25/survival-analysis-with-r/
> >>>>
> >>>> set.seed(20)
> >>>>
> >>>> DATOS <- data.frame (
> >>>>    ID      = c (1:10)
> >>>>    , TIEMPO  = sample(1:40, 10, replace=F)
> >>>>    , DEF     = sample(0:1, 10, replace=T)
> >>>> )
> >>>>
> >>>> DATOS
> >>>>
> >>>> library(survival)
> >>>>
> >>>> DATOS$DEF <- as.numeric(DATOS$DEF)
> >>>> DATOS$TIEMPO <- as.numeric(DATOS$TIEMPO)
> >>>>
> >>>> s <- Surv(DATOS$TIEMPO, DATOS$DEF)
> >>>> head(s)
> >>>>
> >>>> ## Kaplan-Meier estimator.
> >>>> km <- survfit(s ~ 1,
> >>>>                data = DATOS,
> >>>>                conf.type = "log-log")
> >>>>
> >>>> ## Show object
> >>>> km
> >>>>
> >>>> summary(km)
> >>>>
> >>>> plot(km)
> >>>>
> >>>> # Instala las librerías necesarias:
> >>>> library(ranger)
> >>>> library(ggplot2)
> >>>> library(dplyr)
> >>>> library(ggfortify)
> >>>>
> >>>> autoplot(km)
> >>>>
> >>>>
> >>>> El 18/07/2019 a las 12:00, r-help-es-request using r-project.org<mailto:  
> >>> r-help-es-request using r-project.org> escribió:  
> >>>> Envíe los mensajes para la lista R-help-es a
> >>>>          r-help-es using r-project.org<mailto:r-help-es using r-project.org>
> >>>>
> >>>> Para subscribirse o anular su subscripción a través de la WEB
> >>>>          https://stat.ethz.ch/mailman/listinfo/r-help-es
> >>>>
> >>>> O por correo electrónico, enviando un mensaje con el texto "help" en
> >>>> el asunto (subject) o en el cuerpo a:
> >>>>          r-help-es-request using r-project.org<mailto:  
> >>> r-help-es-request using r-project.org>  
> >>>> Puede contactar con el responsable de la lista escribiendo a:
> >>>>          r-help-es-owner using r-project.org<mailto:  
> >>> r-help-es-owner using r-project.org>  
> >>>> Si responde a algún contenido de este mensaje, por favor, edite la
> >>>> linea del asunto (subject) para que el texto sea mas especifico que:
> >>>> "Re: Contents of R-help-es digest...". Además, por favor, incluya en
> >>>> la respuesta sólo aquellas partes del mensaje a las que está
> >>>> respondiendo.
> >>>>
> >>>>
> >>>> Asuntos del día:
> >>>>
> >>>>     1. Gráfico tiempos de supervivencia (Griera-yandex)
> >>>>
> >>>> ----------------------------------------------------------------------
> >>>>
> >>>> Message: 1
> >>>> Date: Thu, 18 Jul 2019 10:18:42 +0200
> >>>> From: Griera-yandex <griera using yandex.com><mailto:griera using yandex.com>
> >>>> To: Lista R <r-help-es using r-project.org><mailto:r-help-es using r-project.org>
> >>>> Subject: [R-es] Gráfico tiempos de supervivencia
> >>>> Message-ID: <20190718101842.280414d5 using debian-dde>
> >>>> Content-Type: text/plain; charset="utf-8"
> >>>>
> >>>> Buenos días a todos:
> >>>>
> >>>> Alguien me puede ayudar a hacer (si se puede) con unos datos similares a:
> >>>>
> >>>> set.seed(20)
> >>>> DATOS <- data.frame (
> >>>>        ID      = c (1:10)
> >>>>      , TIEMPO  = sample(1:40, 10, replace=F)
> >>>>      , DEF     = sample(0:1, 10, replace=T)
> >>>>                      );DATOS
> >>>>
> >>>> un gráfico que muestre los tiempos de supervivencia similar a:
> >>>> https://miro.medium.com/max/700/1*yHhG4TVcAAi29Ln88t0_5Q.png
> >>>>
> >>>> Lo he intentado con la función followup.plot del paquete
> >>>> "epiDisplay" (  
> >>> https://cran.r-project.org/web/packages/epiDisplay/index.html),  
> >>>> pero no encuentro la forma.
> >>>>
> >>>> Muchas gracias y saludos.
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> ------------------------------
> >>>>
> >>>> Subject: Pié de página del digest
> >>>>
> >>>> _______________________________________________
> >>>> R-help-es mailing list
> >>>> R-help-es using r-project.org<mailto:R-help-es using r-project.org>
> >>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
> >>>>
> >>>>
> >>>> ------------------------------
> >>>>
> >>>> Fin de Resumen de R-help-es, Vol 125, Envío 7
> >>>> *********************************************
> >>>>
> >>>>
> >>>> --
> >>>> Pedro Concejero
> >>>> Telefónica CDO - 4th Platform - Internal Use Cases
> >>>> E-mail: pedro.concejerocerezo using telefonica.com<mailto:
> >>> pedro.concejerocerezo using telefonica.com>
> >>>> skype: pedro.concejero
> >>>> twitter @ConcejeroPedro<https://twitter.com/ConcejeroPedro>
> >>>> linkedin pedroconcejero<http://www.linkedin.com/in/pedroconcejero/es>
> >>>> eRReRo feliz, me puedes encontrar en gRupo R madRid <  
> >>> http://madrid.r-es.org/?s=concejero&searchsubmit.x=21&searchsubmit.y=13>  
> >>>> ________________________________
> >>>>
> >>>> Este mensaje y sus adjuntos se dirigen exclusivamente a su destinatario,  
> >>> puede contener información privilegiada o confidencial y es para uso
> >>> exclusivo de la persona o entidad de destino. Si no es usted. el
> >>> destinatario indicado, queda notificado de que la lectura, utilización,
> >>> divulgación y/o copia sin autorización puede estar prohibida en virtud de
> >>> la legislación vigente. Si ha recibido este mensaje por error, le rogamos
> >>> que nos lo comunique inmediatamente por esta misma vía y proceda a su
> >>> destrucción.  
> >>>> The information contained in this transmission is privileged and  
> >>> confidential information intended only for the use of the individual or
> >>> entity named above. If the reader of this message is not the intended
> >>> recipient, you are hereby notified that any dissemination, distribution or
> >>> copying of this communication is strictly prohibited. If you have received
> >>> this transmission in error, do not read it. Please immediately reply to the
> >>> sender that you have received this communication in error and then delete
> >>> it.  
> >>>> Esta mensagem e seus anexos se dirigem exclusivamente ao seu  
> >>> destinatário, pode conter informação privilegiada ou confidencial e é para
> >>> uso exclusivo da pessoa ou entidade de destino. Se não é vossa senhoria o
> >>> destinatário indicado, fica notificado de que a leitura, utilização,
> >>> divulgação e/ou cópia sem autorização pode estar proibida em virtude da
> >>> legislação vigente. Se recebeu esta mensagem por erro, rogamos-lhe que nos
> >>> o comunique imediatamente por esta mesma via e proceda a sua destruição  
> >>>>        [[alternative HTML version deleted]]
> >>>>
> >>>> _______________________________________________
> >>>> R-help-es mailing list
> >>>> R-help-es using r-project.org
> >>>> https://stat.ethz.ch/mailman/listinfo/r-help-es  
> >>> _______________________________________________
> >>> R-help-es mailing list
> >>> R-help-es using r-project.org
> >>> https://stat.ethz.ch/mailman/listinfo/r-help-es
> >>>  
> >>
> >> -- 
> >> Saludos,
> >> Carlos Ortega
> >> www.qualityexcellence.es  
> > _______________________________________________
> > R-help-es mailing list
> > R-help-es using r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >  
> -- 
> +--------------------------------------------------------------
> | Francisco J. Viciana Fernández
> | Dpto. Indicadores Demográficos
> | Servicio de Estadísticas Demográficas y Sociales
> | Instituto de Estadística y Cartografía de Andalucía
> | Leonardo Da Vinci, nº 21. Isla de La Cartuja.
> | 41071 SEVILLA.
> | franciscoj.viciana using juntadeandalucia.es
> +--------------------------------------------------------------
> 



Más información sobre la lista de distribución R-help-es