Como posso (numericamente) aproximar valores de uma distribuição beta com alfa e beta grandes

11

Existe uma maneira numericamente estável de calcular valores de uma distribuição beta para alfa inteiro grande, beta (por exemplo, alfa, beta> 1000000)?

Na verdade, eu só preciso de um intervalo de confiança de 99% no modo, se isso de alguma forma facilitar o problema.

Acrescentar : desculpe, minha pergunta não foi tão clara quanto pensei. O que eu quero fazer é o seguinte: eu tenho uma máquina que inspeciona produtos em uma correia transportadora. Alguma fração desses produtos é rejeitada pela máquina. Agora, se o operador da máquina alterar alguma configuração de inspeção, quero mostrar a ele a taxa estimada de rejeição e algumas dicas sobre a confiabilidade da estimativa atual.

Portanto, pensei em tratar a taxa de rejeição real como uma variável aleatória X e calcular a distribuição de probabilidade para essa variável aleatória com base no número de objetos rejeitados N e objetos aceitos M. Se eu assumir uma distribuição anterior uniforme para X, essa é uma distribuição beta dependendo de N e M. Eu posso exibir essa distribuição diretamente para o usuário ou encontrar um intervalo [l, r] para que a taxa de rejeição real esteja nesse intervalo com p> = 0,99 (usando a terminologia do shabbychef) e exibir isso intervalo. Para M, N pequeno (ou seja, imediatamente após a alteração do parâmetro), posso calcular a distribuição diretamente e aproximar o intervalo [l, r]. Mas para M, N grande, essa abordagem ingênua leva a erros de sub-fluxo, porque x ^ N * (1-x) ^ M é pequeno demais para ser representado como um flutuador de precisão dupla.

Acho que minha melhor aposta é usar minha distribuição beta ingênua para M, N pequeno e mudar para uma distribuição normal com a mesma média e variação assim que M, N exceder algum limite. Isso faz sentido?

nikie
fonte
1
Deseja conhecer a matemática ou simplesmente uma solução de código em R ou algo assim?
John
Eu preciso implementar isso em C #, para que a matemática seja boa. Um exemplo de código também seria bom, se não contar com alguma função interna do R / Matlab / Mathematica que não consiga traduzir para C #.
Nikie 24/08/10
PDF, CDF ou CDF inverso?
JM não é um estatístico
Se você não insiste na versão beta, pode usar a distribuição Kumaraswamy que é muito semelhante e tem uma forma algébrica muito mais simples: en.wikipedia.org/wiki/Kumaraswamy_distribution
Tim

Respostas:

13

Uma aproximação normal funciona extremamente bem, especialmente nas caudas. Use uma média de e uma variação de α βα/(α+β) . Por exemplo, o erro relativo absoluto na probabilidade de cauda em uma situação difícil (em que a distorção pode ser preocupante), comoα=106,β=108atingeumpico em torno de0,00026e é menor que0,00006quando você tem mais de 1 SD da média. (Issonãoocorreporque o beta é tão grande: comα=β=106, os erros relativos absolutos são limitados por0,0000001αβ(α+β)2(1+α+β)α=106,β=1080.000260.00006α=β=1060.0000001.) Portanto, essa aproximação é excelente para qualquer finalidade que envolva intervalos de 99%.

À luz das edições da pergunta, observe que não se computa integrais beta integrando o integrando: é claro que você terá subfluxos (embora eles realmente não importem, porque não contribuem significativamente para a integral) . Existem muitas, muitas maneiras de calcular a integral ou aproximar, conforme documentado em Johnson & Kotz (Distribuições em Estatística). Uma calculadora online pode ser encontrada em http://www.danielsoper.com/statcalc/calc37.aspx . Você realmente precisa do inverso dessa integral. Alguns métodos para calcular o inverso estão documentados no site do Mathematica em http://functions.wolfram.com/GammaBetaErf/InverseBetaRegularized/. O código é fornecido em Receitas numéricas (www.nr.com). Uma calculadora on-line realmente interessante é o site da Wolfram Alpha (www.wolframalpha.com): digite inverse beta regularized (.005, 1000000, 1000001)o ponto final esquerdo e inverse beta regularized (.995, 1000000, 1000001)o ponto final direito ( , intervalo de 99%).α=1000000,β=1000001

whuber
fonte
Perfeito! Eu tinha o livro de NR na minha mesa o tempo todo, mas nunca pensei em olhar lá. Muito obrigado.
Nikie 24/08/10
3

Um experimento gráfico rápido sugere que a distribuição beta se parece muito com uma distribuição normal quando alfa e beta são muito grandes. Ao pesquisar no Google "limite de distribuição beta normal", encontrei http://nrich.maths.org/discus/messages/117730/143065.html?1200700623 , que fornece uma 'prova' de navegação manual.

A página da Wikipédia para a distribuição beta fornece sua média, modo (v próximo à média para alfa e beta grande) e variação, para que você possa usar uma distribuição normal com a mesma média e variação para obter uma aproximação. Se é uma aproximação suficientemente boa para seus propósitos, depende de quais são seus propósitos.

uma parada
fonte
Pergunta estúpida: Como você fez esse experimento gráfico? Tentei plotar a distribuição alfa / beta em torno de 100, mas não consegui ver nada devido a erros de fluxo insuficiente.
Nikie 24/08/10
Você não deseja plotar o integrando: deseja plotar a integral. No entanto, você pode obter o integrando de várias maneiras. Uma é inserir "plot D (beta (x, 1000000, 2000000), x) / beta (1, 1000000, 2000000) de 0,3325 a 0,334" no site da Wolfram Alpha. A integral em si é vista com "Gráfico beta (x, 1000000, 2000000) / beta (1, 1000000, 2000000) de 0,3325 a 0,334".
whuber
Plotei o integrando, ou seja, o pdf da distribuição beta, no Stata - ele possui uma função interna para o pdf. Para alfa e beta grandes, você precisa restringir o intervalo do gráfico para ver se está quase normal. Se eu estivesse programando, eu calcularia seu logaritmo e depois exponenciaria no final. Isso deve ajudar com os problemas de underflow. A função beta no denominador é definida em termos de funções gama, equivalentes a fatoriais para alfa e beta inteiros, e muitos pacotes / bibliotecas incluem lngamma () ou lnfactorial () em vez disso / assim como funções gama () e fatorial ().
onestop
2

[l,r]lr[l,r]α,β lr como números distintos, portanto, essa rota pode ser boa o suficiente.

shabbychef
fonte
Quando alfa e beta não estão muito distantes (ou seja, alfa / beta são delimitados acima e abaixo), o DP de Beta [alfa, beta] é proporcional a 1 / Sqrt (alfa). Por exemplo, para alpha = beta = 10 ^ 6, o SD está muito próximo de 1 / Sqrt (8) / 1000. Acho que não haverá problema com a representação de l e r, mesmo se você estiver usando apenas flutuadores de precisão únicos .
whuber
106
1
Sim, é um número louco para um aplicativo beta. Aliás, essas desigualdades não produzirão bons intervalos, porque são extremos em todas as distribuições (satisfazendo certas restrições).
whuber
@ whuber: Você está certo, eles são números loucos. Com o meu algoritmo ingênuo, os números "sãos" eram fáceis e funcionavam bem, mas não conseguia imaginar como calculá-lo para parâmetros "loucos". Daí a questão.
Nikie 24/08/10
2
OK, você está certo: uma vez que alpha + beta exceda 10 ^ 30 mais ou menos, você terá dificuldades com duplas :-). (Mas se você representa l e r como diferenças da média de alfa / (alfa + beta), você vai ficar bem até alfa ou beta exceder cerca de 10 ^ 303.)
whuber
1

pplog(p/(1p))min(α,β)>100

Por exemplo

f <- function(n, a, b) {
    p <- rbeta(n, a, b)
    lor <- log(p/(1-p))
    ks.test(lor, 'pnorm', mean(lor), sd(lor))$p.value
}
summary(replicate(50, f(10000, 100, 1000000)))

normalmente produz uma saída como

resumo (replicar (50, f (10000, 100, 1000000))) 1st Qu. Mediana Média 3ª Qu. Máx. 0,01205 0,10870 0,18680 0,24810 0,36170 0,68730

isto é, valores p típicos são de cerca de 0,2.

α=100,β=100000

p

f2 <- function(n, a, b) {
    p <- rbeta(n, a, b)
    ks.test(p, 'pnorm', mean(p), sd(p))$p.value
}
summary(replicate(50, f2(10000, 100, 1000000)))

produz algo como

summary(replicate(50, f2(10000, 100, 1000000)))
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
2.462e-05 3.156e-03 7.614e-03 1.780e-02 1.699e-02 2.280e-01 

com valores de p típicos em torno de 0,01

A qqnormfunção R também fornece uma visualização útil, produzindo um gráfico muito direto para a distribuição log-odds indicando normalidade aproximada. A distribuição da variável beta dsitribute produz uma curva distinta indicando não normalidade

α,β

Daniel Mahler
fonte