Sơ bộ:
NESα
Ngoài bài đăng xuất sắc của @ GregSnow , một hướng dẫn thực sự tuyệt vời khác để phân tích sức mạnh dựa trên mô phỏng trên CV có thể được tìm thấy ở đây: Tính công suất thống kê . Để tóm tắt các ý tưởng cơ bản:
- Tìm ra hiệu ứng bạn muốn có thể phát hiện ra
- tạo dữ liệu N từ thế giới có thể
- chạy phân tích mà bạn dự định tiến hành trên những dữ liệu giả
- lưu trữ xem kết quả có 'đáng kể' theo alpha bạn đã chọn không
- BN
- N
ppBpB
Trong R, cách chính để tạo dữ liệu nhị phân với xác suất 'thành công' nhất định là ? Rbinom
- Ví dụ: để có được số lần thành công trong số 10 thử nghiệm Bernoulli với xác suất p, mã sẽ là
rbinom(n=10, size=1, prob=p)
(bạn có thể muốn gán kết quả cho một biến để lưu trữ)
- bạn cũng có thể tạo ra dữ liệu đó một cách thanh lịch bằng cách sử dụng ? runif , ví dụ:
ifelse(runif(1)<=p, 1, 0)
- nếu bạn tin rằng các kết quả được trung gian bởi một biến Gaussian tiềm ẩn, bạn có thể tạo biến tiềm ẩn dưới dạng hàm của các đồng biến của bạn với ? rnorm , sau đó chuyển đổi chúng thành xác suất
pnorm()
và sử dụng chúng trong rbinom()
mã của bạn .
var12var1∗var2var12∗var2
- Mặc dù được viết trong bối cảnh của một câu hỏi khác nhau, câu trả lời của tôi ở đây: Sự khác biệt giữa mô hình logit và probit có rất nhiều thông tin cơ bản về các loại mô hình này.
Cũng như có nhiều loại khác nhau của tỷ lệ lỗi loại I khi có nhiều giả thuyết (ví dụ, tỷ lệ lỗi mỗi Ngược lại , tỷ lệ lỗi familywise , & tỷ lệ lỗi mỗi gia đình ), vì vậy đang có các loại khác nhau của điện * (ví dụ, đối với một hiệu ứng được chỉ định trước , cho bất kỳ hiệu ứng nào , và cho tất cả các hiệu ứng ). Bạn cũng có thể tìm kiếm sức mạnh để phát hiện một sự kết hợp cụ thể của các hiệu ứng hoặc cho sức mạnh của một thử nghiệm đồng thời của toàn bộ mô hình. Tôi đoán từ mô tả của bạn về mã SAS của bạn là nó đang tìm kiếm cái sau. Tuy nhiên, từ mô tả của bạn về tình huống của bạn, tôi giả sử bạn muốn phát hiện các hiệu ứng tương tác ở mức tối thiểu.
- * tham khảo: Maxwell, SE (2004). Sự kiên trì của các nghiên cứu thiếu năng lực trong nghiên cứu tâm lý: nguyên nhân, hậu quả và biện pháp khắc phục. Phương pháp tâm lý , 9 , 2 , trang 147-163.
- hiệu ứng của bạn khá nhỏ (không bị nhầm lẫn với tỷ lệ phản hồi thấp), vì vậy chúng tôi sẽ khó đạt được sức mạnh tốt.
- Lưu ý rằng, mặc dù tất cả các âm thanh này khá giống nhau, nhưng chúng rất giống nhau (ví dụ, rất có thể có được một mô hình quan trọng không có hiệu ứng đáng kể - thảo luận ở đây: Làm thế nào một hồi quy có thể là đáng kể nhưng tất cả các dự đoán đều không đáng kể?, hoặc ảnh hưởng đáng kể nhưng trong đó mô hình không đáng kể - được thảo luận ở đây: Ý nghĩa của các hệ số trong hồi quy tuyến tính: kiểm tra t đáng kể so với thống kê F không đáng kể ), sẽ được minh họa dưới đây.
Để biết cách suy nghĩ khác về các vấn đề liên quan đến quyền lực, hãy xem câu trả lời của tôi ở đây: Cách báo cáo độ chính xác chung trong việc ước tính tương quan trong bối cảnh chứng minh kích thước mẫu.
Sức mạnh hậu hoc đơn giản cho hồi quy logistic trong R:
Giả sử tỷ lệ phản hồi tích cực của bạn đại diện cho tình hình thực sự trên thế giới và bạn đã gửi 10.000 thư. Sức mạnh để phát hiện những hiệu ứng đó là gì? (Lưu ý rằng tôi nổi tiếng vì viết mã "không hiệu quả về mặt hài hước", những điều sau đây nhằm dễ theo dõi hơn là tối ưu hóa cho hiệu quả; thực tế, nó khá chậm.)
set.seed(1)
repetitions = 1000
N = 10000
n = N/8
var1 = c( .03, .03, .03, .03, .06, .06, .09, .09)
var2 = c( 0, 0, 0, 1, 0, 1, 0, 1)
rates = c(0.0025, 0.0025, 0.0025, 0.00395, 0.003, 0.0042, 0.0035, 0.002)
var1 = rep(var1, times=n)
var2 = rep(var2, times=n)
var12 = var1**2
var1x2 = var1 *var2
var12x2 = var12*var2
significant = matrix(nrow=repetitions, ncol=7)
startT = proc.time()[3]
for(i in 1:repetitions){
responses = rbinom(n=N, size=1, prob=rates)
model = glm(responses~var1+var2+var12+var1x2+var12x2,
family=binomial(link="logit"))
significant[i,1:5] = (summary(model)$coefficients[2:6,4]<.05)
significant[i,6] = sum(significant[i,1:5])
modelDev = model$null.deviance-model$deviance
significant[i,7] = (1-pchisq(modelDev, 5))<.05
}
endT = proc.time()[3]
endT-startT
sum(significant[,1])/repetitions # pre-specified effect power for var1
[1] 0.042
sum(significant[,2])/repetitions # pre-specified effect power for var2
[1] 0.017
sum(significant[,3])/repetitions # pre-specified effect power for var12
[1] 0.035
sum(significant[,4])/repetitions # pre-specified effect power for var1X2
[1] 0.019
sum(significant[,5])/repetitions # pre-specified effect power for var12X2
[1] 0.022
sum(significant[,7])/repetitions # power for likelihood ratio test of model
[1] 0.168
sum(significant[,6]==5)/repetitions # all effects power
[1] 0.001
sum(significant[,6]>0)/repetitions # any effect power
[1] 0.065
sum(significant[,4]&significant[,5])/repetitions # power for interaction terms
[1] 0.017
Vì vậy, chúng tôi thấy rằng 10.000 chữ cái không thực sự đạt được 80% năng lượng (dưới bất kỳ hình thức nào) để phát hiện các tỷ lệ phản hồi này. (Tôi không đủ chắc chắn về những gì mã SAS đang làm để có thể giải thích sự khác biệt rõ ràng giữa các cách tiếp cận này, nhưng mã này về mặt khái niệm rất đơn giản - nếu chậm - và tôi đã dành thời gian để kiểm tra nó, và tôi nghĩ rằng kết quả hợp lý.)
Sức mạnh a-tiên nghiệm dựa trên mô phỏng cho hồi quy logistic:
NNNN
NN
sum(significant[,1])/repetitions # pre-specified effect power for var1
[1] 0.115
sum(significant[,2])/repetitions # pre-specified effect power for var2
[1] 0.091
sum(significant[,3])/repetitions # pre-specified effect power for var12
[1] 0.059
sum(significant[,4])/repetitions # pre-specified effect power for var1X2
[1] 0.606
sum(significant[,5])/repetitions # pre-specified effect power for var12X2
[1] 0.913
sum(significant[,7])/repetitions # power for likelihood ratio test of model
[1] 1
sum(significant[,6]==5)/repetitions # all effects power
[1] 0.005
sum(significant[,6]>0)/repetitions # any effect power
[1] 0.96
sum(significant[,4]&significant[,5])/repetitions # power for interaction terms
[1] 0.606
var12significant
N