[R-es] Gráfico tiempos de supervivencia

Francisco Viciana |r@nc|@coj@v|c|@n@ @end|ng |rom junt@de@nd@|uc|@@e@
Jue Ago 8 09:42:50 CEST 2019


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
+--------------------------------------------------------------


------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: franciscoj_viciana.vcf
Type: text/x-vcard
Size: 4 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20190808/c07f7445/attachment.vcf>


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