Por lo que puedo ver, no hay nada malo con su código o sus cálculos. Sin embargo, puede omitir algunas líneas de código obteniendo los índices de incidencia pore x p ( c o e f ( mo d ) ). Los dos modelos hacen suposiciones diferentes, y esto potencialmente conduce a resultados diferentes.
La regresión de Poisson supone riesgos constantes. El modelo de Cox solo supone que los riesgos son proporcionales. Si se cumple el supuesto de riesgos constantes, esta pregunta
¿La regresión de Cox tiene una distribución de Poisson subyacente?
explica la conexión entre la regresión de Cox y Poisson.
Podemos utilizar la simulación para estudiar dos situaciones: peligros constantes y peligros no constantes (pero proporcionales). Primero simulemos datos de una población con un peligro constante. La razón de riesgo tiene la forma
λ ( t ) =λ0 0Exp(β′x ),
dónde β es un vector de parámetros, X es un vector de covariables y λ0 0Es un número positivo fijo. Por lo tanto, se cumple el supuesto de riesgo constante de la regresión de Poisson. Ahora simulamos a partir de este modelo utilizando el hecho (encontrado en muchos libros, por ejemplo, Modelando datos de supervivencia de Therneau, p.13) de que la función de distribución,F, del tiempo de supervivencia con λ como peligro se puede encontrar como
F( t ) = 1 - exp(∫t0 0λ ( s ) d s ).
Con esto también podemos encontrar el inverso de F, F- 1. Con esta función simulamos tiempos de supervivencia con el peligro correcto al dibujar variables que son uniformes en( 0 , 1 ) y transformándolos usando F- 1. Vamos a hacerlo.
library(survival)
data(colon)
data <- with(colon, data.frame(sex = sex, rx = rx, age = age))
n <- dim(data)[1]
# defining linP, the linear predictor, beta*x in the above notation
linP <- with(colon, log(0.05) + c(0.05, 0.01)[as.factor(sex)] + c(0.01,0.05,0.1)[rx] + 0.1*age)
h <- exp(linP)
simFuncC <- function() {
cens <- runif(n) # simulating censoring times
toe <- -log(runif(n))/h # simulating times of events
event <- ifelse(toe <= cens, 1, 0) # deciding if time of event or censoring is the smallest
data$time <- pmin(toe, cens)
data$event <- event
mCox <- coxph(Surv(time, event) ~ sex + rx + age, data = data)
mPois <- glm(event ~ sex + rx + age, data = data, offset = log(time))
c(coef(mCox), coef(mPois))
}
sim <- t(replicate(1000, simFuncC()))
colMeans(sim)
Para el modelo de Cox, los promedios de las estimaciones de los parámetros son
sex rxLev rxLev+5FU age
-0.03826301 0.04167353 0.09069553 0.10025534
y para el modelo de Poisson
(Intercept) sex rxLev rxLev+5FU age
-1.23651275 -0.03822161 0.03678366 0.08606452 0.09812454
Para ambos modelos, vemos que esto está cerca de los valores verdaderos, recordando que la diferencia entre hombres y mujeres era -0.04, por ejemplo, y se estima en -0.038 para ambos modelos. Ahora podemos hacer lo mismo con la función de peligro no constante
λ ( t ) =λ0 0t exp(β′x ).
Ahora simulamos como antes.
simFuncN <- function() {
cens <- runif(n)
toe <- sqrt(-log(runif(n))/h)
event <- ifelse(toe <= cens, 1, 0)
data$time <- pmin(toe, cens)
data$event <- event
mCox <- coxph(Surv(time, event) ~ sex + rx + age, data = data)
mPois <- glm(event ~ sex + rx + age, data = data, offset = log(time))
c(coef(mCox), coef(mPois))
}
sim <- t(replicate(1000, simFuncN()))
colMeans(sim)
Para el modelo Cox ahora tenemos
sex rxLev rxLev+5FU age
-0.04220381 0.04497241 0.09163522 0.10029121
y para el modelo de Poisson
(Intercept) sex rxLev rxLev+5FU age
-0.12001361 -0.01937333 0.02028097 0.04318946 0.04908300
En esta simulación, los promedios del modelo de Poisson están claramente más lejos de los valores reales que los del modelo de Cox. Esto no es sorprendente ya que hemos violado el supuesto de riesgos constantes.
Cuando el peligro es constante, la función de supervivencia, S, es de la forma
S( t ) = exp( - α ∗ t ),
por algo positivo α depende del tema específico, por lo tanto Ses convexo Si usamos el estimador de Kaplan-Meier para obtener una estimación deS para los datos originales, vemos lo siguiente.
Esta función se ve cóncava. Esto no prueba nada, pero podría ser una pista de que no se cumple el supuesto de riesgos constantes para este conjunto de datos, lo que a su vez podría explicar las discrepancias entre los dos modelos.
Una observación final sobre los datos, que yo sepa c o l o n contiene datos sobre el tiempo hasta la recurrencia del cáncer y el tiempo hasta la muerte (hay dos observaciones para cada valor de yo d) En lo anterior, lo hemos modelado como si fuera la misma cosa. Probablemente no sea una buena idea.