El documento de Koopman (1984) Intervalos de confianza para la razón de dos proporciones binomiales ofrece dos métodos para calcular el intervalo de confianza. Voy a explicar aquí el primero, ya que los intervalos de confianza se pueden calcular analíticamente (el segundo método utiliza un procedimiento iterativo para encontrar los intervalos de confianza numéricamente). En primer lugar, considere la siguiente tabla de 2x2:
Gold standard
Positive Negative
Test positive a b
Test negative c d
El ratio de probabilidad de una prueba positiva es: $$ LR_{+}=\frac{a/(a+c)}{b/(b+d)} $$ y la razón de probabilidad de una prueba negativa es: $$ LR_{-}=\frac{c/(a+c)}{d/(b+d)} $$
Son básicamente la relación de dos proporciones.
Intervalos de confianza utilizando una aproximación normal
Dejemos que $T = \frac{X/m}{Y/n}$ entonces la variable $\ln(T)$ tiene una distribución aproximadamente normal con una media aproximada $\ln(\theta)$ y la varianza estimada $\widehat{\sigma}^{2}=(1/x) - (1/m) + (1/y) - (1/n)$ . Una aproximación de dos lados $1-\alpha$ intervalo de confianza para $\theta$ está dada por: $$ \{t\cdot \exp(-\xi_{1-\alpha/2}\cdot\hat{\sigma}), t\cdot \exp(\xi_{1-\alpha/2}\cdot\hat{\sigma})\} $$ donde $\xi_{1-\alpha/2}$ es el $1-\frac{1}{2}\alpha$ cuantil de la distribución normal estándar $\mathcal{N}(0,1)$ (para $\alpha = 0.05$ $\xi=1.96$ ) y $t$ es el valor observado de $T$ (en su caso, $t$ serían simplemente los cocientes de probabilidad observados). En su caso, $T$ es simplemente los cocientes de probabilidad y $x=a, m=a+c, y=b, n=b+d$ para el LR positivo o $x=c, m=a+c, y=d, n=b+d$ para el LR negativo. Es importante: El documento también establece los procedimientos si $x=0, x=m, y=0$ o $y=n$ :
Si no tiene falsos positivos ( $b=y=0$ en la tabla anterior), entonces puedes sustituirlo por $b=1/2$ para calcular el límite inferior del intervalo de confianza.
En este puesto , @whuber ofrece un enfoque similar: añadir $1/2$ a ambos $x$ y $y$ y añadir $1$ tanto a la $n$ y $m$ . En este caso concreto, añada $1/2$ a $a$ y $b$ y añadir $1$ a $(a+c)$ y $(b+d)$ para el LR positivo y añadir $1/2$ a $c$ y $d$ y añadir $1$ a $(a+c)$ y $(b+d)$ para el LR negativo.
Otra formulación
El intervalo de confianza anterior puede escribirse de otra manera: $$ LR_{x}=\exp\left[\ln\left(\frac{p_1}{p_2}\right)\pm \xi_{1-\alpha/2}\cdot \sqrt{\frac{1-p_1}{p_{1}n_{1}}+\frac{1-p_2}{p_{2}n_{2}}} \right] $$ donde $\xi_{1-\alpha/2}$ es el $1-\frac{1}{2}\alpha$ cuantil de la distribución normal estándar. Nota: Para el LR positivo, $p_1=\text{sensitivity}$ y $p_2=1-\text{specificity}$ y para el LR negativo, $p_1=1-\text{sensitivity}$ y $p_2=\text{specificity}$ y $n_1 = a+c, n_2=b+d$ .
Aquí hay un poco de R
que realiza los cálculos:
lr.ci <- function( m, sig.level=0.95 ) {
alpha <- 1 - sig.level
a <- m[1, 1]
b <- m[1, 2]
c <- m[2, 1]
d <- m[2, 2]
spec <- d/(b+d)
sens <- a/(a+c)
lr.pos <- sens/(1 - spec)
if ( a != 0 & b != 0 ) {
sigma2 <- (1/a) - (1/(a+c)) + (1/b) - (1/(b+d))
lower.pos <- lr.pos * exp(-qnorm(1-(alpha/2))*sqrt(sigma2))
upper.pos <- lr.pos * exp(qnorm(1-(alpha/2))*sqrt(sigma2))
} else if ( a == 0 & b == 0 ) {
lower.pos <- 0
upper.pos <- Inf
} else if ( a == 0 & b != 0 ) {
a.temp <- (1/2)
spec.temp <- d/(b+d)
sens.temp <- a.temp/(a+c)
lr.pos.temp <- sens.temp/(1 - spec.temp)
lower.pos <- 0
sigma2 <- (1/a.temp) - (1/(a.temp+c)) + (1/b) - (1/(b+d))
upper.pos <- lr.pos.temp * exp(qnorm(1-(alpha/2))*sqrt(sigma2))
} else if ( a != 0 & b == 0 ) {
b.temp <- (1/2)
spec.temp <- d/(b.temp+d)
sens.temp <- a/(a+c)
lr.pos.temp <- sens.temp/(1 - spec.temp)
sigma2 <- (1/a) - (1/(a+c)) + (1/b.temp) - (1/(b.temp+d))
lower.pos <- lr.pos.temp * exp(-qnorm(1-(alpha/2))*sqrt(sigma2))
upper.pos <- Inf
} else if ( (a == (a+c)) & (b == (b+d)) ) {
a.temp <- a - (1/2)
b.temp <- b - (1/2)
spec.temp <- d/(b.temp+d)
sens.temp <- a.temp/(a+c)
lr.pos.temp <- sens.temp/(1 - spec.temp)
sigma2 <- (1/a.temp) - (1/(a.temp+c)) + (1/b.temp) - (1/(b.temp+d))
lower.pos <- lr.pos.temp * exp(-qnorm(1-(alpha/2))*sqrt(sigma2))
upper.pos <- lr.pos.temp * exp(qnorm(1-(alpha/2))*sqrt(sigma2))
}
lr.neg <- (1 - sens)/spec
if ( c != 0 & d != 0 ) {
sigma2 <- (1/c) - (1/(a+c)) + (1/d) - (1/(b+d))
lower.neg <- lr.neg * exp(-qnorm(1-(alpha/2))*sqrt(sigma2))
upper.neg <- lr.neg * exp(qnorm(1-(alpha/2))*sqrt(sigma2))
} else if ( c == 0 & d == 0 ) {
lower.neg<- 0
upper.neg <- Inf
} else if ( c == 0 & d != 0 ) {
c.temp <- (1/2)
spec.temp <- d/(b+d)
sens.temp <- a/(a+c.temp)
lr.neg.temp <- (1 - sens.temp)/spec.temp
lower.neg <- 0
sigma2 <- (1/c.temp) - (1/(a+c)) + (1/d) - (1/(b+d))
upper.neg <- lr.neg.temp * exp(qnorm(1-(alpha/2))*sqrt(sigma2))
} else if ( c != 0 & d == 0 ) {
d.temp <- (1/2)
spec.temp <- d.temp/(b+d)
sens.temp <- a/(a+c)
lr.neg.temp <- (1 - sens.temp)/spec.temp
sigma2 <- (1/c) - (1/(a+c)) + (1/d.temp) - (1/(b+d))
lower.neg <- lr.neg.temp * exp(-qnorm(1-(alpha/2))*sqrt(sigma2))
upper.neg <- Inf
} else if ( (c == (a+c)) & (d == (b+d)) ) {
c.temp <- c - (1/2)
d.temp <- d - (1/2)
spec.temp <- d.temp/(b+d)
sens.temp <- a/(a+c.temp)
lr.neg.temp <- (1 - sens.temp)/spec.temp
sigma2 <- (1/c.temp) - (1/(a+c)) + (1/d.temp) - (1/(b+d))
lower.neg <- lr.neg.temp * exp(-qnorm(1-(alpha/2))*sqrt(sigma2))
upper.neg <- lr.neg.temp * exp(qnorm(1-(alpha/2))*sqrt(sigma2))
}
list(
lr.pos=lr.pos, lower.pos=lower.pos, upper.pos=upper.pos,
lr.neg=lr.neg, lower.neg=lower.neg, upper.neg=upper.neg
)
}