Вважається, що вони симетричні, тому що досить часто використовується нормальне наближення. Цей працює досить добре, якщо р лежить близько 0,5. binom.test
з іншого боку, повідомляє про "точні" інтервали Clopper-Pearson, які базуються на розподілі F (див. тут точні формули обох підходів). Якби ми реалізували інтервал Clopper-Pearson в R, це було б щось на зразок (див. Примітку ):
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))
}
Як за посиланням, так і за реалізацією ви бачите, що формула верхньої та нижньої межі абсолютно відрізняється. Єдиний випадок симетричного довірчого інтервалу - коли p = 0,5. Використовуючи формули за посиланням та беручи до уваги, що в цьому випадку легко зрозуміти, як це відбувається.n=2×x
Я особисто це зрозумів, дивлячись на довірчі інтервали, засновані на логістичному підході. Біноміальні дані, як правило, моделюються за допомогою функції посилання logit, визначеної як:
logit(x)=log(x1−x)
Ця функція зв'язку "відображає" термін помилки в логістичній регресії до нормального розподілу. Як наслідок, довірчі інтервали в логістичній структурі симетричні навколо значень logit, подібно до класичної лінійної регресійної системи. Перетворення logit використовується саме для того, щоб використовувати всю теорію, засновану на нормальності, навколо лінійної регресії.
Після здійснення зворотного перетворення:
logit−1(x)=ex1+ex
Ви знову отримуєте асиметричний інтервал. Зараз ці довірчі інтервали фактично упереджені. Їх висвітлення - це не те, чого можна було б очікувати, особливо на межах біноміального розподілу. Однак, як ілюстрацію вони показують, чому логічно, що біноміальний розподіл має асиметричні довірчі інтервали.
Приклад в 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
Примітка : Насправді R використовує бета-розподіл, але це абсолютно рівнозначно і обчислювально трохи ефективніше. Таким чином, реалізація в R відрізняється від того, що я показую тут, але це дає точно такий же результат.