Se cree que son simétricos porque a menudo se utiliza una aproximación normal. Ésta funciona bastante bien en el caso de que p esté en torno a 0,5. binom.test
por otro lado, informa de los intervalos "exactos" de Clopper-Pearson, que se basan en la distribución F (véase aquí para las fórmulas exactas de ambos enfoques). Si implementáramos el intervalo de Clopper-Pearson en R sería algo como (ver Nota: ):
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))
}
Se ve tanto en el enlace como en la aplicación que la fórmula para el límite superior y el inferior son completamente diferentes. El único caso de intervalo de confianza simétrico es cuando p=0,5. Utilizando las fórmulas del enlace y teniendo en cuenta que en este caso $n = 2\times x$ es fácil derivar a ti mismo cómo viene.
Personalmente lo entendí mejor mirando los intervalos de confianza basados en un enfoque logístico. Los datos binomiales se modelan generalmente utilizando una función de enlace logit, definida como:
$${\rm logit}(x) = \log\! \bigg( \frac{x}{1-x} \bigg)$$
Esta función de enlace "mapea" el término de error en una regresión logística a una distribución normal. Como consecuencia, los intervalos de confianza en el marco logístico son simétricos en torno a los valores logit, al igual que en el marco clásico de la regresión lineal. La transformación logit se utiliza exactamente para poder utilizar toda la teoría basada en la normalidad en torno a la regresión lineal.
Después de hacer la transformación inversa:
$${\rm logit}^{-1}(x) = \frac{e^x}{1+e^{x}}$$
Vuelves a tener un intervalo asimétrico. Ahora bien, estos intervalos de confianza están realmente sesgados. Su cobertura no es la esperada, especialmente en los límites de la distribución binomial. Sin embargo, como ilustración te muestran por qué es lógico que una distribución binomial tenga intervalos de confianza asimétricos.
Un ejemplo en 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
Nota: : De hecho, R utiliza la distribución beta, pero ésta es completamente equivalente y computacionalmente un poco más eficiente. La implementación en R es, por tanto, diferente a la que muestro aquí, pero da exactamente el mismo resultado.