Các vấn đề với một nghiên cứu mô phỏng về giải thích thí nghiệm lặp đi lặp lại về khoảng tin cậy 95% - tôi đang sai ở đâu?


9

Tôi đang cố gắng viết một tập lệnh R để mô phỏng việc diễn giải các thí nghiệm lặp đi lặp lại về khoảng tin cậy 95%. Tôi đã thấy rằng nó đánh giá quá cao tỷ lệ các lần trong đó giá trị dân số thực của tỷ lệ được chứa trong 95% CI của mẫu. Không phải là một sự khác biệt lớn - khoảng 96% so với 95% nhưng điều này dù sao cũng khiến tôi quan tâm.

Hàm của tôi lấy một mẫu samp_ntừ phân phối Bernoulli với xác suất pop_pvà sau đó tính khoảng tin cậy 95% bằng prop.test()cách sử dụng hiệu chỉnh liên tục hoặc chính xác hơn là với binom.test(). Nó trả về 1 nếu tỷ lệ dân số thực pop_pđược chứa trong 95% CI. Tôi đã viết hai hàm, một hàm sử dụng prop.test()và một hàm sử dụng binom.test()và có kết quả tương tự với cả hai:

in_conf_int_normal <- function(pop_p = 0.3, samp_n = 1000, correct = T){
    ## uses normal approximation to calculate confidence interval
    ## returns 1 if the CI contain the pop proportion
    ## returns 0 otherwise
    samp <- rbinom(samp_n, 1, pop_p)
    pt_result <- prop.test(length(which(samp == 1)), samp_n)
    lb <- pt_result$conf.int[1]
        ub <- pt_result$conf.int[2]
    if(pop_p < ub & pop_p > lb){
        return(1)
    } else {
    return(0)
    }
}
in_conf_int_binom <- function(pop_p = 0.3, samp_n = 1000, correct = T){
    ## uses Clopper and Pearson method
    ## returns 1 if the CI contain the pop proportion
    ## returns 0 otherwise
    samp <- rbinom(samp_n, 1, pop_p)
    pt_result <- binom.test(length(which(samp == 1)), samp_n)
    lb <- pt_result$conf.int[1]
        ub <- pt_result$conf.int[2] 
    if(pop_p < ub & pop_p > lb){
        return(1)
    } else {
    return(0)
    }
 }

Tôi đã thấy rằng khi bạn lặp lại thí nghiệm vài nghìn lần, tỷ lệ số lần pop_ptrong phạm vi 95% CI của mẫu gần với 0,96 thay vì 0,95.

set.seed(1234)
times = 10000
results <- replicate(times, in_conf_int_binom())
sum(results) / times
[1] 0.9562

Suy nghĩ của tôi cho đến nay tại sao điều này có thể là trường hợp

  • mã của tôi sai (nhưng tôi đã kiểm tra nó rất nhiều)
  • Ban đầu tôi nghĩ rằng đây là do vấn đề gần đúng bình thường, nhưng sau đó đã tìm thấy binom.test()

Bất kỳ đề xuất?


(+1) Nhân tiện, tôi đã chạy lại mã của bạn với times=100000một vài lần khác nhau và thấy kết quả tương tự. Tôi tò mò muốn xem có ai có lời giải thích cho việc này không. Mã này đủ đơn giản mà tôi khá chắc chắn không có lỗi mã hóa. Ngoài ra, một lần chạy thử với times=1000000cho .954931là kết quả.
Macro

3
(+1) Nhưng tại sao bạn mong đợi nhận được chính xác 95%? Clopper Pearson chẳng hạn được đảm bảo là bảo thủ. Đối với và của bạn , tôi nhận được rằng CI sẽ bao gồm giá trị thực 95,3648% thời gian. np
Đức hồng y

2
Để hỗ trợ các hồng y nhận xét xác suất nhị thức chính xác là chính xác bởi vì dựa trên tính toán xác suất chính xác nhưng chúng không nhất thiết phải đưa ra mức độ tin cậy chính xác. Đó là bởi vì nhị thức là một phân phối rời rạc. Vì vậy, Clopper-Pearson chọn điểm cuối cho khoảng thời gian để bạn có xác suất gần nhất với mức độ tin cậy ở hoặc trên nó. Điều này cũng tạo ra một hành vi răng cưa cho chức năng sức mạnh của một bài kiểm tra nhị thức chính xác. Kết quả kỳ lạ nhưng cơ bản này được thảo luận trong bài báo của tôi với Christine Liu trong Thống kê Hoa Kỳ (2002).
Michael R. Chernick

1
Chi tiết về bài viết của tôi tại liên kết này: citeulike.org/user/austin987/article/7571878
Michael R. Chernick

3
Các chỉ số Binomial chính xác là "chính xác" vì hiệu suất thực tế của chúng bằng hiệu suất danh nghĩa của chúng, không phải vì tính toán xác suất là "chính xác"! Nó phải được hiểu rằng một CI phải có ít nhất một cơ hội bao gồm các tham số thực sự, không có vấn đề gì sự phân bố cơ bản là (trong gia đình giả định). "Chính xác" có nghĩa là mức tối thiểu của tất cả các khoản bảo hiểm này, chiếm toàn bộ họ phân phối, bằng . Để đạt được điều này, phạm vi bảo hiểm thực tế cho nhiều phân phối có thể thường phải lớn hơn . 1-α1-α 1-α1-α
whuber

Câu trả lời:


9

Bạn sẽ không sai. Nó chỉ đơn giản là không thể để xây dựng một khoảng tin cậy cho một tỷ lệ nhị thứcluôn luôn có độ bao phủ của chính xác 95% do tính chất rời rạc của kết quả. Khoảng thời gian Clopper-Pearson ('chính xác') được đảm bảo có phạm vi bảo hiểm ít nhất 95%. Các khoảng khác có phạm vi bảo hiểm trung bình gần 95% , khi tính trung bình trên tỷ lệ thực.

Tôi có xu hướng ủng hộ khoảng thời gian Jeffreys, vì nó có độ bao phủ trung bình gần 95% và (không giống như khoảng điểm Wilson) độ bao phủ xấp xỉ bằng nhau ở cả hai đuôi.

Chỉ với một thay đổi nhỏ trong mã trong câu hỏi, chúng ta có thể tính toán phạm vi bảo hiểm chính xác mà không cần mô phỏng.

p <- 0.3
n <- 1000

# Normal test
CI <- sapply(0:n, function(m) prop.test(m,n)$conf.int[1:2])
caught.you <- which(CI[1,] <= p & p <= CI[2,])
coverage.pr <- sum(dbinom(caught.you - 1, n, p))

# Clopper-Pearson
CI <- sapply(0:n, function(m) binom.test(m,n)$conf.int[1:2])
caught.you.again <- which(CI[1,] <= p & p <= CI[2,])
coverage.cp <- sum(dbinom(caught.you.again - 1, n, p))

Điều này mang lại đầu ra sau đây.

> coverage.pr
[1] 0.9508569

> coverage.cp
[1] 0.9546087

1
" Đơn giản là không thể xây dựng khoảng tin cậy cho tỷ lệ nhị thức luôn có độ bao phủ chính xác 95% do tính chất rời rạc của kết quả " --- có lẽ, đối với khả năng (hơi kỳ lạ) của các khoảng ngẫu nhiên . (Ít nhất là theo cách đó, nó có thể được thực hiện, mặc dù có thể là nó thường không nên .)
Glen_b -Reinstate Monica

2
@Glen_b Tôi từ lâu đã tò mò về sự phản đối đối với các quyết định ngẫu nhiên. Tôi tin rằng Jack Kiefer nhận xét rằng nếu bạn ổn khi sử dụng ngẫu nhiên để thu thập các mẫu của mình, bạn sẽ không gặp vấn đề gì khi sử dụng nó trong quá trình quyết định. Nếu bạn cần một quy trình quyết định có thể lặp lại, ghi lại và khó gian lận, chỉ cần tạo bất kỳ giá trị ngẫu nhiên nào cần thiết cho khoảng thời gian ngẫu nhiên trước khi thu thập dữ liệu - biến nó thành một phần của thiết kế.
whuber
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.