Estoy tratando de ejecutar una regresión de Cox en un conjunto de datos de 2,000,000 de filas de la siguiente manera usando solo R. Esta es una traducción directa de un PHREG en SAS. La muestra es representativa de la estructura del conjunto de datos original.
##
library(survival)
### Replace 100000 by 2,000,000
test <- data.frame(start=runif(100000,1,100), stop=runif(100000,101,300), censor=round(runif(100000,0,1)), testfactor=round(runif(100000,1,11)))
test$testfactorf <- as.factor(test$testfactor)
summ <- coxph(Surv(start,stop,censor) ~ relevel(testfactorf, 2), test)
# summary(summ)
##
user system elapsed
9.400 0.090 9.481
El desafío principal está en el tiempo de cálculo para el conjunto de datos original (filas de 2 m). Por lo que entiendo, en SAS esto podría tomar hasta 1 día, ... pero al menos termina.
Ejecutar el ejemplo con solo 100,000 observaciones toma solo 9 segundos. A partir de entonces, el tiempo aumenta casi cuadráticamente por cada incremento de 100,000 en el número de observaciones.
No he encontrado ningún medio para paralelizar la operación (por ejemplo, podemos aprovechar una máquina de 48 núcleos si esto fuera posible)
Ni
biglm
ni ningún paquete de Revolution Analytics está disponible para la regresión de Cox, por lo que no puedo aprovecharlos.
¿Hay algún medio para representar esto en términos de una regresión logística (para la cual hay paquetes en Revolution) o si hay otras alternativas a este problema? Sé que son fundamentalmente diferentes, pero es lo más cercano que puedo asumir como una posibilidad dadas las circunstancias.
Respuestas:
Ejecuto la regresión de Cox en un conjunto de datos de observación de 7'000'000 usando R y esto no es un problema. De hecho, en los modelos bivariados obtengo las estimaciones en 52 segundos. Sugiero que es, como a menudo con R, un problema relacionado con la RAM disponible. Es posible que necesite al menos 12 GB para ejecutar el modelo sin problemas.
fuente
Fui directamente a la función de ajuste hardcore ( agreg.fit ), que bajo el capó se llama para los cálculos:
Sin embargo, el tiempo transcurrido al duplicar el tamaño de la muestra se vuelve cuadrático como usted mencionó. Tampoco ayuda disminuir el épsilon en coxph.control .
fuente