Bối cảnh: Tôi muốn tìm hiểu cách phân tích dữ liệu từ các thử nghiệm lâm sàng với kiểm soát lịch sử tự nhiên, nghĩa là một thử nghiệm lâm sàng trong đó một nhóm người (giả sử, những người có nguy cơ di truyền bệnh) được tuyển dụng, tất cả đều được điều trị một loại thuốc, và sự sống sót của họ (giả sử, tuổi khởi phát bệnh hoặc tử vong do bệnh này) được so sánh với sự sống sót của các biện pháp kiểm soát lịch sử không được điều trị với cùng nguy cơ di truyền.
Trước khi bắt đầu, tôi chỉ muốn thừa nhận rằng tôi đã đọc các tài liệu Hướng dẫn của FDA (ví dụ: Bệnh hiếm gặp: Các vấn đề phổ biến trong phát triển thuốc ) liên quan đến chủ đề này và tôi biết rằng có nhiều loại sai lệch có thể tự nhiên so sánh lịch sử và rằng, vì lý do này, FDA chỉ hiếm khi chấp nhận các thử nghiệm như bằng chứng về hiệu quả của thuốc, thay vào đó thường coi các thử nghiệm ngẫu nhiên là bằng chứng mạnh mẽ hơn nhiều. Câu hỏi làm thế nào để xác định liệu một đoàn hệ lịch sử tự nhiên có thể được so sánh một cách công bằng với một đoàn hệ tương lai được điều trị bằng thuốc hay không là một câu hỏi quan trọng và phức tạp. Nhưng đó không phải là chủ đề của câu hỏi của tôi ngày hôm nay. Thay vào đó, tôi thấy rằng tôi đang bối rối về một câu hỏi đơn giản hơn nhiều, đó là câu hỏi nếumột đoàn hệ lịch sử tự nhiên được coi là có thể so sánh và không thiên vị, v.v., vậy thì, theo cách thống kê, người ta sẽ làm gì để so sánh?
Vì vậy, đây là một kịch bản.
- Để đơn giản, giả sử bệnh của tôi có một nguyên nhân di truyền, được biết đến và những người có kiểu gen này hoàn toàn khỏe mạnh cho đến một độ tuổi nào đó, và sau đó họ đột nhiên bị bệnh nặng. Độ tuổi khởi phát bệnh rất khác nhau và nguy cơ thay đổi theo chức năng của tuổi. Mọi người trong mọi tập dữ liệu được mô tả dưới đây đều có kiểu gen gây bệnh này.
- Trong tập dữ liệu A, tôi có dữ liệu về những người trong một thử nghiệm lâm sàng giả định. Họ đăng ký ở một độ tuổi (
starting_age
), được điều trị bằng thuốc và được theo dõi một khoảng thời gian khác nhau cho đến khi ở tuổi thứ hai (last_age
) khi họ bị bệnh (event == 1
) hoặc rút khỏi thử nghiệm (event == 0
). - Trong một kịch bản "lý tưởng lý tưởng", có lẽ đoàn hệ lịch sử tự nhiên sẽ là một số lượng lớn người có kiểu gen này, theo dõi từ khi sinh ra cho đến khi họ chết vì căn bệnh này hoặc vì một nguyên nhân không liên quan. Đó là loại dữ liệu không tồn tại. Thay vào đó, hãy xem xét hai lựa chọn khả thi cho đoàn hệ lịch sử tự nhiên có thể là gì (B và C) ...
- Trong tập dữ liệu B, tôi có dữ liệu về những người đăng ký vào nghiên cứu tiền cứu ở một độ tuổi ngẫu nhiên (
starting_age
), không được điều trị bằng bất kỳ loại thuốc nào và chỉ được theo dõi trong một khoảng thời gian khác nhau cho đến khi họ ở tuổi thứ hai (last_age
) bị bệnh (event == 1
) hoặc rút khỏi nghiên cứu (event == 0
). Phân phối độ tuổi bắt đầu và số năm theo dõi không thể được giả định để tuân theo các phân phối giống như trong tập dữ liệu A. - Trong tập dữ liệu C, tôi có dữ liệu hồi cứu hoàn toàn; ở đây không có theo dõi trong tương lai. Chúng tôi chỉ đơn giản là quan sát mỗi người một lần. Một số người được quan sát thấy bị bệnh ở một độ tuổi cụ thể (
age
vàevent == 1
) trong khi những người khác được nhìn thấy vẫn khỏe mạnh ở một độ tuổi cụ thể (age
vàevent == 0
).
Nếu tôi hiểu thuật ngữ chính xác, dữ liệu trong A và B sẽ được coi là cắt ngắn và kiểm duyệt phải; dữ liệu trong C sẽ chỉ được coi là kiểm duyệt đúng. Theo các thuật ngữ được sử dụng trong Cain 2011 , tôi tin rằng tập dữ liệu B là một "đoàn hệ phổ biến" trong khi tập dữ liệu C là một "đoàn hệ sự cố".
Câu hỏi của tôi là:
- Làm thế nào (nếu có thể) người ta có thể xây dựng một hàm sống sót (hoặc một hàm nguy hiểm, v.v.) cho tập dữ liệu A hoặc B, với điều kiện là dữ liệu bị cắt ngắn ở các độ tuổi khác nhau cho mỗi cá nhân?
- Thử nghiệm thống kê nào (hoặc phương pháp bootstrapping) sẽ được sử dụng để kiểm tra xem những người trong bộ dữ liệu A có tồn tại lâu hơn đáng kể hay có nguy cơ thấp hơn đáng kể so với những người trong B hoặc C không?
- Nếu tất cả những gì bạn có là tập dữ liệu B hoặc C và bạn muốn ước tính sức mạnh thống kê của một thử nghiệm lâm sàng nhất định với N cá nhân cho một tỷ lệ nguy hiểm nhất định, bạn sẽ làm thế nào về nó?
- (Câu hỏi thưởng) nếu mọi người cũng có các đột biến gen khác nhau liên quan đến các mối nguy hiểm khác nhau theo chức năng của tuổi tác, bạn sẽ kết hợp biến đó vào các câu trả lời ở trên như thế nào?
Một số điều tôi đã thử cho đến nay:
- Tôi đã xem xét thống kê Z của Flora [ Flora 1978 ] mà một số người đã áp dụng trong các tình huống tương tự, nhưng tôi lo ngại rằng nó không tính đến phương sai lấy mẫu trong đoàn hệ lịch sử tự nhiên được sử dụng làm tài liệu tham khảo.
- Tôi đã tìm ra một vài cách kết hợp khác nhau như phân tích tỷ lệ sống sót với các lần cắt ngắn khác nhau và tìm thấy một số trang thảo luận về các vấn đề tương tự, chẳng hạn như Phân tích sống sót: Dữ liệu bị cắt ngắn , Sống sót cắt ngắn bằng PROC PHREG , nhưng những điều này không giải thích được cơ bản toán của giải pháp của họ.
- Cuối cùng tôi đã đến Cain 2011 để thảo luận chi tiết về vấn đề này và, một cách hữu ích, có mã R để xử lý cắt ngắn bên trái trong phần bổ sung . Họ đã thực hiện chức năng riêng của mình cho một MLE kết hợp cắt ngắn bên trái, nhưng yêu cầu là cắt ngắn bên trái có thể được xử lý trong mô hình mối nguy theo tỷ lệ Cox bằng cách sử dụng chức năng được tích hợp trong
survival
thư viện R ,coxph(Surv(time=agestart,time2=x,event=cx,type='counting')~bmi)
. Ở đây, mộtSurv
đối tượng được tạo ra bằng cách sử dụngtime
độ tuổi bắt đầu vàtime2
độ tuổievent
đã hoặc không xảy ra. Điều đó nghe có vẻ hợp lý, mặc dù tệp trợ giúpSurv
không giải thích những gì nó thực sự đang làm ở đây - ví dụ như nó không giải thích những gìcounting
mô hình đòi hỏi. Tôi chuyển sangsurvival
hướng dẫnvà, như một tài liệu tham khảo chocounting
, đã chỉ ra Andersen & Gill 1982 , điều này lần lượt qua đầu tôi một chút và dường như không thảo luận về việc cắt ngắn bên trái, hoặc ít nhất là không phải bằng tên đó. Một điểm đặc biệt là mô hình "đếm" dường như được xây dựng để phù hợp với các trường hợp trong đó một cá nhân có thể có nhiều sự kiện trong đời, đó không phải là trường hợp trong ví dụ của tôi, nhưng có lẽ điều đó không thành vấn đề. - Dựa trên những điều trên, có vẻ như mô hình "đếm" Cox có thể là cách phù hợp để so sánh tập dữ liệu A với B và tôi đã có thể thực hiện so sánh như vậy trong R (xem mã bên dưới) mặc dù tôi vẫn đang cố gắng để hiểu liệu Tôi đang làm điều đúng đắn ở đây, và tôi không chắc làm thế nào (nếu có) cách tiếp cận như vậy có thể được áp dụng để so sánh tập dữ liệu A với C.
- Cuối cùng, tôi đã tìm kiếm Xác thực chéo để rút ngắn thời gian sống sót và tìm thấy một số lượng lớn các trường hợp mà mọi người đã hỏi những câu hỏi tương tự như tôi đang hỏi ( 1 , 2 , 3 , 4 , 4 , 5 , 6 , 7 ) nhưng hầu hết đều không được trả lời; một cái chỉ vào tài liệu tham khảo của Cain ở trên và một cái khác chỉ vào Klein & Moeschberger 2003 điều này rất hữu ích (xem ví dụ 123 và trang 312) và dường như ủng hộ quan điểm rằng A và B có thể được so sánh bằng cách sử dụng phương pháp Cox khá đơn giản, mặc dù nó không giải quyết được sự so sánh giữa A với C, cũng như câu hỏi tính toán công suất (mặc dù, nếu câu hỏi kiểm tra thống kê được trả lời, có lẽ tôi có thể có được sức mạnh với một số bootstrapping).
Dưới đây là một số dữ liệu giả thuyết trong R minh họa kịch bản này. Tôi đã bao gồm 20 hàng cho mỗi tập dữ liệu, mặc dù trong trường hợp có vấn đề, trong kịch bản đời thực tôi đang tưởng tượng, bộ dữ liệu A và B có thể theo thứ tự 50 hoặc 100 bệnh nhân và tập dữ liệu C có thể theo thứ tự 500 hoặc 1.000 bệnh nhân.
# A) hypothetical data from clinical trial
data_a = read.table(sep='|',header=T,textConnection("
indiv_id|starting_age|last_age|event
1|33|42|0
2|45|49|0
3|47|52|1
4|30|34|0
5|37|44|0
6|34|37|0
7|29|34|0
8|58|66|0
9|58|60|0
10|66|75|0
11|37|41|0
12|37|46|0
13|58|62|0
14|44|48|1
15|45|50|0
16|56|65|0
17|54|63|0
18|36|41|0
19|47|55|1
20|45|55|0
"))
# B) hypothetical data from a prospective natural history study
data_b = read.table(sep='|',header=T,textConnection("
indiv_id|starting_age|last_age|event
101|19|28|0
102|39|52|0
103|38|41|1
104|18|27|0
105|20|24|0
106|16|20|0
107|39|41|0
108|48|50|0
109|40|50|0
110|38|41|1
111|40|43|1
112|26|29|0
113|37|39|0
114|21|30|0
115|36|41|1
116|46|48|0
117|27|32|0
118|26|29|0
119|29|38|0
120|47|58|0
"))
# C) hypothetical data from a retrospective natural history study
data_c = read.table(sep='|',header=T,textConnection("
indiv_id|age|event
201|43|1
202|53|1
203|64|1
204|45|1
205|88|1
206|70|1
207|66|1
208|55|1
209|51|1
210|48|1
211|63|1
212|36|0
213|61|0
214|63|1
215|63|1
216|57|1
217|74|0
218|63|1
219|59|1
220|57|1
"))
# one possible approach to compare A and B using Cox counting model
data_a$drug = TRUE
data_b$drug = FALSE
nh_compare = rbind(data_a, data_b)
m = survfit(Surv(time=starting_age,time2=last_age,event=event,type='counting')~drug, data=nh_compare)
summary(m)
coxph(Surv(time=starting_age,time2=last_age,event=event,type='counting')~drug, data=nh_compare)
Lưu ý cuối cùng: vì danh tiếng 10 là bắt buộc để đăng> 2 liên kết trên Xác thực chéo, tôi đã xóa tất cả (nhiều) siêu liên kết nên xuất hiện trên. Một phiên bản của bài đăng này với các liên kết có sẵn trên blog của tôi và tôi sẽ cập nhật bài đăng này để bao gồm các liên kết nếu hoặc khi tôi được phép làm như vậy. Cập nhật: cảm ơn mọi người đã ủng hộ! Bây giờ tôi có danh tiếng> 10 và đã cập nhật bài đăng này để bao gồm các liên kết.