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 exemple
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 exemple
Notre statistique de test est calculée en calculant via monte carlo.
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.
Ma question est, pourquoi quand ?
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()
la source
R
Réponses:
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 usimulationunderlying simulationprime simulationunderlying
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).simulationprime
A = 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 >simulationprime simulationunderlying simulatio n u n d e r l y i n g B e t a A > B e t a BBetaA>BetaB simulationunderlying BetaA>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 Bsimulationprime BetaA>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:
la source
rbinom
, qui renvoie un vecteur. L'appel ultérieur à l'rbeta
intérieurreplicate
est 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 BNSIM = 10000
?rbeta
replicate
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.N O(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) nA nB pN p(1−p)N α=nA/N β=nB/N p p(1−p)/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+1−nA) PA (nA+1)/(N+2) . En se rapprochant, on constate que P A a une attente de(nA+1)(N+1−nA)/[(N+2)2(N+3)] PA
et une variance de
avec des résultats similaires pour .PB
la source