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
biglm
ein 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.
Antworten:
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.
quelle
Ich ging direkt zur Hardcore-Fit-Funktion ( agreg.fit ), die unter der Haube für die Berechnungen aufgerufen wird:
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.
quelle