Hồi quy Cox quy mô lớn với R (Dữ liệu lớn)


8

Tôi đang cố gắng chạy hồi quy Cox trên bộ dữ liệu 2.000.000 hàng mẫu như sau chỉ sử dụng R. Đây là bản dịch trực tiếp của PHREG trong SAS. Mẫu là đại diện cho cấu trúc của bộ dữ liệu ban đầu.

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

Thách thức chính là trong thời gian tính toán cho bộ dữ liệu gốc (2m hàng). Theo như tôi hiểu, ở SAS, việc này có thể mất tới 1 ngày, ... nhưng ít nhất nó cũng kết thúc.

  • Chạy ví dụ chỉ với 100.000 quan sát chỉ mất 9 giây. Sau đó, thời gian tăng gần như bậc hai cho mỗi 100.000 gia tăng số lượng quan sát.

  • Tôi chưa tìm thấy bất kỳ phương tiện nào để song song hóa hoạt động (ví dụ: chúng ta có thể tận dụng máy 48 lõi nếu điều này là có thể)

  • Không biglmcó bất kỳ gói nào từ Revolution Analytics có sẵn cho hồi quy Cox và vì vậy tôi không thể tận dụng các gói đó.

Có một phương tiện nào để thể hiện điều này theo phương pháp hồi quy logistic (trong đó có các gói trong Cách mạng) hoặc nếu có bất kỳ giải pháp thay thế nào khác cho vấn đề này? Tôi biết rằng về cơ bản chúng khác nhau, nhưng đó là khả năng gần nhất mà tôi có thể cho là hoàn cảnh.


2
Hồi quy logistic có điều kiện và hồi quy Cox có liên quan chặt chẽ. stayconsistent.wordpress.com/2009/01/11/iêu
boscovich

coxphcoxphapply

Câu trả lời:


2

Tôi chạy hồi quy cox trên bộ dữ liệu quan sát 7'000'000 bằng R và đây không phải là vấn đề. Thật vậy, trên các mô hình bivariate tôi nhận được các ước tính trong 52 giây. Tôi đề nghị rằng đó là - thường là với R- một vấn đề liên quan đến RAM có sẵn. Bạn có thể cần ít nhất 12GB để chạy mô hình trơn tru.


1

Tôi đã đi trực tiếp đến chức năng phù hợp với lõi cứng ( agreg.fit ), được gọi là phần tính toán:

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)

Tuy nhiên, thời gian trôi qua khi nhân đôi kích thước mẫu sẽ được bậc hai như bạn đã đề cập. Ngoài ra việc giảm epsilon trong coxph.control không giúp ích gì.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.