Come posso (numericamente) approssimare i valori per una distribuzione beta con alpha e beta di grandi dimensioni


11

Esiste un modo numericamente stabile per calcolare i valori di una distribuzione beta per numeri interi grandi alpha, beta (ad esempio alpha, beta> 1000000)?

In realtà, ho solo bisogno di un intervallo di confidenza del 99% attorno alla modalità, se ciò in qualche modo semplifica il problema.

Aggiungi : mi dispiace, la mia domanda non è stata espressa chiaramente come pensavo. Quello che voglio fare è questo: ho una macchina che ispeziona i prodotti su un nastro trasportatore. Una parte di questi prodotti viene rifiutata dalla macchina. Ora, se l'operatore della macchina modifica alcune impostazioni di ispezione, voglio mostrargli la percentuale di scarto stimata e qualche suggerimento su quanto sia affidabile la stima attuale.

Quindi ho pensato di trattare il tasso di rifiuto effettivo come una variabile casuale X e calcolare la distribuzione di probabilità per quella variabile casuale in base al numero di oggetti rifiutati N e oggetti accettati M. Se presumo una distribuzione precedente uniforme per X, questa è una distribuzione beta a seconda di N e M. Posso visualizzare questa distribuzione direttamente all'utente o trovare un intervallo [l, r] in modo che il tasso di rifiuto effettivo sia in questo intervallo con p> = 0,99 (usando la terminologia di shabbychef) e visualizzarlo intervallo. Per piccole M, N (cioè subito dopo la modifica dei parametri), posso calcolare direttamente la distribuzione e approssimare l'intervallo [l, r]. Ma per grandi M, N, questo approccio ingenuo porta a errori di underflow, perché x ^ N * (1-x) ^ M è troppo piccolo per essere rappresentato come un float a doppia precisione.

Immagino che la mia scommessa migliore sia usare la mia ingenua distribuzione beta per la piccola M, N e passare a una distribuzione normale con la stessa media e varianza non appena M, N supera una certa soglia. Ha senso?


1
Vuoi conoscere la matematica o semplicemente una soluzione di codice in R o qualcosa del genere?
Giovanni,

Devo implementarlo in C #, quindi la matematica sarebbe buona. Anche un esempio di codice andrebbe bene, se non si basa su alcune funzioni R / Matlab / Mathematica integrate che non posso tradurre in C #.
nikie,

PDF, CDF o CDF inverso?
JM non è uno statistico il

Se non insisti su Beta, puoi usare la distribuzione di Kumaraswamy che è molto simile e ha una forma algebrica molto più semplice: en.wikipedia.org/wiki/Kumaraswamy_distribution
Tim

Risposte:


13

Un'approssimazione normale funziona estremamente bene, specialmente nelle code. Usa una media di e una varianza di . Ad esempio, l'errore relativo assoluto nella probabilità di coda in una situazione difficile (in cui l'asimmetria potrebbe essere fonte di preoccupazione) come picco di circa ed è inferiore a quando si è più di 1 SD dalla media. (Questo non perché la beta è così grande: con , gli errori relativi assoluti sono limitati daα/(α+β)αβ(α+β)2(1+α+β)α=106,β=1080.000260.00006α=β=1060.0000001.) Pertanto, questa approssimazione è eccellente per qualsiasi scopo che coinvolga intervalli del 99%.

Alla luce delle modifiche alla domanda, si noti che non si calcolano gli integrali beta integrando effettivamente l'integrando: ovviamente otterrai underflow (anche se non contano davvero, perché non contribuiscono in modo apprezzabile all'integrale) . Esistono molti, molti modi per calcolare l'integrale o approssimarlo, come documentato in Johnson & Kotz (Distribuzioni in statistica). Un calcolatore online è disponibile all'indirizzo http://www.danielsoper.com/statcalc/calc37.aspx . In realtà hai bisogno del contrario di questo integrale. Alcuni metodi per calcolare l'inverso sono documentati sul sito Mathematica all'indirizzo http://functions.wolfram.com/GammaBetaErf/InverseBetaRegularized/. Il codice è fornito in Ricette numeriche (www.nr.com). Un calcolatore online davvero piacevole è il sito Wolfram Alpha (www.wolframalpha.com): inserire inverse beta regularized (.005, 1000000, 1000001)per l'endpoint sinistro e inverse beta regularized (.995, 1000000, 1000001)per l'endpoint destro ( , intervallo del 99%).α=1000000,β=1000001


Perfetto! Avevo sempre il libro NR sulla mia scrivania, ma non avrei mai pensato di guardarlo. Molte grazie.
nikie,

3

Un rapido esperimento grafico suggerisce che la distribuzione beta assomiglia molto a una distribuzione normale quando alfa e beta sono entrambe molto grandi. Cercando su "limite di distribuzione beta normale" ho trovato http://nrich.maths.org/discus/messages/117730/143065.html?1200700623 , che fornisce una "prova" per il lavaggio a mano.

La pagina di Wikipedia per la distribuzione beta fornisce media, modalità (v vicino alla media per alpha e beta di grandi dimensioni) e varianza, in modo da poter utilizzare una distribuzione normale con la stessa media e varianza per ottenere un'approssimazione. Se è un'approssimazione abbastanza buona per i tuoi scopi dipende da quali sono i tuoi scopi.


Domanda stupida: come hai fatto quell'esperimento grafico? Ho provato a tracciare la distribuzione per alpha / beta intorno a 100, ma non sono riuscito a vedere nulla a causa di errori di underflow.
nikie,

Non vuoi tracciare l'integrando: vuoi tracciare l'integrale. Tuttavia, è possibile ottenere l'integrando in molti modi. Uno è quello di inserire "grafico D (beta (x, 1000000, 2000000), x) / beta (1, 1000000, 2000000) da 0,3325 a 0,334" nel sito di Wolfram Alpha. L'integrale stesso è visto con "Plot beta (x, 1000000, 2000000) / beta (1, 1000000, 2000000) da 0,3325 a 0,334".
whuber

Ho tracciato l'integrando, cioè il pdf della distribuzione beta, in Stata - ha una funzione integrata per il pdf. Per alpha e beta di grandi dimensioni è necessario limitare l'intervallo della trama per vedere che è vicino alla normalità. Se lo stessi programmando da solo calcolerei il suo logaritmo e alla fine esponenzierei. Ciò dovrebbe aiutare con i problemi di underflow. La funzione beta nel denominatore è definita in termini di funzioni gamma, equivalenti a fattoriali per numeri interi alpha e beta, e molti pacchetti / librerie includono lngamma () o lnfactorial () invece / così come le funzioni gamma () e factorial ().
Onestop,

2

Ho intenzione di dedurre che si desidera un intervallo in modo tale che la probabilità che un pareggio caso dalla Beta RV è nell'intervallo con probabilità 0.99, con punti di bonus per e essendo simmetrica intorno alla modalità. Con la disuguaglianza di Gauss o la disuguaglianza di Vysochanskii-Petunin, puoi costruire intervalli che contengono l'intervallo e sarebbero approssimazioni abbastanza decenti. Per sufficientemente grandi , avrai problemi numerici di underflow anche nel rappresentare e come numeri distinti, quindi questa rotta potrebbe essere abbastanza buona.[l,r]lr[l,r]α,β lr


Quando alpha e beta non sono troppo distanti (ovvero alpha / beta sono limitati sopra e sotto), la SD di Beta [alpha, beta] è proporzionale a 1 / Sqrt (alpha). Ad esempio, per alpha = beta = 10 ^ 6, la SD è molto vicina a 1 / Sqrt (8) / 1000. Penso che non ci saranno problemi con la rappresentazione di l anche se stai usando solo float di precisione singola .
whuber

vale a dire che non è 'sufficientemente grande';)106
shabbychef

1
Sì, è un numero folle per un'applicazione beta. A proposito, queste disuguaglianze non produrranno affatto buoni intervalli, perché sono estreme su tutte le distribuzioni (soddisfacendo determinati vincoli).
whuber

@whuber: hai ragione, sono numeri pazzi. Con il mio ingenuo algoritmo, i numeri "sani" erano facili e funzionavano bene, ma non riuscivo a immaginare come calcolarlo per parametri "folli". Da qui la domanda.
nikie,

2
OK, hai ragione: una volta che alpha + beta supera i 10 ^ 30 o giù di lì, avrai difficoltà con i doppi :-). (Ma se rappresenti le differenze tra la media di alpha / (alpha + beta), starai bene fino a quando alpha o beta supereranno circa 10 ^ 303.)
whuber

1

Se è una variabile distribuita beta, allora sono le probabilità di log di (cioè: che è distribuita approssimativamente normalmente. Ciò vale anche per le distribuzioni beta altamente distorte lungo quantop l o g ( p / ( 1 - p ) ) m i n ( α , β ) > 100pplog(p/(1p))min(α,β)>100

Per esempio

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)))

in genere produce un output simile

riepilogo (replicare (50, f (10000, 100, 1000000))) Min. 1 ° Qu. Media mediana 3a Qu. Max. 0,01205 0,10870 0,18680 0,24810 0,36170 0,68730

vale a dire i valori p tipici sono circa 0,2.

Quindi, anche con 10000 campioni, il test di Kolmogorov-Smirnov non ha il potere di distinguere la trasformazione del rapporto delle probabilità di log di una variabile distribuita beta altamente distorta con .α=100,β=100000

Tuttavia, un test simile sulla distribuzione di stessop

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)))

produce qualcosa di simile

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 

con valori p tipici intorno a 0,01

La qqnormfunzione R fornisce anche una visualizzazione utile, producendo un grafico dall'aspetto molto lineare per la distribuzione delle probabilità del log che indica la normalità approssimativa, mentre la distribuzione della variabile beta dsitribute produce una curva distintiva che indica la non normalità

Pertanto è ragionevole usare un'approssimazione gaussiana nello spazio delle probabilità del log anche per valori fortemente distorti purché entrambi siano superiori a 100.α,β

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.