Régression de Cox à grande échelle avec R (Big Data)


8

J'essaie d'exécuter une régression de Cox sur un échantillon de données de 2 000 000 lignes comme suit en utilisant uniquement R. Il s'agit d'une traduction directe d'un PHREG dans SAS. L'échantillon est représentatif de la structure de l'ensemble de données d'origine.

##
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 

Le principal défi réside dans le temps de calcul de l'ensemble de données d'origine (2 m de lignes). Pour autant que je sache, en SAS, cela peut prendre jusqu'à 1 jour, ... mais au moins ça se termine.

  • L'exécution de l'exemple avec seulement 100 000 observations ne prend que 9 secondes. Par la suite, le temps augmente presque quadratique pour chaque tranche de 100 000 incréments du nombre d'observations.

  • Je n'ai trouvé aucun moyen de paralléliser l'opération (par exemple, nous pouvons exploiter une machine à 48 cœurs si cela était possible)

  • Ni biglmaucun package de Revolution Analytics n'est disponible pour la régression de Cox, et je ne peux donc pas en tirer parti.

Existe-t-il un moyen de représenter cela en termes de régression logistique (pour laquelle il existe des packages dans Revolution) ou s'il existe d'autres alternatives à ce problème? Je sais qu'ils sont fondamentalement différents, mais c'est le plus proche que je puisse supposer comme une possibilité compte tenu des circonstances.


2
La régression logistique conditionnelle et la régression de Cox sont strictement liées. stayconsistent.wordpress.com/2009/01/25/…
boscovich

avez-vous pu trouver une solution élégante à cela? Je calcule les FC à partir de pour des milliers de gènes sur plusieurs ensembles de données, et est un goulot d'étranglement. À l'heure actuelle, j'utilise pour boucler sur les gènes. La pile PS ne me laisse pas commenter car je suis un nouvel utilisateur. coxphcoxphapply
Arshi Arora

Réponses:


2

Je lance une régression cox sur un ensemble de données d'observation de 7'000'000 en utilisant R et ce n'est pas un problème. En effet, sur les modèles bivariés, j'obtiens les estimations en 52 secondes. Je suggère que c'est, comme souvent avec R, un problème lié à la RAM disponible. Vous devrez peut-être au moins 12 Go pour exécuter le modèle en douceur.


1

Je suis allé directement à la fonction hardcore fit ( agreg.fit ), qui sous le capot est appelée pour les calculs:

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)

Cependant, le temps écoulé lorsque le doublement de la taille de l'échantillon devient quadratique, comme vous l'avez mentionné. Diminuer également l'epsilon dans coxph.control n'aide pas.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.