Regresión de Cox a gran escala con R (Big Data)

8

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 biglmni 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.

xbsd
fuente
2
La regresión logística condicional y la regresión de Cox están estrictamente relacionadas. stayconsistent.wordpress.com/2009/01/25/…
boscovich
¿Pudiste llegar a una solución elegante para esto? Estoy calculando los HR de para miles de genes en múltiples conjuntos de datos, y es un cuello de botella. En la actualidad estoy usando para bucle sobre genes. PS stack no me deja comentar porque soy un nuevo usuario. coxphcoxphapply
Arshi Arora

Respuestas:

2

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.

Mesozoik
fuente
1

Fui directamente a la función de ajuste hardcore ( agreg.fit ), que bajo el capó se llama para los cálculos:

n <- nrow(test)
y <- as.matrix(test[, 1:3])
attr(y, "type") <- "right"
x <- matrix(1:11, n, 11, byrow=TRUE)
colnames(x) <- paste("level", 1:11, sep="")
x <- x[, -2] == test$testfactor
mode(x) = "numeric"

fit2 <- agreg.fit(x, y, strata=NULL, control=coxph.control(), method="efron", 
                  init=rep(0, 10), rownames=1:n)

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 .

lambruscoAcido
fuente