Hiểu phân tích sức mạnh của các bài kiểm tra giả thuyết thống kê có thể được tăng cường bằng cách thực hiện một số và xem xét kỹ các kết quả.
Theo thiết kế, một thử nghiệm về kích thước được dự định để từ chối giả thuyết null với cơ hội ít nhất là khi null là đúng ( tỷ lệ dương tính giả dự kiến của nó ). αalphaα Khi chúng tôi có khả năng (hoặc sang trọng) trong việc lựa chọn trong số các thủ tục thay thế với tài sản này, chúng tôi sẽ thích những phương pháp (a) thực sự gần với tỷ lệ dương tính giả danh nghĩa và (b) có cơ hội từ chối giả thuyết khống tương đối cao hơn khi nó không đúng.
Tiêu chí thứ hai yêu cầu chúng tôi quy định theo cách nào và bao nhiêu null không thành sự thật. Trong trường hợp sách giáo khoa, điều này là dễ dàng, bởi vì các lựa chọn thay thế bị giới hạn về phạm vi và được chỉ định rõ ràng. Với các thử nghiệm phân phối như Shapiro-Wilk, sự thay thế còn mơ hồ hơn nhiều: chúng "không bình thường". Sau đó, khi lựa chọn trong số các thử nghiệm phân phối, nhà phân tích có thể phải tiến hành nghiên cứu sức mạnh một lần của riêng họ để đánh giá các thử nghiệm hoạt động tốt như thế nào trước các giả thuyết thay thế cụ thể hơn đang được quan tâm trong vấn đề.
Một ví dụ được thúc đẩy bởi câu trả lời của Michael Mayer cho rằng phân phối thay thế có thể có những phẩm chất tương tự như các phân phối của gia đình Sinh viên t. Họ này, được tham số hóa bởi một số (cũng như theo vị trí và tỷ lệ) bao gồm trong giới hạn lớn các phân phối Bình thường.ν≥ 1ν
Trong cả hai trường hợp - dù đánh giá kích thước thử nghiệm thực tế hay sức mạnh của nó-- chúng ta phải tạo các mẫu độc lập từ một phân phối xác định, chạy thử nghiệm trên từng mẫu và tìm tốc độ từ chối giả thuyết khống. Tuy nhiên, có nhiều thông tin có sẵn trong bất kỳ kết quả thử nghiệm nào: giá trị P của nó. Bằng cách giữ lại tập hợp các giá trị P được tạo trong quá trình mô phỏng như vậy, sau đó chúng ta có thể đánh giá tốc độ thử nghiệm sẽ từ chối null cho bất kỳ giá trị nào của mà chúng ta có thể quan tâm. Trung tâm của phân tích công suất, sau đó, là một chương trình con tạo ra phân phối giá trị P này (bằng cách mô phỏng, như vừa mô tả, hoặc - đôi khi - với một công thức lý thuyết). Đây là một ví dụ được mã hóa trong . Đối số của nó bao gồmαR
rdist
, tên của hàm để tạo mẫu ngẫu nhiên từ một số phân phối
n
, kích thước của mẫu để yêu cầu rdist
n.iter
, số lượng mẫu như vậy để có được
...
rdist
ν
Các thông số còn lại kiểm soát việc hiển thị kết quả; chúng được bao gồm chủ yếu như một sự thuận tiện để tạo ra các số liệu trong câu trả lời này.
sim <- function(rdist, n, n.iter, prefix="",
breaks=seq(0, 1, length.out=20), alpha=0.05,
plot=TRUE, ...) {
# The simulated P-values.
# NB: The optional arguments "..." are passed to `rdist` to specify
# its parameters (if any).
x <- apply(matrix(rdist(n*n.iter, ...), ncol=n.iter), 2,
function(y) shapiro.test(y)$p.value)
# The histogram of P-values, if requested.
if (plot) {
power <- mean(x <= alpha)
round.n <- 1+ceiling(log(1 + n.iter * power * (1-power), base=10) / 2)
hist(x[x <= max(breaks)], xlab=paste("P value (n=", n, ")", sep=""),
breaks=breaks,
main=paste(prefix, "(power=", format(power, digits=round.n), ")", sep=""))
# Specially color the "significant" part of the histogram
hist(x[x <= alpha], breaks=breaks, col="#e0404080", add=TRUE)
}
# Return the array of P-values for any further processing.
return(x)
}
5100.n520.
n.iter <- 10^5 # Number of samples to generate
n.spec <- c(5, 10, 20) # Sample sizes to study
par(mfrow=c(1,length(n.spec))) # Organize subsequent plots into a tableau
system.time(
invisible(sapply(n.spec, function(n) sim(rnorm, n, n.iter, prefix="DF = Inf ")))
)
Sau khi chỉ định các tham số, mã này cũng chỉ là một dòng. Nó mang lại đầu ra sau:
01α = 0,05 ,.04810,0499
10,2
νν=100ν=11001000), mà không mất thời gian nào cả. Mã bây giờ yêu cầu một vòng lặp kép (và trong các tình huống phức tạp hơn, chúng ta thường cần các vòng lặp ba hoặc bốn lần để phù hợp với tất cả các khía cạnh chúng ta cần thay đổi): một để nghiên cứu cách công suất thay đổi theo kích thước mẫu và một cách khác để nghiên cứu cách thay đổi với Các bậc tự do. Tuy nhiên, một lần nữa, mọi thứ được thực hiện chỉ trong một dòng mã (thứ ba và cuối cùng):
df.spec <- c(64, 16, 4, 2, 1)
par(mfrow=c(length(n.spec), length(df.spec)))
for (n in n.spec)
for (df in df.spec)
tmp <- sim(rt, n, n.iter, prefix=paste("DF =", df, ""), df=df)
Một nghiên cứu nhỏ về hoạt cảnh này cung cấp trực giác tốt về sức mạnh. Tôi muốn thu hút sự chú ý đến các khía cạnh nổi bật và hữu ích nhất của nó:
Thật thú vị khi có rất nhiều thứ có thể được lượm lặt từ những gì, thực tế, lên tới ba dòng mã: một để mô phỏng các mẫu iid từ một phân phối được chỉ định, một để áp dụng điều đó cho một mảng phân phối null và thứ ba áp dụng nó cho một mảng một loạt các phân phối thay thế. Đây là ba bước đi vào bất kỳ phân tích sức mạnh nào: phần còn lại chỉ là tóm tắt và diễn giải kết quả.