Pourquoi cette distribution est-elle uniforme?

12

Nous étudions les tests statistiques bayésiens et rencontrons un phénomène étrange (du moins pour moi).

Prenons le cas suivant: nous souhaitons mesurer quelle population, A ou B, a un taux de conversion plus élevé. Pour un contrôle d' , nous définissons , c'est-à-dire que la probabilité de conversion est égale dans les deux groupes. Nous générons des données artificielles en utilisant un modèle binomial, par exemplepA=pB

nABinomial(N,pA)

Nous essayons ensuite d'estimer le utilisant un modèle bêta-binomial bayésien afin d'obtenir des postérieurs pour chaque taux de conversion, par exemplepA,pB

PABeta(1+nA,NnA+1)

Notre statistique de test est calculée en calculant via monte carlo.S=P(PA>PB|N,nA,nB)

Ce qui m'a surpris, c'est que si , alors . Je pensais qu'il serait centré autour de 0,5 et même convergerait à 0,5 à mesure que la taille de l'échantillon, , augmente. pA=pBSUniform(0,1)N

Ma question est, pourquoi quand ?SUniform(0,1)pA=pB


Voici du code Python à démontrer:

%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()
Cam.Davidson.Pilon
la source
Notez que ne peut pas être exactement uniforme, car il s'agit d'une variable discrète. Vous vous interrogez donc sur le comportement asymptotique. De plus, pour un petit (moins de , approximativement, avec ) la distribution n'est même pas à distance proche de l'uniforme. N 100 / min ( p , 1 - p )SN100/min(p,1p)p=pA=pB
whuber
@whuber S n'est pas discret, c'est une probabilité qui peut se situer entre 0 et 1. Aussi, même pour un N faible, j'observe un comportement uniforme.
Cam.Davidson.Pilon
2
Je dois donc mal comprendre votre configuration, alors. Pour autant que je , pour toute valeur donnée de la valeur de est un nombre. Par conséquent, en acceptant que et soient fixes pour le moment (comme ils le sont dans votre code), est une fonction de . Mais cette dernière, étant la réalisation de deux distributions binomiales, ne peut atteindre qu'un ensemble discret de valeurs. Quand je reproduis votre code , je reçois décidément non histogrammes uniformes pour les petites . S N , p A , p B S ( n A , n B ) NN,nA,nB,SN,pA,pBS(nA,nB)RN
whuber
1
Bien que votre ait en effet des valeurs comprises entre et , ne confondez pas cela avec des valeurs non discrètes: il peut avoir au plus valeurs distinctes (et en fait en avoir moins que cela). Cela peut ne pas être parfaitement clair pour vous car votre simulation génère des estimations de plutôt que ses valeurs correctes et les estimations ont essentiellement une distribution continue. 0 1 N 2 SS01N2S
whuber
1
@whuber oui, vous avez raison, excellente observation. Je ne sais toujours pas pourquoi ça a l' air uniforme alors.
Cam.Davidson.Pilon

Réponses:

11

TL; DR: Des mélanges de distributions normales peuvent sembler uniformes lorsque les tailles de bacs sont grandes.

Cette réponse emprunte à l'exemple de code de @ whuber (que je pensais d'abord être une erreur, mais rétrospectivement était probablement un indice).

Les proportions sous - jacentes de la population sont égaux: a = b = 0.5.
Chaque groupe, A et B possède 10000 membres: N = 10000.
Nous allons effectuer 5000 répétitions d'une simulation: for i in range(5000):.

En fait, ce que nous faisons est une d'une . Dans chacune des 5000 itérations nous ferons . s i msimulationprime 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 usimulationunderlyingsimulationprimesimulationunderlying

Dans chaque itération de nous simuler un nombre aléatoire de A et B qui sont « succès » (AKA converti) compte tenu des proportions égales sous - jacentes définies précédemment: . En théorie, cela donnera A = 5000 et B = 5000, mais A et B varient d'une exécution sim à l'autre et sont répartis sur les 5000 exécutions de simulation indépendamment et (approximativement) normalement (nous y reviendrons).simulationprimeA = np.random.binomial(N, a); B = np.random.binomial(N, b)

Passons maintenant à pour une seule itération de dans laquelle A et B ont remporté un nombre égal de succès (comme ce sera la moyenne du cas). Dans chaque itération de nous allons, étant donné A et B, créer des variables aléatoires de la distribution bêta pour chaque groupe. Ensuite, nous les comparerons et découvrirons si , donnant un TRUE ou FALSE (1 ou 0). À la fin d'une série de , nous avons effectué 15 000 itérations et avons 15 000 valeurs VRAI / FAUX. La moyenne de ceux-ci donnera une valeur unique à partir de la distribution d'échantillonnage (approximativement normale) de la proportion de s i B esimulationunderlying 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 >simulationprimesimulationunderlying simulatio n u n d e r l y i n g B e t a A > B e t a BBetaA>BetaBsimulationunderlyingBetaA>BetaB .

Sauf que maintenant va sélectionner 5000 valeurs A et B. A et B seront rarement exactement égaux, mais les différences typiques dans le nombre de succès A et B sont éclipsées par la taille totale de l'échantillon de A et B. Les As et Bs typiques produiront plus d'attraction de leur distribution d'échantillonnage des proportions de , mais ceux sur les bords de la distribution A / B seront également extraits.B e t a A > B e t a BsimulationprimeBetaA>BetaB

Donc, ce que nous tirons essentiellement de nombreuses exécutions de simulation est une combinaison de distributions d'échantillonnage de pour les combinaisons de A et B (avec plus de tirages des distributions d'échantillonnage faites à partir des valeurs communes de A et B que les valeurs rares de A et B). Il en résulte des mélanges de distributions normales. Lorsque vous les combinez sur une petite taille de bac (comme c'est la valeur par défaut pour la fonction d'histogramme que vous avez utilisée et qui a été spécifiée directement dans votre code d'origine), vous vous retrouvez avec quelque chose qui ressemble à une distribution uniforme.BetaA>BetaB

Considérer:

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()
russellpierce
la source
1
Il y a donc une différence entre le mien et votre code. J'échantillonne A et B dans chaque boucle, vous l'échantillonnez une fois et calculez S 5000 fois.
Cam.Davidson.Pilon
1
La différence réside dans vos appels à rbinom, qui renvoie un vecteur. L'appel ultérieur à l' rbetaintérieur replicateest vectorisé, de sorte que la boucle intérieure (interne) utilise un autre et pour chacune des variables aléatoires générées 15000 (enroulant autour de la 5000 finale depuis votre ). Voir pour en savoir plus. Cela diffère du code de @ Cam avec un seul et fixe utilisé dans les 15 000 appels à variation aléatoire pour chacune des 5 000 boucles d' échantillonnage ( ). B A BABNSIM = 10000?rbetaABreplicate
cardinal
1
voici la sortie pour les curieux: imgur.com/ryvWbJO
Cam.Davidson.Pilon
1
Les seules choses dont je suis conscient qui sont potentiellement pertinentes au niveau conceptuel sont que a) la distribution attendue des résultats est symétrique, b) une taille de bac de 1 est toujours uniforme, c) une taille de bac de 2 pour une distribution symétrique apparaîtra toujours également uniforme, d) le nombre de distributions d'échantillonnage possibles qui peuvent être tirées des augmentations avec N, e) les valeurs de S ne peuvent pas s'accumuler sur 0 ou 1 seul parce que la bêta n'est pas définie quand il y a 0 succès dans l'un ou l'autre groupe , et f) les échantillons sont limités entre 0 et 1.
russellpierce
1
À titre d'observation, nous pouvons voir que les distances entre les centroïdes des distributions d'échantillonnage diminuent à mesure que les centroïdes des distributions d'échantillonnage s'éloignent de 0,5 (probablement lié au point f ci-dessus). Cet effet a tendance à contrecarrer la tendance des hautes fréquences d'observations pour les succès presque égaux les plus courants dans les cas du groupe A et du groupe B. Cependant, donner une solution mathématique pour expliquer pourquoi c'est ou pourquoi cela devrait produire des distributions normales pour certaines tailles de bacs n'est pas n'importe où près de mon territoire.
russellpierce
16

Pour avoir une idée de ce qui se passe, sentons-nous libres de faire très grand et, ce faisant, d'ignorer le comportement de O ( 1 / N ) et d'exploiter les théorèmes asymptotiques qui déclarent que les distributions bêta et binomiale deviennent approximativement normales. (Avec un peu de mal, tout cela peut être rendu rigoureux.) Lorsque nous faisons cela, le résultat émerge d'une relation spécifique entre les différents paramètres.NO(1/N)


Parce que nous prévoyons d'utiliser des approximations normales, nous prêterons attention aux attentes et aux variances des variables:

  • Comme binomiale variables aléatoires, n A et n B ont des attentes de p N et les écarts de p ( 1 - p ) N . Par conséquent α = n A / N et β = n B / N ont des attentes de p et de la variance p ( 1 - p ) / N .(N,p)nAnBpNp(1p)Nα=nA/Nβ=nB/Npp(1p)/N

  • En tant que variable bêta , P A a une attente de ( n A + 1 ) / ( N + 2 ) et une variance de ( n A + 1 ) ( N + 1 - n A ) / [ ( N + 2 ) 2 ( N + 3(nA+1,N+1nA)PA(nA+1)/(N+2) . En se rapprochant, on constate que P A a une attente de(nA+1)(N+1nA)/[(N+2)2(N+3)]PA

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

    et une variance de

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

    avec des résultats similaires pour .PB

PAPB(α,α(1α)/N)(β,β(1β)/N)PAPB

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

Nα(1α)+β(1β)p(1p)+p(1p)=2p(1p)O(1/N)Φ

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

αβ2p(1p)/N, Z=αβ2p(1p)/NΦΦ(Z)

whuber
la source
1
PAPBNormalΦ
1
PAPBPAPBXFF(X)
1
Pr(PA>PB)
1
X=PAPBμ=αβσ2=2p(1p)/NX
Pr(X>0)=Pr((Xμ)/σ>(0μ)/σ)=1Φ(μ/σ)=Φ(μ/σ).
3
@whuber c'est assez étonnant. Tu es un merveilleux professeur. J'apprécie à la fois la vôtre et la réponse de rpierce, je lui donnerai toujours le crédit car cela a résolu notre problème, et vous avez montré pourquoi le comportement se produit. Ty!
Cam.Davidson.Pilon