2016-06-08 18 views
11

Tôi có dữ liệu được binned Tôi đang cố gắng thực hiện phân tích tỷ lệ sống, dữ liệu ví dụ bên dưới. n là số đơn vị tại mỗi nhóm, thời gian, kết hợp chỉ báo lỗi.Khả năng tồn tại trên dữ liệu được tách ra

> df <- structure(list(group = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("", "A", "B"), class = "factor"), t = c(0L, 1L, 2L, 3L, 1L, 2L, 3L, 0L, 1L, 2L, 3L, 1L, 2L, 3L), failure = c(0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L), n = c(40000L, 30000L, 20000L, 10000L, 5L, 4L, 3L, 20000L, 15000L, 14000L, 11000L, 10L, 6L, 4L)), .Names = c("group", "t", "failure", "n"), row.names = c(NA, 14L), class = "data.frame") 
> df 
    group t failure  n 
1  A 0  0 40000 
2  A 1  0 30000 
3  A 2  0 20000 
4  A 3  0 10000 
5  A 1  1  5 
6  A 2  1  4 
7  A 3  1  3 
8  B 0  0 20000 
9  B 1  0 15000 
10  B 2  0 14000 
11  B 3  0 11000 
12  B 1  1 10 
13  B 2  1  6 
14  B 3  1  4 

Tôi biết tôi có thể rep df bởi cột n nên mỗi hàng là một trong những đơn vị: (. Ref How do I create a survival object in R?)

> library(survival) 
> df2 <- df[rep(rownames(df),df$n),] 
> sfit <- survfit(Surv(t,failure)~group, data = df2) 

Tuy nhiên, số liệu thực tế của tôi có khoảng 10 triệu đơn vị. Có cách nào để sống sót với biến số/tần số để tránh tạo khung dữ liệu 10 triệu hàng không?

Trả lời

10

Bạn sẽ muốn sử dụng thông số weights. Bạn có thể so sánh hai phương pháp tiếp cận để xác nhận rằng bạn có cùng một đầu ra.

Với dữ liệu của bạn mà bạn lặp đi lặp lại:

sfit <- survfit(Surv(t,failure)~group, data = df2) 
summary(sfit) 
Call: survfit(formula = Surv(t, failure) ~ group, data = df2) 

       group=A 
time n.risk n.event survival std.err lower 95% CI upper 95% CI 
    1 60012  5 1.000 3.73e-05  1.000   1 
    2 30007  4 1.000 7.63e-05  1.000   1 
    3 10003  3 0.999 1.89e-04  0.999   1 

       group=B 
time n.risk n.event survival std.err lower 95% CI upper 95% CI 
    1 40020  10 1.000 0.000079  1.000   1 
    2 25010  6 1.000 0.000126  0.999   1 
    3 11004  4 0.999 0.000221  0.999   1 

Bây giờ sử dụng weights:

weights <- df$n 
sfit2 <- survfit(Surv(t,failure)~group, data = df, weights = weights) 
summary(sfit2) 
Call: survfit(formula = Surv(t, failure) ~ group, data = df, weights = weights) 

       group=A 
time n.risk n.event survival std.err lower 95% CI upper 95% CI 
    1 60012  5 1.000 3.73e-05  1.000   1 
    2 30007  4 1.000 7.63e-05  1.000   1 
    3 10003  3 0.999 1.89e-04  0.999   1 

       group=B 
time n.risk n.event survival std.err lower 95% CI upper 95% CI 
    1 40020  10 1.000 0.000079  1.000   1 
    2 25010  6 1.000 0.000126  0.999   1 
    3 11004  4 0.999 0.000221  0.999   1 
+2

Tốt câu trả lời cho một câu hỏi hay, nhưng có phải là một cảnh báo rằng không phải tất cả các chức năng hồi quy sử dụng "trọng lượng "tham số theo cách tương tự. Đây là những "trọng lượng" nhân rộng. –

+1

Tôi đồng ý với 42-, tôi không tìm thấy mô tả về trọng số (dưới survfit.formula) hữu ích: "Trọng số phải không âm và được khuyến nghị rằng chúng hoàn toàn tích cực, vì trọng lượng bằng 0 không rõ ràng so với sử dụng của đối số tập hợp con. " – bigjim

Các vấn đề liên quan