Como mencionó @linog en su comentario, escribir poisson.test
en R imprimirá el código fuente de la función.
La parte relevante es:
⋮
m <- r * T
PVAL <- switch(alternative, less = ppois(x, m), greater = ppois(x -
1, m, lower.tail = FALSE), two.sided = {
if (m == 0) (x == 0) else {
relErr <- 1 + 1e-07
d <- dpois(x, r * T)
if (x == m) 1 else if (x < m) {
N <- ceiling(2 * m - x)
while (dpois(N, m) > d) N <- 2 * N
i <- seq.int(from = ceiling(m), to = N)
y <- sum(dpois(i, m) <= d * relErr)
ppois(x, m) + ppois(N - y, m, lower.tail = FALSE)
} else {
i <- seq.int(from = 0, to = floor(m))
y <- sum(dpois(i, m) <= d * relErr)
ppois(y - 1, m) + ppois(x - 1, m, lower.tail = FALSE)
}
}
})
⋮
Y particularmente en este caso:
N <- ceiling(2 * m - x)
while (dpois(N, m) > d) N <- 2 * N
i <- seq.int(from = ceiling(m), to = N)
y <- sum(dpois(i, m) <= d * relErr)
ppois(x, m) + ppois(N - y, m, lower.tail = FALSE)
con la línea final siendo el valor p que se calcula para el x
, r
y T
valores.
Si X∼Poisson(rT) el valor p para la prueba a dos bandas viene dado por: ∞∑x=0P(X=x)∗IP(X=x)≤P(X=5)
Donde I es la función indicadora.
No es más que la suma de todos los posibles valores observados que son tan probables o menos que el verdadero valor observado, dada la hipótesis nula ( λ=rT ). Esta es la idea básica de una prueba de dos caras: queremos saber la probabilidad de observar cualquier valor tan extremo o más extremo que el que hemos observado (dado el nulo).
La razón del trabajo extra en el código fuente es porque no podemos tomar la suma sobre un número infinito de x tenemos que elegir un límite después del cual las probabilidades se vuelven lo suficientemente pequeñas como para que no importen. El punto de corte depende de x
, r
y T
.
Dirigiéndose a su comentario -
λ (la media y la varianza de la Poisson) es igual a la tasa ( r ) por la exposición ( T ). Así que aquí λ=94.32 .
Para encontrar la probabilidad de dos lados, sumamos todas las probabilidades que son menores que la probabilidad del valor observado. Esto incluye las colas izquierda y derecha del Poisson. La probabilidad de la cola izquierda se puede calcular con ppois(x = 5, lambda = 94.32, lower.tail = TRUE)
.
La cola derecha es un poco más complicada, ya que tenemos que encontrar el punto de la cola derecha en el que los valores se vuelven tan o más extremos (menos probables de observar) que el valor observado.
Lo siguiente funciona para estos valores, aunque necesitará un método más riguroso como el utilizado por poisson.test
para trabajar con diferentes parámetros.
i <- 0:1000
# First value on the right tail that's more extreme than 5
right_tail <- min(which(dpois(i, 94.32) <= dpois(5, 94.32) & i > 5))
p_left <- ppois(5, 94.32)
# Subtract one from right_tail first to go from 0-index to 1-index of i,
# then subtract one more to include the probability of the first value (right_tail)
p_right <- ppois(right_tail - 1 - 1, 94.32, lower.tail = FALSE)
p_val <- p_left + p_right