Chúng được cho là đối xứng vì thường sử dụng xấp xỉ bình thường. Cái này hoạt động đủ tốt trong trường hợp p nằm trong khoảng 0,5. binom.test
mặt khác báo cáo các khoảng Clopper-Pearson "chính xác", dựa trên phân phối F (xem ở đây để biết công thức chính xác của cả hai phương pháp). Nếu chúng ta thực hiện khoảng Clopper-Pearson trong R thì nó sẽ giống như (xem ghi chú ):
Clopper.Pearson <- function(x, n, conf.level){
alpha <- (1 - conf.level) / 2
QF.l <- qf(1 - alpha, 2*n - 2*x + 2, 2*x)
QF.u <- qf(1 - alpha, 2*x + 2, 2*n - 2*x)
ll <- if (x == 0){
0
} else { x / ( x + (n-x+1)*QF.l ) }
uu <- if (x == 0){
0
} else { (x+1)*QF.u / ( n - x + (x+1)*QF.u ) }
return(c(ll, uu))
}
Bạn thấy cả trong liên kết và trong quá trình thực hiện rằng công thức cho giới hạn trên và giới hạn dưới là hoàn toàn khác nhau. Trường hợp duy nhất của khoảng tin cậy đối xứng là khi p = 0,5. Sử dụng các công thức từ liên kết và tính đến trong trường hợp này n=2×x , thật dễ dàng để bạn tự tìm ra cách nó xuất hiện.
Cá nhân tôi hiểu nó tốt hơn khi nhìn vào khoảng tin cậy dựa trên cách tiếp cận logistic. Dữ liệu nhị thức thường được mô hình hóa bằng chức năng liên kết logit, được định nghĩa là:
logit(x)=log(x1−x)
Hàm liên kết này "ánh xạ" thuật ngữ lỗi trong hồi quy logistic sang phân phối bình thường. Kết quả là, khoảng tin cậy trong khung logistic là đối xứng xung quanh các giá trị logit, giống như trong khung hồi quy tuyến tính cổ điển. Phép biến đổi logit được sử dụng chính xác để cho phép sử dụng toàn bộ lý thuyết dựa trên quy tắc xung quanh hồi quy tuyến tính.
Sau khi thực hiện chuyển đổi ngược:
logit−1(x)=ex1+ex
Bạn nhận được một khoảng bất đối xứng một lần nữa. Bây giờ những khoảng tin cậy này thực sự thiên vị. Phạm vi bảo hiểm của họ không phải là những gì bạn mong đợi, đặc biệt là ở ranh giới phân phối nhị thức. Tuy nhiên, như một minh họa, họ cho bạn thấy lý do tại sao logic phân phối nhị thức có khoảng tin cậy không đối xứng.
Một ví dụ trong R:
logit <- function(x){ log(x/(1-x)) }
inv.logit <- function(x){ exp(x)/(1+exp(x)) }
x <- c(0.2, 0.5, 0.8)
lx <- logit(x)
upper <- lx + 2
lower <- lx - 2
logxtab <- cbind(lx, upper, lower)
logxtab # the confidence intervals are symmetric by construction
xtab <- inv.logit(logxtab)
xtab # back transformation gives asymmetric confidence intervals
lưu ý : Trên thực tế, R sử dụng phân phối beta, nhưng điều này hoàn toàn tương đương và tính toán hiệu quả hơn một chút. Do đó, việc thực hiện trong R khác với những gì tôi trình bày ở đây, nhưng nó cho kết quả chính xác như nhau.