Distribuzione delle probabilità per diverse probabilità


36

Se volessi ottenere la probabilità di 9 successi in 16 prove con ogni prova con una probabilità di 0,6, potrei usare una distribuzione binomiale. Cosa potrei usare se ognuna delle 16 prove avesse una diversa probabilità di successo?


1
@whuber Nella tua spiegazione dell'approssimazione normale, i calcoli della media e della deviazione standard sono diversi con la descrizione in Wikipedia. In Wiki, la media è np e la deviazione standard è np (1-p). Quindi, in questo problema, per l'approssimazione normale della varia probabilità di successo nella distribuzione binomiale, la media è p1 + p2 + p3 + p4 + p5 + ... + pi, e la varianza è p1 (1-p1) + p2 ( 1-p2) + ... + pi greco (1-pi). Ho ragione?
David

1
Vedi Wikipedia sulla distribuzione binomiale di Poisson . Anche un termine di ricerca che mostra alcuni risultati qui.
Glen_b

@ David Quando tutto il pi sono uguali ad un valore comune p , allora p1+p2++pn=np e p1(1p1)++pn(1pn)=np(1p) , che mostra che la descrizione di Wikipedia a cui ti riferisci è solo un caso speciale.
whuber


Risposte:


22

Questa è la somma di 16 prove binomiali (presumibilmente indipendenti). L'assunzione di indipendenza ci consente di moltiplicare le probabilità. Quindi, dopo due prove con probabilità p1 e p2 di successo la possibilità di successo in entrambe le prove è p1p2 , la possibilità di non avere successo è (1p1)(1p2) e la possibilità di un successo è p1(1p2)+(1p1)p2 . Quest'ultima espressione deve la sua validità al fatto che i due modi per ottenere esattamente un successo si escludono a vicenda: al massimo uno di essi può effettivamente accadere. Ciò significa cheaggiungono leloro probabilità.

Per mezzo di queste due regole - si moltiplicano le probabilità indipendenti e si aggiungono quelle reciprocamente esclusive - è possibile elaborare le risposte per, diciamo, 16 prove con probabilità . Per fare ciò, è necessario tenere conto di tutti i modi per ottenere ogni dato numero di successi (come 9). Ci sono modi per ottenere 9 successi. Uno di questi, ad esempio, si verifica quando le prove 1, 2, 4, 5, 6, 11, 12, 14 e 15 sono successi e gli altri sono fallimenti. I successi avevano probabilità e e i fallimenti avevano probabilitàp1,,p16p1,p2,p4,p5,p6,p11,p12,p14,p151-p3,1-p7,,1-p13,1-p16(169)=11440p1,p2,p4,p5,p6,p11,p12,p14,p151p3,1p7,,1p13,1p16. Moltiplicare questi 16 numeri dà la possibilità di questa particolare sequenza di risultati. Sommando questo numero insieme ai rimanenti 11.439 tali numeri danno la risposta.

Ovviamente useresti un computer.

Con molte più di 16 prove, è necessario approssimare la distribuzione. A condizione che nessuna delle probabilità e diventi troppo piccola, un'approssimazione normale tende a funzionare bene. Con questo metodo noti che l'aspettativa della somma di prove è e (poiché le prove sono indipendenti) la varianza è . Quindi fai finta che la distribuzione delle somme sia normale con media e deviazione standard . Le risposte tendono ad essere buone per calcolare le probabilità corrispondenti a una proporzione di successi che differisce da 1 - p i n μ = p 1 + p 2 + + p n σ 2 = p 1 ( 1 - p 1 ) + p 2 ( 1 - p 2 )pi1pinμ=p1+p2++pnμ σ μ σ n σ μσ2=p1(1p1)+p2(1p2)++pn(1pn)μσμ per non più di qualche multiplo di . Man mano che cresce, questa approssimazione diventa sempre più accurata e funziona per multipli ancora più grandi di lontano da .σnσμ


9
Gli scienziati informatici chiamano queste "prove di Poisson" per distinguerle dalle prove di Bernoulli. Oltre alle approssimazioni del Teorema del limite centrale, ci sono anche buoni limiti di coda disponibili. Eccone uno. Le ricerche di Google su "Limiti di Chernoff per le prove di Poisson" mostreranno i risultati che potresti trovare in un tipico trattamento CS.
cardinale il

@Cardinal Quella nomenclatura è interessante. Sarebbe valido per molto piccolo , ma per il resto sembra fuorviante, perché altrimenti la distribuzione non è ben approssimata dalle distribuzioni di Poisson. (C'è un'altra discussione sul CV su questa domanda, in cui "16" è sostituito da 10.000 e esaminiamo le probabilità di coda, ma non sono stato in grado di trovarlo di nuovo.)pi
whuber

1
si, sono d'accordo sul nome. L'ho trovato un po 'strano quando l'ho incontrato per la prima volta. L'ho dato qui più come un termine utile per la ricerca. Sembra che gli informatici considerino queste probabilità spesso nel trattare determinati algoritmi. Sarei interessato a leggere quell'altra domanda se ti capita di trovarla. È forse questo ?
cardinale il

2
@cardinal ha ragione che noi "gente del CS" li chiamiamo prove di Poisson. in questo caso, infatti, un limite standard di Chernoff-Hoeffding ti darà esattamente il limite richiesto dall'OP.
Suresh Venkatasubramanian,

1
Secondo il commento di @David di ieri, c'è qualcosa di sbagliato nella tua affermazione della media approssimativa normale come Stiamo sommando 16 camper di Bernoulli, ognuno dei quali può avere valore 0 o 1, quindi la somma avrà dominio di supporto da 0 a 16, non tra 0 e 1. Vale la pena controllare anche il tuo SD.
μ=(p1+p2++pn)/n
lupi il

12

Un'alternativa alla normale approssimazione di @ whuber è usare le probabilità di "miscelazione", o un modello gerarchico. Questo si applicherebbe quando i sono simili in qualche modo, e puoi modellarlo mediante una distribuzione di probabilità con una funzione di densità di indicizzata da alcuni parametri . ottieni un'equazione integrale:p iD i s t ( θ ) g ( p | θ ) θpipiDist(θ)g(p|θ)θ

Pr(s=9|n=16,θ)=(169)01p9(1p)7g(p|θ)dp

La probabilità binomiale deriva dall'impostazione , l'approssimazione normale deriva dall'impostazione (penso) (con e come definito nella risposta di @ whuber) e poi notando il " code "di questo PDF scendono nettamente attorno al picco.g ( p | θ ) = g ( p | μ , σ ) = 1g(p|θ)=δ(pθ)μσg(p|θ)=g(p|μ,σ)=1σϕ(pμσ)μσ

Potresti anche usare una distribuzione beta, che porterebbe a una semplice forma analitica e che non ha bisogno di soffrire del problema "piccola p" che l'approssimazione normale fa, poiché la beta è abbastanza flessibile. Usando una distribuzione con impostata dalle soluzioni alle seguenti equazioni (si tratta delle stime "mimimum KL divergence"):α , βbeta(α,β)α,β

ψ(β)-ψ(α+β)=1

ψ(α)ψ(α+β)=1ni=1nlog[pi]
ψ(β)ψ(α+β)=1ni=1nlog[1pi]

Dove È la funzione digamma - strettamente correlata alle serie armoniche.ψ(.)

Otteniamo la distribuzione composta "beta-binomiale":

(169)1B(α,β)01p9+α1(1p)7+β1dp=(169)B(α+9,β+7)B(α,β)

Questo converge distribuzione verso una distribuzione normale nel caso in cui i punti @whuber fuori - ma dovrebbe dare risposte ragionevoli per le piccole e distorta - ma non per multimodale , come distribuzione beta ha un solo picco. Ma puoi facilmente risolverlo, semplicemente usando le distribuzioni beta per le modalitàSuddividi l'integrale da in pezzi in modo che ogni pezzo abbia una modalità univoca (e dati sufficienti per stimare i parametri) e adatti una distribuzione beta all'interno di ciascun pezzo. quindi sommare i risultati, osservando che apportando la modifica delle variabili perp i p i M M 0 < p < 1 M p = x - LnpipiMM0<p<1M L<x<Up=xLULL<x<U l'integrale beta si trasforma in:

B(α,β)=LU(xL)α1(Ux)β1(UL)α+β1dx

+1 Questa risposta contiene alcuni suggerimenti interessanti e intelligenti. L'ultimo sembra particolarmente flessibile e potente.
whuber

Giusto per prendere qualcosa di molto semplice e concreto, supponiamo (i) e (ii) , per a 16. Quale sarebbe la soluzione a le tue stime e , e quindi le tue stime per dato , secondo il problema del PO? pi=pi=i17i=1αβP(X=9)n=16pi=i/17i=1αβP(X=9)n=16
lupi il

Ottima risposta e proposta, in particolare la beta! Sarebbe bello vedere questa risposta scritta nella sua forma generale con e . sns
pglpm il

8

Lascia che ~ con funzione generatrice di probabilità (pgf): B e r n o u l l i ( p i )XiBernoulli(pi)

pgf=E[tXi]=1pi(1t)

Sia denota la somma di tali variabili casuali indipendenti. Quindi, il pgf per la somma di tali variabili è: n S n = 16S=i=1nXinSn=16

pgfS=E[tS]=E[tX1]E[tX2]E[tX16] (... by independence)=i=116(1pi(1t))

Cerchiamo , che è:P(S=9)

19!d9pgfSdt9|t=0

TUTTO FATTO. Questo produce l'esatta soluzione simbolica in funzione di . La risposta è piuttosto lunga da stampare sullo schermo, ma è interamente tracciabile e richiede meno di di secondo per valutare l'utilizzo di Mathematica sul mio computer.pi1100

Esempi

Se , quindi: pi=i17,i=1 to 16P(S=9)=964794185433480818448661191875666868481=0.198268

Se , quindi: pi=i17,i=1 to 16P(S=9)=0.000228613

Più di 16 prove?

Con più di 16 prove, non è necessario approssimare la distribuzione. Il metodo esatto sopra funziona altrettanto facilmente per esempi con dire o . Ad esempio, quando , ci vuole meno di al secondo per valutare l'intero pmf ( cioè ad ogni valore ) usando il codice qui sotto.n=50n=100n=50110s=0,1,,50

Codice Mathematica

Dato un vettore di valori , dire:pi

n = 16;   pvals = Table[Subscript[p, i] -> i/(n+1), {i, n}];

... ecco un po 'di codice Mathematica per fare tutto il necessario:

pgfS = Expand[ Product[1-(1-t)Subscript[p,i], {i, n}] /. pvals];
D[pgfS, {t, 9}]/9! /. t -> 0  // N

0.198268

Per derivare l'intero pmf:

Table[D[pgfS, {t,s}]/s! /. t -> 0 // N, {s, 0, n}]

... o usa il più uniforme e più veloce (grazie a un suggerimento di Ray Koopman di seguito):

CoefficientList[pgfS, t] // N

Per un esempio con , ci vuole solo 1 secondo per calcolare , e poi 0,002 secondi per ricavare l'intero pmf usando , quindi è estremamente efficiente.n=1000pgfSCoefficientList


1
Può essere ancora più semplice. With[{p = Range@16/17}, N@Coefficient[Times@@(1-p+p*t),t,9]]dà la probabilità di 9 successi e With[{p = Range@16/17}, N@CoefficientList[Times@@(1-p+p*t),t]]dà la probabilità di 0, ..., 16 successi.
Ray Koopman,

@RayKoopman È fantastico. Il valore Tablefor- è intenzionale per consentire forme più generali non adatte a . Il tuo uso di è molto bello! Ho aggiunto un al codice sopra che accelera enormemente l'approccio diretto. Anche così, è anche più veloce di un . Non fa molta differenza per sotto i 50 (entrambi gli approcci richiedono solo una piccola frazione di secondo in entrambi i modi per generare l'intero pmf), ma sarà anche un vero vantaggio pratico quando n è davvero grande. pRangeCoefficientListExpandCoefficientListParallelTablenCoefficientList
Lupi,

5

Il commento di @wolfies e il mio tentativo di risposta ha rivelato un problema importante con l'altra mia risposta, di cui parlerò più avanti.

Caso specifico (n = 16)

Esiste un modo abbastanza efficiente di codificare l'intera distribuzione usando il "trucco" di usare numeri di base 2 (binari) nel calcolo. Richiede solo 4 righe di codice R per ottenere la distribuzione completa di dove . Fondamentalmente, ci sono un totale di scelte del vettore che le variabili binarie potrebbero prendere. Supponiamo ora di numerare ogni scelta distinta da a . Questo da solo non è niente di speciale, ma ora supponiamo che rappresentiamo il "numero di scelta" usando l'aritmetica di base 2. Ora prendi modo da poter annotare tutte le scelte in modo che ci siano P r ( Z i =Y=i=1nZiPr(Zi=1)=pi2nz=(z1,,zn)Zi12nn=323=8scelte. Quindi in "numeri ordinari" diventano in "numeri binari". Supponiamo ora di scrivere questi come numeri di quattro cifre, quindi abbiamo . Ora guarda le ultime cifre di ogni numero - può essere considerato come , ecc. Il conteggio in forma binaria fornisce un modo efficiente per organizzare la somma . Fortunatamente, c'è una funzione R che può fare questa conversione binaria per noi, chiamata e convertiamo la forma binaria grezza in un numero via , quindi otterremo un vettore con1,2,3,4,5,6,7,81,10,11,100,101,110,111,10000001,0010,0011,0100,0101,0110,0111,10003001(Z1=0,Z2=0,Z3=1)Y=1intToBits(x)as.numeric(intToBits(x))32elementi, ogni elemento è la cifra della versione base 2 del nostro numero (letto da destra a sinistra, non da sinistra a destra). Usando questo trucco combinato con alcune altre vettorializzazioni R, possiamo calcolare la probabilità che in 4 righe di codice R:y=9

exact_calc <- function(y,p){
    n       <- length(p)
    z       <- t(matrix(as.numeric(intToBits(1:2^n)),ncol=2^n))[,1:n] #don't need columns n+1,...,32 as these are always 0
    pz      <- z%*%log(p/(1-p))+sum(log(1-p))
    ydist   <- rowsum(exp(pz),rowSums(z))
    return(ydist[y+1])
}

Collegare il case uniforme e il case root sqrt fornisce una distribuzione completa per te come:pi(1)=i17pi(2)=i17

yPr(Y=y|pi=i17)Pr(Y=y|pi=i17)00.00000.055810.00000.178420.00030.265230.00260.243040.01390.153650.04910.071060.11810.024870.19830.006780.23530.001490.19830.0002100.11810.0000110.04910.0000120.01390.0000130.00260.0000140.00030.0000150.00000.0000160.00000.0000

Quindi, per il problema specifico di successi in prove, i calcoli esatti sono diretti. Questo funziona anche per un numero di probabilità fino a circa - oltre a ciò è probabile che inizi a incorrere in problemi di memoria e sono necessari diversi trucchi di elaborazione.y16n=20

Si noti che applicando la mia "distribuzione beta" suggerita otteniamo stime dei parametri di e questo fornisce una stima della probabilità che è quasi uniforme in , fornendo un valore approssimativo di . Questo sembra strano dato che una densità di una distribuzione beta con avvicina molto all'istogramma dei valori . Che cosa è andato storto?α=β=1.3206ypr(y=9)=0.06799117α=β=1.3206pi

Caso generale

Discuterò ora il caso più generale e perché la mia semplice approssimazione beta non è riuscita. Fondamentalmente, scrivendo e quindi mescolando con un'altra distribuzione sta effettivamente assumendo un presupposto importante: possiamo approssimare la probabilità effettiva con un'unica probabilità binomiale - l'unico problema che rimane è quale valore di usare. Un modo per vedere questo è usare la densità di miscelazione che è uniforme discreta rispetto all'effettiva . Quindi sostituiamo la distribuzione beta con una densità discreta di(y|n,p)Binom(n,p)ppf(θ)ppipBeta(a,b)pi=116wiδ(ppi). Quindi usando l'approssimazione di miscelazione si può esprimere in parole come scegliere un valore con probabilità , e supporre che tutte le prove di bernoulli abbiano questa probabilitàpiwi . Chiaramente, affinché una simile approssimazione funzioni bene, la maggior parte dei valori di dovrebbe essere simile tra loro. Ciò significa sostanzialmente che per @wolfies la distribuzione uniforme dei valori, traduce in una approssimazione terribilmente negativa quando si utilizza la distribuzione di missaggio beta. Questo spiega anche perché l'approssimazione è molto migliore per - sono meno distribuiti.pipi=i17pi=i17

Il mixaggio utilizza quindi il osservato per fare una media su tutte le possibili scelte di un singolo . Ora, poiché il "mixaggio" è come una media ponderata, non può certo fare di meglio che usare il singolo migliore . Quindi se i sono sufficientemente distribuiti, non può esserci un singolo grado di fornire una buona approssimazione a tutti i .pi pppippi

Una cosa che ho detto nella mia altra risposta è che potrebbe essere meglio usare una miscela di distribuzioni beta su un intervallo limitato - ma questo non è ancora d' aiuto, perché si sta ancora mescolando su una singola . Ciò che ha più senso è dividere l'intervallo in pezzi e avere un binomio all'interno di ciascun pezzo. Ad esempio, potremmo scegliere come divisioni e nove binomi all'interno di ogni intervallo di probabilità. Fondamentalmente, all'interno di ogni divisione, si adatterebbe una semplice approssimazione, come l'uso di un binomio con probabilità uguale alla media dip(0,1)(0,0.1,0.2,,0.9,1)0.1piin quell'intervallo. Se rendiamo gli intervalli abbastanza piccoli, l'approssimazione diventa arbitrariamente buona. Ma nota che tutto ciò che ci resta è lasciarci a che fare con una somma di prove binomiali indipendenti con diverse probabilità, invece di prove di Bernoulli . Tuttavia, la parte precedente a questa risposta ha mostrato che possiamo fare i calcoli esatti a condizione che il numero di binomi sia sufficientemente piccolo, diciamo 10-15 o giù di lì.

Per estendere la risposta basata su bernoulli a una risposta basata su binomio, "reinterpretiamo" semplicemente quali sono le variabili . Abbiamo semplicemente stato che - questo riduce a quello originale a base di Bernoulli ma ora dice che binomi i successi sono provenienti da. Quindi il caso ora significa che tutti i "successi" provengono dal terzo binomio e nessuno dai primi due.ZiZi=I(Xi>0)Zi(Z1=0,Z2=0,Z3=1)

Nota che questo è ancora "esponenziale" in quanto il numero di calcoli è qualcosa come dove è il numero di binomi, e è la dimensione del gruppo - quindi hai dove . Ma questo è meglio del che avresti a che fare usando variabili casuali bernoulli. Ad esempio, supponiamo di dividere le probabilità in gruppi con probabilità in ciascun gruppo. Questo dà calcoli, rispetto akggkYj=1gXjXjBin(k,pj)2gkn=16g=4k=444=256216=65536

Scegliendo gruppi e notando che il limite era di circa che è di circa celle, possiamo effettivamente utilizzare questo metodo per aumentare il massimo a .g=10n=20107nn=50

Se facciamo un'approssimazione più grossolana, abbassando , aumenteremo la dimensione "fattibile" per . significa che puoi avere una effettiva di circa . Oltre a ciò l'approssimazione normale dovrebbe essere estremamente accurata.n g = 5 n 125gng=5n125


@momo - Penso che sia ok, dato che le mie risposte sono due modi diversi di affrontare il problema. Questa risposta non è una versione modificata della mia prima - è solo una risposta diversa
Probislogic

1
Per una soluzione Restremamente efficiente e che gestisce valori molto molto più grandi di , consultare stats.stackexchange.com/a/41263 . Ad esempio, ha risolto questo problema per , fornendo la distribuzione completa, in meno di tre secondi. (Una soluzione Mathematica 9 comparabile - vedi la risposta di @wolfies - funziona bene anche con più piccoli ma non è in grado di completare l'esecuzione con un valore così grande di .)n = 10 4 n nnn=104nn
whuber

5

Il pmf (in generale intrattabile) è Codice R:

Pr(S=k)=A{1,,n}|A|=k(iApi)(j{1,,n}A(1pj)).
p <- seq(1, 16) / 17
cat(p, "\n")
n <- length(p)
k <- 9
S <- seq(1, n)
A <- combn(S, k)
pr <- 0
for (i in 1:choose(n, k)) {
    pr <- pr + exp(sum(log(p[A[,i]])) + sum(log(1 - p[setdiff(S, A[,i])])))
}
cat("Pr(S = ", k, ") = ", pr, "\n", sep = "")

Per la usata nella risposta dei lupi, abbiamo:pi

Pr(S = 9) = 0.1982677

Quando cresce, usa una convoluzione .n


1
Farlo con il codice R è stato davvero utile. Alcuni di noi sono pensatori più concreti e aiuta molto ad avere una versione operativa della funzione generatrice.
DWin

@DWin Fornisco un Rcodice efficiente nella soluzione allo stesso problema (con valori diversi di ) su stats.stackexchange.com/a/41263 . Il problema qui è risolto in 0,00012 secondi di tempo totale di calcolo (stimato risolvendolo 1000 volte) rispetto a 0,53 secondi (stimato risolvendolo una volta) per questo codice e 0,00058 secondi usando il codice Mathematica di Wolfies (stimato risolvendolo 1000 volte). piR
whuber

Quindi seguirà una distribuzione binomiale di Poisson. P(S=k)
fccoelho,

+1 Post molto utile nel mio tentativo di rispondere a questa domanda . Mi chiedevo se usare i log fosse più una formulazione matematica interessante che un'esigenza reale. Non sono troppo preoccupato per i tempi di corsa ...
Antoni Parellada,
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.