[R-es] ayuda con análisis de supervivencia

Francisco Viciana franciscoj.viciana en juntadeandalucia.es
Jue Ago 20 10:48:07 CEST 2015


Tal y como lo entiendo, después de algunos mensajes, se podría 
considerar tu problema como un análisis de Supervivencia, y por lo tanto 
emplear las funciones "Surv" y "coxph", si consideramos que "bmi"  
medido en cada entrevista es un buen "proxi" de la edad cronológica del 
individuo, tal como parecen indicar las correcciones que pones en el 
mensaje.

Aun asi me chirría un poco, ¿porque no usar la edad al evento o censura 
como seria lo habitual, si se dispusiera de ella?.  Si no se dispone de 
ella habria que valorar si es mejor usar el "bmi" o quizás la "altura" 
como mejor variable proxi de la edad. Si se dispone de la edad, se 
podria buscar una manera de introducir el "bmi" medido en cada 
observación como variable tiempo dependiente (por ejemplo los 
incrementos anuales medios del "bmi" entre observaciones). El "bmi0" en 
principio parece una co-variable tiempo independiente, si todo los 
sujetos son valorados a una edad equivalente a comienzo del estudio.

Con respeto, a mi comentarios sobre la imprecisa datación del tiempo (o 
la variable proxi que se use) en los abandonos,  me confundí  un poco al 
mezclar "bmi0", con "bmi. Aun asi, sigo viendo problemas si la relación 
de edad y bmi no lineal, si no logística como supongo.

He reformado tu código un poco y planteado otra alternativa de análisis 
de un modelo único con interación:

## ++++++++++++++++++++++
load('~/Escritorio/dataframe.Rdata')
require(survival)
require(dplyr)
df0$apoe4 <-  relevel(df0$apoe4,ref='no-E4')

fff <-  function (x){
   dfx<- filter(df0,df0$bmi0==x)
   surv2=Surv(dfx$bmi,dfx$MetS)
   km2=survfit(surv2~dfx$apoe4)##start.time=20,type='kaplan')
   cox=list(coxph(surv2~dfx$apoe4))
}
modelos <-  sapply(levels(df0$bmi0),fff )
pp <- t(sapply(modelos, function(e) coef(summary(e)) ))
colnames(pp) <- c( 'coef:E4/no.E4','exp(coef)','se(coef)',  'z', 'Pr(>|z|)')
pp


## Alternativa:
## Graficar funciones de supervivencia de KM
S    <- Surv(df0$bmi,df0$MetS)
km0  <- survfit(S~df0$apoe4+df0$bmi0)

plot(km0,lty=2:1,col=2:4,xlim=c(20,41),xlab='BMI at event 
date',main=x,mark.time = F)
etq<- as.vector(t(outer( c('E4.','no-E4'),levels(df0$bmi0), FUN='paste')))
legend('bottomleft',etq,lty=rep(2:1,each=3), col=2:4)

## realiza un COX con interacion,
## no equivalente a la realiazion de tres modelos distintito para cada bmi0
(coxph(S~df0$apoe4 * df0$bmi0))

## ++++++++++++++++++++++


Respondo también a la lista, que en el anterior mensaje no hice por error.

On 18/08/15 12:07, JM Arbones wrote:
> Hola Francisco,
> Muchas gracias por tu ayuda. Te intento contestar a tus sugerencias.
>
>> Con los datos contenidos en le data.frame de la dirección del enlace 
>> yo no clasificaría este problema de "análisis de supervivencia", ya 
>> que no se dispone, o no se ha incluido,  la variable tiempo de 
>> observación: (0,7,10,15,20 y 25 años)
>>
> Utilicé el termino análisis de supervivencia porque intentaba utilizar 
> las herramientas propias de este tipo de análisis (regresión de Cox, 
> riesgo cumulativos, etc).
>
>
>> No creo muy adecuado remplazar la variable tiempo (hasta aparición 
>> del evento u censura por la variable "bmi" (Body Mass Index), esto 
>> solo se podría hacer si confirmáramos la existencia de una fuerte 
>> correlación entre el BMI y el tiempo de seguimiento, lo cual no creo 
>> que sea del todo correcto, al menos en las especie humana (si es esta 
>> especie de la que estamos hablando).
>>
> El ~90% de los miembros de la cohorte de 4800 individuos tuvieron un 
> incremento de BMI positivo a lo largo de los 25 años de seguimiento.
> Al correlacionar la media de todos los BMI's en cada punto de 
> observacion con los años de seguimiento, me sale una r= 0.98, p=0.0004.
>
>
>
>> Por otro lado,  si existiera una fuerte asociación entre el "bmi0" y 
>> el tiempo de seguimiento (lo que permitiría usar "bmi0" en lugar del 
>> tiempo, aun quedaría el problema de que en los datos proporcionados 
>> la censura por abandono (del tipo censura por intervalo, que puede 
>> ocurrir en edades tempranas)  no es distinguible de de la censura por 
>> cierre del estudio (censura por la derecha, y que esta asociado 
>> siempre al tiempo 25). Este echo hace muy difícil, si no imposible, 
>> llegar a conclusiones fiables con la información suministrada.
> Esto no lo entiendo muy bien, el bmi que estoy utilizando para hacer 
> el análisis es el que tiene cada individuo cuando ocurre el evento, o 
> en caso de que no tengan el evento, el bmi que tienen al final del 
> estudio o cuando lo abandonan.
> Otra duda que me surge es si debería utilizar una censura por la 
> izquierda, por que cada individuo empieza con un bmi distinto. ?quizás 
> debería utilizar solo el intervalo de bmi que recorre cada individuo?
>
>
>>
>> Con respecto al código suministrado, la función "filter" produce un 
>> error en mi sistema, supongo que se encuentra redefinida en parte del 
>> código no enviado.
> filter es del paquete dplyr, creo que en este caso se podría utilizar 
> subset del paquete base.
>
>
> Un saludo y, otra vez, gracias por la ayuda y sugerencias.
>
> Jose Miguel
>
>
>
>>
>> On 02/08/15 19:19, JM ARBONES wrote:
>>> Hola a todos,
>>> -Estoy estudiando el efecto de dos genotipos (~tratamientos) en la 
>>> aparición de síndrome metabólico (MetS) con datos longitudinales 
>>> recogidos a tiempo 0,7,10,15,20 y 25 años.
>>>
>>> -He hecho un dataframe con las siguientes variables
>>> MetS: Síndrome Metabólico (Si=1,No=0)
>>> bmi: Indice de masa corporal (IMC) cuando se produce la conversión a 
>>> MetS+ . Para los que permancen MetS-, esta variable indica el bmi 
>>> cuando hay censura (por abandono del estudio o al finalizar el 
>>> estudio en el año 25).
>>> bmi0: IMC al inicio del estudio (categórica, 
>>> levels=normal/overweight/obese)
>>> apoE4: Genotipo de interés (E4, no-E4)
>>>
>>> -Mi hipótesis es que la interacción genotipo~MetS depende del IMC al 
>>> principio del estudio. Concretamente, individuos 'overweight' al 
>>> inicio del estudio y con el genotipo E4 hacen la conversión a MetS+ 
>>> a valores de IMC mas bajos que los que tienen el genotipo no-E4. 
>>> Este fenómeno no ocurriría en los 'normal' y 'obese'.
>>>
>>> -He creado unos objetos Surv, pero en lugar de utilizar el tiempo 
>>> hasta evento (MetS+) estoy utilizando el bmi hasta el evento. Las 
>>> gráficas que resultan al hacer el análisis de supervivencia 
>>> parecerían confirmar mi hipótesis, pero no se si lo que estoy 
>>> haciendo es una aberración estadística. Tampoco se si los 
>>> coeficientes de la regresión de Cox tienen sentido al no utilizar la 
>>> variable tiempo.
>>>
>>> ?Alguien me podría 1)decir si lo que estoy haciendo tiene sentido y 
>>> 2) como interpretar los resultados (regresión de Cox y gráficas)?
>>> Si a alguien se anima a contestar, adjunto un link con los datos 
>>> (.Rdata) y el script que he utilizado en el análisis.
>>>
>>>
>>> https://www.dropbox.com/s/d96itird8ms42yx/dataframe.Rdata?dl=0 
>>> <https://www.dropbox.com/s/d96itird8ms42yx/dataframe.Rdata?dl=0>
>>>
>>> sapply(levels(df0$bmi0),function (x){ #####SURVIVAL CURVE
>>>    dfx=filter(df0,bmi0==x)
>>>       surv2=Surv(dfx$bmi,dfx$MetS)
>>>    km2=survfit(surv2~dfx$apoe4)##start.time=20,type='kaplan')
>>>    plot(km2,lty=2:1,xlim=c(20,41),xlab='BMI at 
>>> onset',main=x,mark.time = F)
>>>    legend('bottomleft',c('E4','no-E4'),lty=2:1)
>>>    cox=list(coxph(surv2~relevel(dfx$apoe4,ref='no-E4')))
>>> })
>>>
>>> sapply(levels(df0$bmi0),function (x){ #####CUMULATIVE HAZARDs
>>>    dfx=filter(df0,bmi0==x)
>>>       surv2=Surv(dfx$bmi,dfx$MetS)
>>>    km2=survfit(surv2~dfx$apoe4)
>>>    plot(km2,lty=2:1,xlim=c(20,41),xlab='BMI at 
>>> onset',main=x,mark.time = F,fun='cumhaz')
>>>    legend('topleft',c('E4','no-E4'),lty=2:1)
>>>    })
>>>
>>> Muchas gracias y un saludo
>>>
>>> Jose Miguel
>>>
>>> -------------------------------------------------------------------
>>>
>>> Jose Miguel Arbones-Mainar, PhD
>>> Unidad de Investigación Traslacional
>>> Instituto Aragones de Ciencias de la Salud
>>> Hospital Universitario Miguel Servet
>>> Pº Isabel la Católica, 1-3
>>> 50009 Zaragoza (Spain)
>>> Tel: +34 976 769 565
>>> Fax: +34 976 769 566
>>> www.adipofat.com <http://www.adipofat.com/>
>>>
>>>
>>>
>>>
>>> ----------------------------------------------------------------------------------- 
>>>
>>> Jose Miguel Arbones-Mainar
>>> www.adipofat.com <http://www.adipofat.com/>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>     [[alternative HTML version deleted]]
>>>
>>> _______________________________________________
>>> R-help-es mailing list
>>> R-help-es en r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>
>>
>
>

-- 
+--------------------------------------------------------------
| Francisco J. Viciana Fernández
| Coordinador del Registro de Población
| 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 en juntadeandalucia.es
+--------------------------------------------------------------



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