analisis.supervivencia.fnc
Objetivo
Estima modelos de supervivencia no parámetrica mediante el algoritmo de Kaplan-Meier y la regresión (paramétrica) de Cox para la estimación de la función de supervivencia predicha por las variables covariantes definidas por el usuario.
KAPLAN-MEIER
Partiremos de la base de datos leukemia de la librería survival para estimar en primer lugar la curva de supervivencia de Kaplan-Meier utilizando la función analisis.supervivencia.fnc.
head(leukemia)
time status x
1 9 1 Maintained
2 13 1 Maintained
3 13 0 Maintained
4 18 1 Maintained
5 23 1 Maintained
6 28 0 Maintained
Podemos ver que tenemos tres variables: time mide el tiempo de supervivencia de los participantes en el estudio. Los cuales unos siguen vivos en el momento de la medición (datos censurados status=0) o han fallecido (status=1).
Deseamos en primer lugar valorar la función de supervivencia de la leucemia a partir del tiempo de supervivencia que presentan los participantes.
analisis.supervivencia.fnc(leukemia, tiempo='time', status='status', modelo='km')
#--------------------------------------------------------------------------------
# ANALISIS DE SUPERVIVENCIA - KAPLAN-MEIER
#--------------------------------------------------------------------------------
$modelo
Call: survfit(formula = eval(parse(text = p2)))
n events median 0.95LCL 0.95UCL
[1,] 23 18 27 18 45
$modelo.km
records n.max n.start events rmean se(rmean) median 0.95LCL 0.95UCL
23.000000 23.000000 23.000000 18.000000 36.364389 9.854101 27.000000 18.000000 45.000000
$km.supervivencia
Call: survfit(formula = eval(parse(text = p2)))
time n.risk n.event survival std.err lower 95% CI upper 95% CI
5 23 2 0.9130 0.0588 0.8049 1.000
8 21 2 0.8261 0.0790 0.6848 0.996
9 19 1 0.7826 0.0860 0.6310 0.971
12 18 1 0.7391 0.0916 0.5798 0.942
13 17 1 0.6957 0.0959 0.5309 0.912
18 14 1 0.6460 0.1011 0.4753 0.878
23 13 2 0.5466 0.1073 0.3721 0.803
27 11 1 0.4969 0.1084 0.3240 0.762
30 9 1 0.4417 0.1095 0.2717 0.718
31 8 1 0.3865 0.1089 0.2225 0.671
33 7 1 0.3313 0.1064 0.1765 0.622
34 6 1 0.2761 0.1020 0.1338 0.569
43 5 1 0.2208 0.0954 0.0947 0.515
45 4 1 0.1656 0.0860 0.0598 0.458
48 2 1 0.0828 0.0727 0.0148 0.462
$contraste.log.rank
[1] NA
Podemos ver que tenemos 23 registros y ha habido 18 eventos (muertes). La mediana del tiempo medio de supervivencia han sido 27 meses (unidad de tiempo), con un intervalo de confianza entre 18 y 45 meses.
El primer paciente sobrevive 5 meses y son 23 los que hay hasta ese momento en riesgo (n.risk=23). En ese momento temporal la probabilidad de supervivencia es del 91%. El segundo paciente sobrevive hasta el mes 8 y con el incluido hay ahora 21 en riesgo. La supervivencia a los 8 meses cae al 82%. Para finalizar podemos ver que la última muerte se produce en el mes 48 lo cual representa una probabilidad de supervivencia del 8% hasta esa semana.
En la base de datos puedes ver que hay una variable que no hemos utilizado de nombre x, que mide si se le ha mantenido o no la quimioterapia (Manteined vs Nonmanteined).
frecuencias.fnc(leukemia, variable='x')
Maintained Nonmaintained
11 12
Vamos a solicitar la tabla de supervivencia pero en cada nivel de la variable x. Lo haremos incluyendo el argumento que.factor con el nombre o nombres de los factores sobre los que deseamos ver las distintas curvas.
analisis.supervivencia.fnc(leukemia, tiempo='time', status='status', modelo='km', que.factor='x')
#--------------------------------------------------------------------------------
# ANALISIS DE SUPERVIVENCIA - KAPLAN-MEIER
#--------------------------------------------------------------------------------
$modelo
Call: survfit(formula = eval(parse(text = p2)))
n events median 0.95LCL 0.95UCL
x=Maintained 11 7 31 18 NA
x=Nonmaintained 12 11 23 8 NA
$modelo.km
records n.max n.start events rmean se(rmean) median 0.95LCL 0.95UCL
x=Maintained 11 11 11 7 52.64545 19.828603 31 18 NA
x=Nonmaintained 12 12 12 11 22.70833 4.180942 23 8 NA
$km.supervivencia
Call: survfit(formula = eval(parse(text = p2)))
x=Maintained
time n.risk n.event survival std.err lower 95% CI upper 95% CI
9 11 1 0.909 0.0867 0.7541 1.000
13 10 1 0.818 0.1163 0.6192 1.000
18 8 1 0.716 0.1397 0.4884 1.000
23 7 1 0.614 0.1526 0.3769 0.999
31 5 1 0.491 0.1642 0.2549 0.946
34 4 1 0.368 0.1627 0.1549 0.875
48 2 1 0.184 0.1535 0.0359 0.944
x=Nonmaintained
time n.risk n.event survival std.err lower 95% CI upper 95% CI
5 12 2 0.8333 0.1076 0.6470 1.000
8 10 2 0.6667 0.1361 0.4468 0.995
12 8 1 0.5833 0.1423 0.3616 0.941
23 6 1 0.4861 0.1481 0.2675 0.883
27 5 1 0.3889 0.1470 0.1854 0.816
30 4 1 0.2917 0.1387 0.1148 0.741
33 3 1 0.1944 0.1219 0.0569 0.664
43 2 1 0.0972 0.0919 0.0153 0.620
45 1 1 0.0000 NaN NA NA
$contraste.log.rank
Call:
survdiff(formula = eval(parse(text = p2)))
N Observed Expected (O-E)^2/E (O-E)^2/V
x=Maintained 11 7 10.69 1.27 3.4
x=Nonmaintained 12 11 7.31 1.86 3.4
Chisq= 3.4 on 1 degrees of freedom, p= 0.07
Podríamos solicitar que la gráfica contenga los intervalos de confianza para la curva de supervivencia incluyendo el argumento ic=TRUE.
analisis.supervivencia.fnc(leukemia, tiempo='time', status='status',
modelo='km', que.factor='x', ic=T)
REGRESIÓN DE COX
En el análisis de la supervivencia, se conoce como regresión de Cox o también como modelo de los riesgos proporcionales, a una clase de modelos usados para modelar los riesgos que afectan a la supervivencia de una población de sujetos. El modelo de Cox expresa la función de riesgo instantáneo de muerte en función del tiempo t y de covariables X1...Xp (https://es.wikipedia.org/wiki/Regresión_de_Cox).
Utilizamos el modelo de riesgo proporcional de Cox, cuando deseamos poder modelar no sólo la relación entre la tasa de supervivencia y el tiempo, sino también la posible relación con diferentes variables obtenidas para cada sujeto. Se trata por tanto de calcular la tasa de mortalidad como una función del tiempo y de ciertas variables de pronóstico que llamaremos covariantes.
Utilizaremos la base de datos lung que contiene los datos de 228 enfermos de cáncer de pulmón medidos en múltiples variables. Deseamos modelar la probabilidad de supervivencia a partir de obviamente el paso de tiempo como de múltiples variables covariantes como la edad (age), calorías ingeridas (meal.cal), pérdida de peso en los últimos 6 meses ( wt.loss), etc.
head(lung)
inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss
1 3 306 2 74 1 1 90 100 1175 NA
2 3 455 2 68 1 0 90 90 1225 15
3 3 1010 1 56 1 0 90 90 NA 15
4 5 210 2 57 1 1 90 60 1150 11
5 1 883 2 60 1 0 100 90 NA 0
6 12 1022 1 74 1 1 50 80 513 0
Para ello utilizaremos la misma función solo que incluiremos en el argumento modelo el valor 'cox'. Las variables predictoras de la función basal de supervivencia las incluiremos en el argumento variables. Por defecto se llevará a cabo una estimación paso a paso del modelo. Si se desea el método simultáneo (estimar el modelo con todas las variables incluidas) deberemos añadir el argumento paso.a.paso=F.
analisis.supervivencia.fnc(lung, tiempo = 'time', status = 'status', modelo='cox')
------------------------------------------
ATENCION. HAY UN ERROR
------------------------------------------
*** ERROR. Si el modelo a estimar es regresion de Cox deberas incluir
*** el numero o nombre de las variables covariantes en el argumento,
*** variables.
*** Ej: variables=c(2,14,22:30) variables=c('sexo','est.civ','v20')
Hemos solicitado la regresión de Cox pero no hemos incluido ninguna variable covariante predictora en el modelo. Esta estimación es equivalente a la estimación de un modelo con el método Kaplan-Meier y así te lo hará saber proponiéndote la inclusión del argumento variables con el nombre o columnas de las variables que deseas valorar como predictoras de la función de supervivencia. En la siguiente llamada incluiremos todas las variables predictoras disponibles en la base de datos (columnas 4 a 10).
analisis.supervivencia.fnc(lung, tiempo = 'time', status = 'status',
modelo='cox', variables=4:10)
La tercera figura se ha obtenido incluyendo el argumento pivote con el nombre del factor o variable sobre la que deseamos ver la curva de supervivencia en el promedio del resto de las variables. Por defecto la función pivota sobre la primera variable del modelo.
analisis.supervivencia.fnc(lung, tiempo = 'time', status = 'status',
modelo='cox', variables=4:10, pivote='ph.ecog', ic=T,
supuestos=T)
La ejecución de esta función genera además un número importante de gráficas que aquí se omite su salida por motivos de espacio pero que puedes consultar en este pdf. En ellas encontrarás:
Gráficas de violación de supuesto de riesgo proporcional para cada variable predictora.
Curva de supervivencia en el promedio de todas las covariantes.
Curva de supervivencia para la primera variable del modelo actuando como pivote (sexo en este ejemplo). Donde podemos observar la curva de supervivencia para cada nivel ( si la variable es un factor del pivote o en los percentiles 25 y 75 si la variable es numérica) en el promedio del resto de covariantes del modelo estimado.
Gráfica de valores palancas donde podemos observar la presencia de casos extremos que afectan al parámetro estimado.
Residuales para cada variable predictora o cavariante.