Große Cox-Regression mit R (Big Data)

8

Ich versuche, eine Cox-Regression für einen Beispieldatensatz von 2.000.000 Zeilen wie folgt mit nur R auszuführen. Dies ist eine direkte Übersetzung eines PHREG in SAS. Die Stichprobe ist repräsentativ für die Struktur des Originaldatensatzes.

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

Die Hauptherausforderung liegt in der Rechenzeit für den Originaldatensatz (2 m Zeilen). Soweit ich weiß, kann dies in SAS bis zu einem Tag dauern, aber zumindest ist es beendet.

  • Das Ausführen des Beispiels mit nur 100.000 Beobachtungen dauert nur 9 Sekunden. Danach erhöht sich die Zeit fast quadratisch pro 100.000 Inkrement der Anzahl der Beobachtungen.

  • Ich habe keine Möglichkeit gefunden, den Betrieb zu parallelisieren (z. B. können wir eine 48-Kern-Maschine nutzen, wenn dies möglich ist).

  • Weder biglmein Paket von Revolution Analytics ist für die Cox-Regression verfügbar, daher kann ich diese nicht nutzen.

Gibt es ein Mittel, um dies in Form einer logistischen Regression darzustellen (für die es Pakete in Revolution gibt) oder ob es andere Alternativen zu diesem Problem gibt? Ich weiß, dass sie sich grundlegend unterscheiden, aber es ist die naheliegendste, die ich unter den gegebenen Umständen als Möglichkeit annehmen kann.

xbsd
quelle
2
Bedingte logistische Regression und Cox-Regression sind eng miteinander verbunden. Stayconsistent.wordpress.com/2009/01/25/…
Boscovich
coxphcoxphapply

Antworten:

2

Ich führe eine Cox-Regression für einen 7'000'000-Beobachtungsdatensatz mit R durch, und dies ist kein Problem. Bei bivariaten Modellen erhalte ich die Schätzungen in 52 Sekunden. Ich schlage vor, dass es - wie oft bei R - ein Problem im Zusammenhang mit dem verfügbaren RAM ist. Möglicherweise benötigen Sie mindestens 12 GB, um das Modell reibungslos auszuführen.

Mesozoik
quelle
1

Ich ging direkt zur Hardcore-Fit-Funktion ( agreg.fit ), die unter der Haube für die Berechnungen aufgerufen wird:

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)

Die Zeit, die beim Verdoppeln der Stichprobengröße verstrichen ist, wird jedoch quadratisch, wie Sie bereits erwähnt haben. Auch das Verringern des Epsilons in coxph.control hilft nicht.

lambruscoAcido
quelle