Se cree que son simétricos porque a menudo se usa una aproximación normal. Éste funciona lo suficientemente bien en caso de que p mida alrededor de 0.5 binom.test
por otro lado, informa los intervalos "exactos" de Clopper-Pearson, que se basan en la distribución F (consulte aquí las fórmulas exactas de ambos enfoques). Si implementamos el intervalo Clopper-Pearson en R, sería algo así 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))
}
Puede ver tanto en el enlace como en la implementación que la fórmula para el límite superior e inferior son completamente diferentes. El único caso de un intervalo de confianza simétrico es cuando p = 0.5. Usando las fórmulas del enlace y teniendo en cuenta que en este caso es fácil deducir cómo viene.n = 2 × x
Personalmente lo entendí mejor mirando los intervalos de confianza basados en un enfoque logístico. Los datos binomiales generalmente se modelan utilizando una función de enlace logit, definida como:
l o g i t ( x ) = log( x1 - x)
Esta función de enlace "asigna" 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 alrededor de los valores logit, al igual que en el marco de regresión lineal clásico. La transformación logit se usa exactamente para permitir el uso de toda la teoría basada en la normalidad alrededor de la regresión lineal.
Después de hacer la transformación inversa:
logit−1(x)=ex1+ex
Obtienes un intervalo asimétrico de nuevo. Ahora estos intervalos de confianza están sesgados. Su cobertura no es lo que cabría esperar, especialmente en los límites de la distribución binomial. Sin embargo, como ilustración, le 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 usa la distribución beta, pero esto es completamente equivalente y computacionalmente un poco más eficiente. La implementación en R es, por lo tanto, diferente de lo que muestro aquí, pero da exactamente el mismo resultado.