Tính toán kích thước mẫu cho hồi quy logistic đơn biến


11

Làm thế nào để tính kích thước mẫu cần thiết cho một nghiên cứu trong đó một nhóm đối tượng sẽ có một biến liên tục duy nhất được đo tại thời điểm phẫu thuật và sau đó hai năm chúng sẽ được phân loại là kết quả chức năng hoặc kết quả suy giảm.

Chúng tôi muốn xem liệu phép đo đó có thể dự đoán được kết quả xấu hay không. Tại một số điểm, chúng tôi có thể muốn rút ra một điểm cắt trong biến liên tục ở trên mà chúng tôi sẽ cố gắng can thiệp để làm giảm xác suất của kết quả bị suy giảm.

Có ý kiến ​​gì không? Bất kỳ thực hiện R.


Bạn có mong đợi một số người bỏ học trong quá trình theo dõi? Có bất kỳ đồng biến nào khác được đưa vào mô hình của bạn không?
chl

Hãy để tôi hút một tỷ lệ bỏ học ra khỏi ngón tay cái của tôi - 20%. Chúng tôi thực sự sẽ thu thập nhiều biến số, ví dụ như tuổi, điểm chấn thương nhưng tôi muốn giữ mọi thứ đơn giản nhất có thể để tính toán sức mạnh. Tôi thường thấy hữu ích khi thảo luận về một mô hình chính và sau đó là các mô hình thứ cấp được tải với nhiều sự tinh tế và sắc thái hơn.
Farrel

Ok, nhưng thường là% bỏ học dự kiến, số lượng đồng biến và liệu các biến số có được đo bằng các lỗi hay không (xem ví dụ: j.mp/9fJkhb ) nhập công thức (trong mọi trường hợp, nó sẽ tăng kích thước mẫu).
chl

Câu trả lời:


7

Tính toán kích thước mẫu cho hồi quy logistic rất phức tạp. Tôi sẽ không cố gắng tóm tắt nó ở đây. Các giải pháp hợp lý có thể truy cập được cho vấn đề này được tìm thấy trong:

Hsieh FY. Bảng kích thước mẫu cho hồi quy logistic. Thống kê trong Y học. 1989 tháng 7; 8 (7): 795-802.

Hsieh FY, et al. Một phương pháp đơn giản để tính kích thước mẫu cho hồi quy tuyến tính và logistic. Thống kê trong Y học. 1998 30 tháng 7; 17 (14): 1623-34.

Một cuộc thảo luận có thể truy cập về các vấn đề với các tính toán mẫu có thể được tìm thấy trong chương cuối (Phần 8,5 trang 339-347) của Hồi quy logistic ứng dụng của Hosmer & Lemeshow .


7

Tôi thường thấy dễ dàng hơn và nhanh hơn để chạy một mô phỏng. Giấy tờ mất nhiều thời gian để đọc, để hiểu và cuối cùng đi đến kết luận rằng họ không áp dụng trong trường hợp đặc biệt mà người ta quan tâm.

Do đó, tôi sẽ chỉ chọn một số đối tượng, mô phỏng hiệp phương sai mà bạn quan tâm (phân phối như bạn tin), mô phỏng kết quả tốt / xấu dựa trên hình thức chức năng bạn đặt ra (hiệu ứng ngưỡng của hiệp phương sai? Phi tuyến tính?) với kích thước hiệu ứng tối thiểu (lâm sàng) mà bạn muốn phát hiện, hãy chạy kết quả thông qua phân tích của bạn và xem liệu hiệu ứng có được tìm thấy ở bản alpha của bạn không. Chạy lại 10.000 lần này và xem liệu bạn có tìm thấy hiệu ứng trong 80% mô phỏng (hoặc bất kỳ sức mạnh nào khác bạn cần). Điều chỉnh số lượng đối tượng, lặp lại cho đến khi bạn có một sức mạnh mà bạn hài lòng.

Điều này có lợi thế là rất chung chung, vì vậy bạn không bị giới hạn trong một hình thức chức năng cụ thể hoặc một số lượng cụ thể hoặc phân phối hiệp phương sai. Bạn có thể bao gồm những người bỏ học, xem bình luận của chl ở trên, ngẫu nhiên hoặc bị ảnh hưởng bởi hiệp phương sai hoặc kết quả. Về cơ bản, bạn viết mã phân tích mà bạn sẽ thực hiện trên mẫu cuối cùng trước đó, điều này đôi khi giúp tập trung suy nghĩ của tôi vào thiết kế nghiên cứu. Và nó dễ dàng được thực hiện trong R (vectorize!).


Bạn có một trường hợp làm việc trong R?
Farrel

1
@Farrel - đây là một tập lệnh rất ngắn, giả sử [0,1] các hiệp phương sai phân bố đồng nhất, OR là 2 giữa phần tư thứ nhất và thứ ba của nhiễu đồng biến và tiêu chuẩn, dẫn đến công suất .34 cho n = 100. Tôi sẽ chơi xung quanh vấn đề này để xem mọi thứ nhạy cảm như thế nào với các giả định của tôi: chạy <- 1000; nn <- 100; set.seed (2010); phát hiện <- sao chép (n = chạy, expr = {covariate <- runif (nn); kết quả <- runif (nn) <1 / (1 + exp (-2 * log (2) * covariate + rnorm (nn)) ); tóm tắt (glm (result ~ covariate, Family = "binomial")) $ coefficents ["covariate", "Pr (> | z |)"] <.05}) cat ("Power:", sum (phát hiện) / chạy, "\ n")
Stephan Kolassa

1
Bạn có thể đính kèm mã của mình dưới dạng pastie ( pastebin.com ) hoặc Gist ( gist.github.com ) nếu bạn cảm thấy thuận tiện hơn và liên kết lại với nó trong bình luận của bạn.
chl

@chl: +1, cảm ơn rất nhiều! Đây là ý chính: gist.github.com/607968
Stephan Kolassa

Mã lớn nhưng có một vấn đề. Tôi không thông minh như bạn. Tôi cần nó phá vỡ từng bước. Tôi lấy nó là chạy số mô phỏng? Nn là gì? Có phải là số lượng đối tượng trong nghiên cứu? Sau đó, tôi thấy bạn đã tạo ra một phân phối hiệp phương sai và làm cho chúng xác định có hay không tùy thuộc vào ngưỡng.
Farrel

4

Theo dõi từ bài đăng của Stephan Kolassa (Tôi không thể thêm nhận xét này dưới dạng nhận xét), tôi có một số mã thay thế cho mô phỏng. Điều này sử dụng cùng một cấu trúc cơ bản, nhưng được phát nổ hơn một chút, vì vậy có lẽ nó dễ đọc hơn một chút. Nó cũng dựa trên mã của Kleinman và Horton để mô phỏng hồi quy logistic.

nn là số trong mẫu. Hiệp phương sai phải được phân phối bình thường liên tục và được chuẩn hóa thành 0 và sd 1. Chúng tôi sử dụng rnorm (nn) để tạo ra điều này. Chúng tôi chọn một tỷ lệ cược và lưu trữ nó trong odds.ratio. Chúng tôi cũng chọn một số cho đánh chặn. Sự lựa chọn của con số này chi phối tỷ lệ của mẫu trải nghiệm "sự kiện" (ví dụ 0,1, 0,4, 0,5). Bạn phải chơi xung quanh với con số này cho đến khi bạn có được tỷ lệ đúng. Đoạn mã sau cung cấp cho bạn tỷ lệ 0,1 với cỡ mẫu là 950 và OR là 1,5:

nn <- 950
runs <- 10000
intercept <- log(9)
odds.ratio <- 1.5
beta <- log(odds.ratio)
proportion  <-  replicate(
              n = runs,
              expr = {
                  xtest <- rnorm(nn)
                  linpred <- intercept + (xtest * beta)
                  prob <- exp(linpred)/(1 + exp(linpred))
                  runis <- runif(length(xtest),0,1)
                  ytest <- ifelse(runis < prob,1,0)
                  prop <- length(which(ytest <= 0.5))/length(ytest)
                  }
            )
summary(proportion)

tóm tắt (tỷ lệ) xác nhận rằng tỷ lệ là ~ 0,1

Sau đó, sử dụng cùng một biến, công suất được tính trên 10000 lần chạy:

result <-  replicate(
              n = runs,
              expr = {
                  xtest <- rnorm(nn)
                  linpred <- intercept + (xtest * beta)
                  prob <- exp(linpred)/(1 + exp(linpred))
                  runis <- runif(length(xtest),0,1)
                  ytest <- ifelse(runis < prob,1,0)
                  summary(model <- glm(ytest ~ xtest,  family = "binomial"))$coefficients[2,4] < .05
                  }
            )
print(sum(result)/runs)

Tôi nghĩ rằng mã này là chính xác - tôi đã kiểm tra nó so với các ví dụ được đưa ra trong Hsieh, 1998 (bảng 2) và dường như nó đồng ý với ba ví dụ được đưa ra ở đó. Tôi cũng đã thử nghiệm nó với ví dụ trên trang 342 - 343 của Hosmer và Lemeshow, nơi nó tìm thấy sức mạnh 0,75 (so với 0,8 trong Hosmer và Lemeshow). Vì vậy, có thể trong một số trường hợp, cách tiếp cận này đánh giá thấp sức mạnh. Tuy nhiên, khi tôi chạy ví dụ tương tự trong máy tính trực tuyến này , tôi đã thấy rằng nó đồng ý với tôi và không phải là kết quả trong Hosmer và Lemeshow.

Nếu bất cứ ai có thể cho chúng tôi biết lý do tại sao lại như vậy, tôi rất muốn biết.


Tôi có 2 câu hỏi nếu bạn không phiền.1) Hàm tỷ lệ có đơn giản chỉ để đánh chặn đúng không? 2) logic đằng sau việc sử dụng ytest (so sánh thăm dò với một lần rút ngẫu nhiên) là gì?
B_Miner

@B_Miner 1) Cách khác - để có tỷ lệ chính xác, bạn cần đặt chính xác phần chặn - vì vậy hãy điều chỉnh phần chặn cho đến khi bạn có được tỷ lệ mà bạn đang mong đợi. 2) Logic của ytest là chúng ta cần nhận được kết quả 0 hoặc 1 nhị phân. Vì vậy, chúng tôi so sánh từng mẫu từ phân phối đồng đều với xác suất (thăm dò) để có được kết quả phân đôi. 'Runis' không phải được rút ra từ phân phối thống nhất ngẫu nhiên - phân phối nhị thức hoặc phân phối khác có thể có ý nghĩa hơn đối với dữ liệu của bạn. Hy vọng điều này sẽ giúp (xin lỗi vì sự chậm trễ trong việc trả lời).
Andrew

3

θ=10:θ=0

Trên thực tế, có vẻ như tho nghiên cứu của bạn sẽ được thực hiện theo cách liên tiếp. trong trường hợp đó, nó có thể trả tiền để biến nó thành một phần rõ ràng của thí nghiệm. lấy mẫu liên tiếp thường có thể hiệu quả hơn so với một thử nghiệm cỡ mẫu cố định [trung bình cần ít quan sát hơn].

farrel: tôi đang thêm điều này để trả lời bình luận của bạn.

để đạt được kích thước mẫu, người ta thường chỉ định một số loại tiêu chí chính xác cho ước tính [chẳng hạn như độ dài của CI] HOẶC công suất tại một thay thế thử nghiệm được chỉ định sẽ được thực hiện trên dữ liệu. bạn dường như đã đề cập đến cả hai tiêu chí này. Về nguyên tắc, không có gì sai cả: bạn chỉ cần thực hiện hai phép tính kích thước mẫu - một để đạt được độ chính xác ước tính mong muốn - và một để có được công suất mong muốn ở phương án đã nêu. sau đó lớn hơn của hai cỡ mẫu là những gì được yêu cầu. [btw - ngoài việc nói 80% sức mạnh - dường như bạn đã không đề cập đến thử nghiệm nào bạn dự định thực hiện - hoặc giải pháp thay thế mà bạn muốn có 80% sức mạnh.]

như đối với việc sử dụng phân tích tuần tự: nếu các đối tượng được đăng ký vào nghiên cứu cùng một lúc, thì một cỡ mẫu cố định có ý nghĩa. nhưng nếu các môn học cách nhau rất xa, có thể mất một hoặc hai năm [hoặc hơn] để có được số lượng yêu cầu đăng ký. do đó, thử nghiệm có thể diễn ra trong ba hoặc bốn năm [hoặc hơn]. trong trường hợp đó, một sơ đồ tuần tự cung cấp khả năng dừng lại sớm hơn thế - nếu hiệu ứng mà bạn đang tìm kiếm trở nên có ý nghĩa thống kê trước đó trong thử nghiệm.


Tiêu chí sẽ chênh lệch 10% về xác suất kết quả tốt và xấu. Hoặc giả sử vì nó sẽ là hồi quy logistic, tỷ lệ chênh lệch = 2. alpha = 0,05, power = 80%, tôi chưa biết phương sai gộp trên biến liên tục là gì nhưng chúng ta hãy giả sử rằng độ lệch chuẩn là 7mmHg. Phân tích tuần tự sẽ tốt nhưng kết quả cuối cùng là hai năm sau khi thực hiện phép đo.
Farrel
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.