Perché questa distribuzione è uniforme?


12

Stiamo studiando i test statistici bayesiani e ci imbattiamo in uno strano fenomeno (per me almeno).

Considera il seguente caso: siamo interessati a misurare quale popolazione, A o B, ha un tasso di conversione più elevato. Per un controllo di , , ovvero la probabilità di conversione è uguale in entrambi i gruppi. dati artificiali utilizzando un modello binomiale, ad esempiopA=pB

nABinomial(N,pA)

Proviamo quindi a stimare utilizzando un modello beta-binomiale bayesiano in modo da ottenere elementi posteriori per ciascun tasso di conversione, ad esempiopA,pB

PABeta(1+nA,NnA+1)

La nostra statistica test è calcolata calcolando via monte carlo.S=P(PA>PB|N,nA,nB)

Ciò che mi ha sorpreso è che se , allora . Il mio pensiero era che sarebbe stato centrato attorno a 0,5 e anche convergere a 0,5 man mano che la dimensione del campione, , cresce. pA=pBSUniform(0,1)N

La mia domanda è: perché quando ?p A = p BSUniform(0,1)pA=pB


Ecco un po 'di codice Python per dimostrare:

%pylab
from scipy.stats import beta
import numpy as np
import pylab as P

a = b = 0.5
N = 10000
samples = [] #collects the values of S
for i in range(5000):
    assert a==b
    A = np.random.binomial(N, a); B = np.random.binomial(N, b)
    S = (beta.rvs(A+1, N-A+1, size=15000) > beta.rvs(B+1, N-B+1, size=15000)).mean() 
    samples.append(S)

P.hist(samples)
P.show()

Nota che non può essere esattamente uniforme, perché è una variabile discreta. Stai quindi chiedendo del comportamento asintotico. Inoltre, per piccolo (meno di , approssimativamente, con ) la distribuzione non è nemmeno lontanamente vicina all'uniforme. N 100 / min ( p , 1 - p )SN100/min(p,1p)p=pA=pB
whuber

@whuber S non è discreto, è una probabilità che può cadere tra 0 e 1. Inoltre, anche per N basso, sto osservando un comportamento uniforme.
Cam.Davidson.Pilon

2
Allora devo fraintendere la tua installazione. Per quanto ne so, per ogni dato valore di il valore di è un numero. Pertanto, accettando che e siano per il momento (come nel tuo codice), è una funzione di . Ma quest'ultimo, essendo realizzazioni di due distribuzioni binomiali, può raggiungere solo un insieme discreto di valori. Quando ho riprodotto il codice in , ottengo istogrammi decisamente non uniforme per piccole . N,nA,nB,SN,pA,pBS(nA,nB)RN
whuber

1
Sebbene in effetti la tua abbia valori compresi tra e , non confonderla con non discreti: può avere al massimo valori distinti (e in realtà ha meno di quello). Questo potrebbe non essere perfettamente chiaro perché la simulazione genera stime di anziché i suoi valori corretti e le stime hanno essenzialmente una distribuzione continua. S01N2S
whuber

1
@whuber sì, hai ragione, osservazione eccellente. Sono ancora bloccato sul perché appaia uniforme allora.
Cam.Davidson.Pilon

Risposte:


11

TL; DR: le miscele di distribuzioni normali possono apparire uniformi quando le dimensioni dei contenitori sono grandi.

Questa risposta prende in prestito dal codice di esempio di @ whuber (che inizialmente pensavo fosse un errore, ma a posteriori era probabilmente un suggerimento).

Le proporzioni sottostanti alla popolazione sono uguali: a = b = 0.5.
Ogni gruppo, A e B, dispone di 10000 membri: N = 10000.
Ci accingiamo a condurre 5000 repliche di una simulazione: for i in range(5000):.

In realtà, quello che stiamo facendo è una di una . In ciascuna delle 5000 iterazioni faremo . s i m u l a t i o n u n d e r l y i n g s i m u l a t i o n p r i m e s i m u l a t i o n usimulationprimesimulationunderlyingsimulationprimesimulationunderlying

In ogni iterazione sarà simulato un numero casuale di A e B che sono 'successi' (AKA convertito) date le proporzioni uguali sottostanti definite in precedenza: . Nominalmente questo produrrà A = 5000 e B = 5000, ma A e B variano da corsa sim a corsa sim e sono distribuiti tra le 5000 corse di simulazione in modo indipendente e (approssimativamente) normalmente (torneremo su quello).simulationprimeA = np.random.binomial(N, a); B = np.random.binomial(N, b)

Passiamo ora a per una singola iterazione di in cui A e B hanno riscontrato un numero uguale di successi (come sarà la media nel caso). In ogni iterazione di , dati A e B, creeremo variate casuali della distribuzione beta per ciascun gruppo. Quindi li confronteremo e scopriremo se , ottenendo un valore VERO o FALSO (1 o 0). Alla fine di una serie di , abbiamo completato 15000 iterazioni e 15000 valori VERO / FALSO. La media di questi produrrà un singolo valore dalla distribuzione (approssimativamente normale) di campionamento della proporzione di s i m u l a t i o n p r i m e s i m u l a t i o n u n d e r l y i n g B e t a A >simulationunderlyingsimulationprimesimulationunderlying simulatio n u n d e r l y i n g B e t a A > B e t a BBetaA>BetaBsimulationunderlyingBetaA>BetaB .

Tranne ora selezionerà 5000 valori A e B. A e B raramente saranno esattamente uguali, ma le differenze tipiche nel numero di successi A e B sono sminuite dalla dimensione del campione totale di A e B. As e Bs tipici produrranno più tiri dalla loro distribuzione campionaria di proporzioni di , ma verranno tirati anche quelli ai bordi della distribuzione A / B.B e t a A > B e t a BsimulationprimeBetaA>BetaB

Quindi, ciò che in sostanza superiamo molte sim run è una combinazione di distribuzioni campionarie di per combinazioni di A e B (con più pull dalle distribuzioni campionarie fatte dai valori comuni di A e B rispetto ai valori non comuni di A e B). Ciò si traduce in miscele di distribuzioni di tipo normale. Quando li combini su una piccola dimensione del cestino (come impostazione predefinita per la funzione dell'istogramma che hai usato ed è stata specificata direttamente nel tuo codice originale), finisci con qualcosa che sembra una distribuzione uniforme.BetaA>BetaB

Ritenere:

a = b = 0.5
N = 10
samples = [] #collects the values of S
for i in range(5000):
    assert a==b
    A = np.random.binomial(N, a); B = np.random.binomial(N, b)
    S = (beta.rvs(A+1, N-A+1, size=15000) > beta.rvs(B+1, N-B+1, size=15000)).mean() 
    samples.append(S)

P.hist(samples,1000)
P.show()

1
Quindi c'è una differenza tra il mio e il tuo codice. Campione A e B in ciascun loop, lo campionate una volta e calcolate S 5000 volte.
Cam.Davidson.Pilon

1
La discrepanza sta nelle tue chiamate a rbinom, che restituisce un vettore. La chiamata successiva rbetaall'interno replicateè vettorializzato, in modo che il ciclo interno (interno) utilizza un diverso e per ciascuna delle 15000 variabili casuali generati (avvolgono per la finale 5000 dal proprio ). Vedi di più. Ciò differisce dal codice di @ Cam con ha una singola e fisse utilizzate in tutte le 15000 chiamate a variazione casuale per ciascuno dei 5000 loop di campionamento ( ). B A BABNSIM = 10000?rbetaABreplicate
cardinale

1
ecco l'output per i curiosi: imgur.com/ryvWbJO
Cam.Davidson.Pilon

1
Le uniche cose di cui sono a conoscenza che sono potenzialmente pertinenti a livello concettuale sono che a) la distribuzione prevista dei risultati è simmetrica, b) una dimensione del contenitore di 1 è sempre uniforme, c) una dimensione del contenitore di 2 per una distribuzione simmetrica apparirà anche sempre uniforme, d) il numero di possibili distribuzioni di campionamento che possono essere ricavate dagli aumenti con N, e) i valori di S non possono accumularsi su 0 o 1 da soli perché beta non è definita quando ci sono 0 successi in entrambi i gruppi e f) i campioni sono limitati tra 0 e 1.
russellpierce,

1
Solo a scopo di osservazione possiamo vedere che le distanze tra i centroidi delle distribuzioni di campionamento si riducono quando i centroidi delle distribuzioni di campionamento si allontanano da 0,5 (probabilmente correlato al punto f sopra). Questo effetto tende a contrastare la tendenza delle alte frequenze delle osservazioni per i successi quasi uguali più comuni nel caso del gruppo A e del gruppo B. Tuttavia, dare una soluzione matematica sul perché sia ​​o perché dovrebbe produrre distribuzioni normali per determinate dimensioni dei contenitori non si trova in nessun luogo vicino al mio territorio.
russellpierce,

16

Per avere un po 'di intuizione per quello che sta succedendo, sentiamoci liberi di rendere molto grande e così facendo ignoriamo il comportamento e sfruttiamo i teoremi asintotici che affermano che le distribuzioni sia Beta che Binomiale diventano approssimativamente normali. (Con qualche problema, tutto ciò può essere reso rigoroso.) Quando lo facciamo, il risultato emerge da una relazione specifica tra i vari parametri.O ( 1 / N )NO(1/N)


Poiché prevediamo di utilizzare approssimazioni normali, presteremo attenzione alle aspettative e alle variazioni delle variabili:

  • Come binomiale variates, e hanno aspettative di e le varianze di . Di conseguenza e hanno aspettative di e varianza .n A n B p N p ( 1 - p ) N α = n A / N β = n B / N p p ( 1 - p ) / N(N,p)nAnBpNp(1p)Nα=nA/Nβ=nB/Npp(1p)/N

  • Come una Beta , ha un'aspettativa di e una varianza di . Approssimando, scopriamo che ha un'aspettativa di(nA+1,N+1nA)PA(nA+1)/(N+2)(nA+1)(N+1nA)/[(N+2)2(N+3)]PA

    E(PA)=α+O(1/N)

    e una varianza di

    Var(PA)=α(1α)/N+O(1/N2),

    con risultati simili per .PB

Approssimiamo quindi le distribuzioni di e con le distribuzioni Normale e Normal (dove il secondo parametro indica la varianza ). La distribuzione di conseguenza è approssimativamente normale; con spirito,PAPB(α,α(1α)/N)(β,β(1β)/N)PAPB

PAPBNormal(αβ,α(1α)+β(1β)N).

Per molto grande , l'espressione non varierà sensibilmente da tranne con probabilità molto bassa (un altro termine trascurato ). Di conseguenza, lasciando che sia il normale CDF standard,Nα(1α)+β(1β)p(1p)+p(1p)=2p(1p)O(1/N)Φ

Pr(PA>PB)=Pr(PAPB>0)Φ(αβ2p(1p)/N).

Ma poiché ha zero media e varianza è uno standard normale variata (almeno approssimativamente). è la sua trasformazione integrale di probabilità ; è uniforme .αβ2p(1p)/N, Z=αβ2p(1p)/NΦΦ(Z)


1
Sto con te fino a ... poi vai in un'altra direzione che non ho seguito del tutto. È definito due volte, una volta come il CDF normale standard e poi come l'integrale probabilità trasformare? Spero che tu possa espandere la tua descrizione attorno a questi passaggi e metterli in relazione con il codice / problema iniziale. Forse tornare indietro e riaffermare quali parametri specifici producono il risultato uniforme. PAPBNormalΦ
Russellpierce,

1
@rpierce (1) La differenza è approssimativamente normale perché e sono indipendenti e ciascuna è approssimativamente normale. La media è la differenza delle medie e la varianza è la somma delle varianze. (2) La trasformata integrale di probabilità è il CDF: è il caso di qualsiasi variabile casuale con distribuzione continua , che è uniforme. PAPBPAPBXFF(X)
whuber

1
Oh, ne ho preso 1, era la roba dopo che mi sono perso. Sarà stupidamente stupido, ma perché uguale al CDF? Pr(PA>PB)
russellpierce,

1
@rpierce Ciò deriva piuttosto direttamente dalla definizione, ma c'è una leggera svolta in cui viene invocata la simmetria della distribuzione normale. Abbiamo a che fare con una variata normale presume di avere un'aspettativa di e varianza . Standardizzando , è naturale riscrivere la probabilità comeX=PAPBμ=αβσ2=2p(1p)/NX
Pr(X>0)=Pr((Xμ)/σ>(0μ)/σ)=1Φ(μ/σ)=Φ(μ/σ).
whuber

3
@whuber questo è abbastanza sorprendente. Sei un insegnante meraviglioso. Apprezzo sia la tua risposta sia la tua risposta, gli darò comunque credito in quanto ha risolto il nostro problema e hai dimostrato perché si verifica il comportamento. Ty!
Cam.Davidson.Pilon
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.