5 votos

Cambio de punto en el modelo de supervivencia de Cox

Estoy buscando a un ajuste de riesgos proporcionales de Cox modelo de supervivencia. Mirando el K-M de la curva (por debajo) de una variable (con 2 categorías) parece que hay un cambio en los cocientes de riesgo en torno al día 110. Yo estaba pensando en el modelado de este con un cambio de modelo de punto.

KM-Curve

Estoy teniendo problemas para su aplicación. He definido days_ind como 1 si días>=110 y 0 en caso contrario. Luego de correr el modelo:

coxph(Surv(time=days,event=event2)~x*days_ind)

Recibo varios mensajes de advertencia acerca de la convergencia y los resultados no parecen tener ningún sentido.

Me estoy acercando a este en el camino correcto? Pensé en ponerlo en la interacción de x*días en su lugar, pero esto no convergen y también conduce a la extraña estimaciones.

13voto

John with waffle Puntos 3472

Usted necesita para hacer days_ind un tiempo variable dependiente. La forma en que se han codificado ahora, todo el mundo, cuyo observación (si el evento o la censura de tiempo) después de 110 días, tendrán la experiencia de otro peligro lo largo de toda su seguimiento , a continuación, aquellos cuya observación es antes de 110 días. Lo que queremos es por el peligro de "saltar" a 110 días.

No es totalmente sencillo para configurar este análisis en la survival paquete. Usted tiene que dividir el período de seguimiento de cada persona en dos períodos: hasta 110 días y después de eso. Nadie sobreviven más allá de los 110 días tendría dos observaciones: un derecho de censura en 110, y el otro truncada a la izquierda, en el 110 y tener el evento en el lado derecho. Afortunadamente, hay una función para hacer exactamente eso: survSplit.

Aquí está un ejemplo rápido con un built-en el conjunto de datos:

> library(survival)
> aml$id <- 1:nrow(aml)  # add a subject ID variable
> aml2 <- survSplit(aml,cut=10,end="time",start="start", event="status", episode="period")
> 
> subset(aml, id<=3)
  time status          x id
1    9      1 Maintained  1
2   13      1 Maintained  2
3   13      0 Maintained  3
> subset(aml2, id<=3)
   time status          x id start period
1     9      1 Maintained  1     0      0
2    10      0 Maintained  2     0      0
3    10      0 Maintained  3     0      0
25   13      1 Maintained  2    10      1
26   13      0 Maintained  3    10      1

Se puede ver que ahora hay dos observaciones para el id 2 y 3. El period variable corresponde a su days_ind.

Desde aquí se puede construir el modelo que desea, pero usted tiene que el código de los efectos cuidadosamente, debido a que el efecto de la period no puede ser estimado, ya que esta se refiere a diferentes tiempos.

> fit <- coxph(Surv(start, time, status) ~ 
   I((x=="Maintained")&(period==0)) + I((x=="Maintained")&(period==1)), data=aml2)
> fit
Call:
coxph(formula = Surv(start, time, status) ~ I((x == "Maintained") & 
    (period == 0)) + I((x == "Maintained") & (period == 1)), 
    data = aml2)


                                             coef exp(coef) se(coef)     z    p
I((x == "Maintained") & (period == 0))TRUE -1.498     0.224    1.120 -1.34 0.18
I((x == "Maintained") & (period == 1))TRUE -0.722     0.486    0.591 -1.22 0.22

Likelihood ratio test=3.79  on 2 df, p=0.150  n= 41, number of events= 18 

Aquí, los dos coeficientes de medir el efecto de los Mantenidos frente a los No-mantenido antes de 10 días y después de 10 días, respectivamente.

Usted también podría considerar el uso de la cmprsk paquete. Está diseñado para el análisis de la competencia de los riesgos, pero no hay nada que impida el uso de ella por sólo uno de los resultados. El beneficio es que tiene una forma más fácil de definir el tiempo-dependiente de las covariables (aunque realmente torpe sintaxis general):

> library(cmprsk)
> fit1 <- with(aml, crr(time, status, cov1=I(x=="Maintained"), cov2=I(x=="Maintained"), 
+                      tf=function(t)I(t<=10)))
> fit1
convergence:  TRUE 
coefficients:
    I(x == "Maintained")1 I(x == "Maintained")1*tf1 
                  -0.7213                   -0.7387 
standard errors:
[1] 0.5259 1.1500
two-sided p-values:
    I(x == "Maintained")1 I(x == "Maintained")1*tf1 
                     0.17                      0.52 

Tenga en cuenta que con la codificación diferentes, el significado de los coeficientes no es exactamente el mismo que el anterior.

1voto

Micah Puntos 814

Creo que un poco más de información es necesaria para entender por qué el modelo no es convergente. En primer lugar, una aclaración: es la variable "x" de un factor, que representa el rojo v. el negro de las curvas en la imagen?

Segundo, el uso de la "*" para indicar una interacción implica (en R sintaxis) que desee efectos principales de cada plazo, así como el término de interacción. Por lo que este se expanda para

x + days_ind + x:days_ind

Es posible que el efecto principal de days_ind está causando los problemas de convergencia. Yo sugeriría tratando de x+x:days_ind en lugar de x*days_ind. Así, su línea de R tendría este aspecto:

coxph(Surv(tiempo=días,evento=event2)~x+x:days_ind)

La esperanza de que funciona.

Su otra especificación: x*días no es una buena (o válida?) modelo de cox fórmula para la razón anterior, en que el principal efecto de "días" implica un cambio constante de peligro.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X