Regresi Cox skala besar dengan R (Big Data)

8

Saya mencoba menjalankan regresi Cox pada dataset 2.000.000 sampel baris sebagai berikut hanya menggunakan R. Ini adalah terjemahan langsung dari PHREG di SAS. Sampel tersebut mewakili struktur dataset asli.

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

Tantangan utama adalah dalam waktu komputasi untuk dataset asli (baris 2m). Sejauh yang saya mengerti, di SAS ini bisa memakan waktu hingga 1 hari, ... tapi setidaknya selesai.

  • Menjalankan contoh dengan hanya 100.000 pengamatan hanya membutuhkan waktu 9 detik. Setelah itu waktu meningkat hampir secara kuadratik untuk setiap 100.000 kenaikan dalam jumlah pengamatan.

  • Saya belum menemukan cara untuk memparalelkan operasi (mis., Kami dapat memanfaatkan mesin 48-inti jika ini memungkinkan)

  • Baik biglmpaket dari Revolution Analytics tidak tersedia untuk regresi Cox, jadi saya tidak dapat memanfaatkannya.

Apakah ada cara untuk mewakili ini dalam hal regresi logistik (yang ada paket dalam Revolusi) atau jika ada alternatif lain untuk masalah ini? Saya tahu bahwa mereka secara fundamental berbeda, tetapi ini adalah yang terdekat yang dapat saya asumsikan sebagai kemungkinan mengingat keadaan.

xbsd
sumber
2
Regresi logistik bersyarat dan regresi Cox sangat terkait. stayconsistent.wordpress.com/2009/01/25/…
boscovich
apakah Anda bisa sampai pada solusi yang elegan untuk ini? Saya menghitung SDM dari untuk ribuan gen pada banyak dataet, dan adalah leher botol. Saat ini saya menggunakan untuk loop over gen. Tumpukan PS tidak membiarkan saya berkomentar karena saya pengguna baru. coxphcoxphapply
Arshi Arora

Jawaban:

2

Saya menjalankan regresi cox pada dataset observasi 7'000'000 menggunakan R dan ini bukan masalah. Memang, pada model bivariat saya mendapatkan perkiraan dalam 52 detik. Saya menyarankan agar - seperti yang sering terjadi dengan R- masalah yang terkait dengan RAM yang tersedia. Anda mungkin memerlukan setidaknya 12GB untuk menjalankan model dengan lancar.

Mesozoik
sumber
1

Saya langsung menuju ke fungsi hardcore fit ( agreg.fit ), yang di bawah kap dipanggil untuk perhitungan:

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)

Namun, waktu berlalu ketika menggandakan ukuran sampel menjadi kuadrat seperti yang Anda sebutkan. Juga mengurangi epsilon di coxph.control tidak membantu.

lambruscoAcido
sumber