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
biglm
aucun 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.
Réponses:
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.
la source
Je suis allé directement à la fonction hardcore fit ( agreg.fit ), qui sous le capot est appelée pour les calculs:
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.
la source