Como encontrar um intervalo de confiança para o número total de eventos


9

Eu tenho um detector que irá detectar um evento com alguma probabilidade p . Se o detector diz que ocorreu um evento, esse é sempre o caso, portanto, não há falsos positivos. Depois de executá-lo por algum tempo, recebo k eventos detectados. Gostaria de calcular qual foi o número total de eventos ocorridos, detectados ou não, com alguma confiança, em 95%.

Por exemplo, digamos que eu recebo 13 eventos detectados. Eu gostaria de poder calcular que houve entre 13 e 19 eventos com 95% de confiança, com base na p .

Aqui está o que eu tentei até agora:

A probabilidade de detectar k eventos se houver n total é:

binomial(n, k) * p^k * (1 - p)^(n - k)

A soma disso acima de n de k ao infinito é:

1/p

O que significa que a probabilidade de haver n eventos no total é:

f(n) = binomial(n, k) * p^(k + 1) * (1 - p)^(n - k)

Portanto, se eu quiser ter 95% de certeza, devo encontrar a primeira soma parcial f(k) + f(k+1) + f(k+2) ... + f(k+m)que é pelo menos 0,95 e a resposta é [k, k+m]. Essa é a abordagem correta? Também existe uma fórmula fechada para a resposta?

Respostas:


11

Eu escolheria usar a distribuição binomial negativa , que retorna a probabilidade de que haja X falhas antes do k_ésimo sucesso, quando a probabilidade constante de um sucesso for p.

Usando um exemplo

k=17 # number of successes
p=.6 # constant probability of success

a média e o sd para as falhas são dados por

mean.X <- k*(1-p)/p
sd.X <- sqrt(k*(1-p)/p^2) 

A distribuição das falhas X terá aproximadamente esse formato

plot(dnbinom(0:(mean.X + 3 * sd.X),k,p),type='l')

Portanto, o número de falhas será (com 95% de confiança) aproximadamente entre

qnbinom(.025,k,p)
[1] 4

e

qnbinom(.975,k,p)
[1] 21

Então você inerval seria [k + qnbinom (.025, k, p), k + qnbinom (.975, k, p)] (usando os números do exemplo [21,38])


5

Supondo que você queira escolher uma distribuição para n, p (n), você pode aplicar a lei de Bayes.

Você sabe que a probabilidade de ocorrer k eventos, dado que n realmente ocorreu, é governada por uma distribuição binomial

p(k|n)=(nk)pk(1p)(nk)

O que você realmente quer saber é a probabilidade de n eventos realmente ocorrerem, considerando que você observou k. Por Bayes leigos:

p(n|k)=p(k|n)p(n)p(k)

Aplicando o teorema da probabilidade total, podemos escrever:

p(n|k)=p(k|n)p(n)np(k|n)p(n)

p(n)

p(n)np(n)=0n[0,nmax]

p(n)=1nmax

A formulação bayesiana simplifica para:

p(n|k)=p(k|n)np(k|n)

p(n|k)

Dado que essa pergunta migrou do SO, o código de amostra de brinquedo em python está anexado abaixo

import numpy.random

p = 0.8
nmax = 200

def factorial(n):
    if n == 0:
        return 1
    return reduce( lambda a,b : a*b, xrange(1,n+1), 1 )

def ncr(n,r):
    return factorial(n) / (factorial(r) * factorial(n-r))

def binomProbability(n, k, p):
    p1 = ncr(n,k)
    p2 = p**k
    p3 = (1-p)**(n-k)
    return p1*p2*p3

def posterior( n, k, p ):
    def p_k_given_n( n, k ):
        return binomProbability(n, k, p)
    def p_n( n ):
        return 1./nmax
    def p_k( k ):
        return sum( [ p_n(nd)*p_k_given_n(nd,k) for nd in range(k,nmax) ] )
    return (p_k_given_n(n,k) * p_n(n)) / p_k(k)


observed_k   = 80
p_n_given_k  = [ posterior( n, observed_k, p ) for n in range(0,nmax) ]
cp_n_given_k = numpy.cumsum(p_n_given_k)
for n in xrange(0,nmax):
    print n, p_n_given_k[n], cp_n_given_k[n]

3

kpktrue=k/p

ktrue

k1/p

{
gSystem->Load("libPhysics");

const double lvl = 0.95;
TFeldmanCousins f(lvl);

const double p = 0.95;
const double k = 13;
const double k_true = k/p;

const double k_bg = 0;

const double upper = f.CalculateUperLimit(k, k_bg) / p;
const double lower = f.GetLowerLimit() / p;

std::cout << "["
  lower <<"..."<<
  k_true <<"..."<<
  upper <<
  "]" << std::endl;
}

Obrigado, isso parece ótimo. Eu acho que essa é a resposta que eu estava procurando.
Statec 6/08/10

2

p

p


Bem, eu já sei p. Eu também sei a quantidade de eventos detectados: k. Portanto, o total de eventos está em torno de k / p. Gostaria de descobrir um intervalo em torno de k / p para ter 95% de certeza de que o número total de eventos está dentro dele. Isso faz mais sentido?
Statec 5/08/10

Eu acredito que o OP está tentando calcular um intervalo para N na amostragem binomial, onde p é conhecido. Faz sentido tentar fazer isso.
Glen_b -Reinstate Monica
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.