Uważa się je za symetryczne, ponieważ dość często stosuje się normalne przybliżenie. Ten działa wystarczająco dobrze, jeśli p wynosi około 0,5. binom.test
z drugiej strony podaje „dokładne” przedziały Cloppera-Pearsona, które są oparte na rozkładzie F (zobacz tutaj dokładne formuły obu podejść). Gdybyśmy zaimplementowali interwał Cloppera-Pearsona w R, byłoby to coś w rodzaju (patrz uwaga ):
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))
}
Zarówno w linku, jak i implementacji widać, że formuła dla górnej i dolnej granicy jest zupełnie inna. Jedynym przypadkiem symetrycznego przedziału ufności jest sytuacja, gdy p = 0,5. Używając wzorów z linku i biorąc pod uwagę, że w tym przypadku łatwo jest ustalić, jak to jest.n=2×x
Osobiście zrozumiałem to lepiej, patrząc na przedziały ufności oparte na podejściu logistycznym. Dane dwumianowe są na ogół modelowane za pomocą funkcji łącza logit, zdefiniowanej jako:
logit(x)=log(x1−x)
Ta funkcja łącza „odwzorowuje” błąd w regresji logistycznej na rozkład normalny. W konsekwencji przedziały ufności w ramach logistycznych są symetryczne wokół wartości logit, podobnie jak w klasycznych ramach regresji liniowej. Transformacja logit jest używana dokładnie, aby umożliwić wykorzystanie całej teorii opartej na normalności wokół regresji liniowej.
Po wykonaniu odwrotnej transformacji:
logit−1(x)=ex1+ex
Znowu dostajesz asymetryczny interwał. Teraz te przedziały ufności są właściwie stronnicze. Ich zasięg nie jest tym, czego można się spodziewać, zwłaszcza na granicach rozkładu dwumianowego. Jednak jako ilustracja pokazują, dlaczego logiczne jest, że rozkład dwumianowy ma asymetryczne przedziały ufności.
Przykład w 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
Uwaga : W rzeczywistości R używa rozkładu beta, ale jest to całkowicie równoważne i obliczeniowo nieco bardziej wydajne. Implementacja w R różni się zatem od tego, co tutaj pokazuję, ale daje dokładnie ten sam rezultat.