Simuler à partir d'une distribution normale de mélange tronqué

9

Je veux simuler un échantillon d'une distribution normale de mélange telle que

p×N(μ1,σ12)+(1p)×N(μ2,σ22)

est limité à l'intervalle au lieu de . Cela signifie que je veux simuler un mélange tronqué de distributions normales.[0,1]R

Je sais qu'il existe des algorithmes pour simuler une normale tronquée (c'est-à-dire à partir de cette question ) et un package correspondant dans R pour ce faire. Mais comment puis-je simuler un mélange tronqué normal? Est-ce la même chose si je simule deux normales tronquées de et ) pour rendre un mélange tronqué normal?N(μ1,σ12)N(μ2,σ22

Alexy
la source
3
Si c'est sur l'intervalle unitaire, pourquoi ne pas utiliser des bêtas au lieu de normales? Pour , la distribution est symétrique et unimodale et bornée sur l'intervalle unitaire. α=β>1
Sycorax dit Réintégrer Monica
2
Si vous n'avez pas besoin que vos simulations soient très rapides, vous pouvez le faire en utilisant l'échantillonnage de rejet: (1) échantillonnez partir du mélange de deux normales, (2) si n'est pas dans , revenez à étape 1, (3) sortie . (mais user777 a raison, avez-vous une bonne raison de choisir cette distribution au lieu d'un mélange de bêtas?)xx[0,1]x
Elvis
1
@ user777 un mélange gaussien tronqué a une distribution différente d'une distribution bêta et ne peut pas être remplacé simplement parce que vous pouvez appliquer la symétrie et le même support.
mjnichol

Réponses:

13

La simulation à partir d'une normale tronquée se fait facilement si vous avez accès à une fonction quantile normale appropriée. Par exemple, dans R, la simulation de où et désignent les limites inférieure et supérieure peut être effectuée en inversant le cdf par exemple, dans R

Nab(μ,σ2)
ab
Φ(σ1{xμ})Φ(σ1{aμ})Φ(σ1{bμ})Φ(σ1{aμ})

x = mu + sigma * qnorm( pnorm(a,mu,sigma) + 
     runif(1)*(pnorm(b,mu,sigma) - pnorm(a,mu,sigma)) )

Sinon, j'ai développé il y a vingt ans un algorithme normal d'acceptation-rejet tronqué .

Si nous considérons le problème du mélange tronqué, avec la densité c'est un mélange de distributions normales tronquées mais avec des poids différents : Par conséquent, pour simuler à partir d'une normale tronquée mélange, il suffit de prendre

f(x;θ){pφ(x;μ1,σ1)+(1p)φ(x;μ2,σ2)}I[a,b](x)
f(x;θ)p{Φ(σ11{bμ1})Φ(σ11{aμ1})}σ11ϕ(σ11{xμ1})Φ(σ11{bμ1})Φ(σ11{aμ1})+(1p){Φ(σ21{bμ2})Φ(σ21{aμ2})}σ21ϕ(σ21{xμ2})Φ(σ21{bμ2})Φ(σ11{aμ2})
x={x1Nab(μ1,σ12)with probability p{Φ(σ11{bμ1})Φ(σ11{aμ1})}/sx2Nab(μ2,σ22)with probability (1p){Φ(σ21{bμ2})Φ(σ21{aμ2})}/s
s=p{Φ(σ11{bμ1})Φ(σ11{aμ1})}+(1p){Φ(σ21{bμ2})Φ(σ21{aμ2})}

Xi'an
la source
Pourquoi ne pouvons-nous pas simplement tirer l'échantillon de la première normale avec probabilité p et de la seconde distribution avec probabilité 1 - p?
mjnichol
1
Ah! Je pense que je vois le problème. C'est parce que la distribution entière est tronquée, pas chaque distribution séparément. Si chaque sous-distribution du mélange était tronquée individuellement avant d'être ajoutée au mélange, nous pourrions simplement échantillonner à partir de la distribution en fonction des poids relatifs de chaque sous-distribution, non?
mjnichol
1
@mjnichol C'est un mélange mais avec des poids différents de et . p1p
Xi'an
@ Xi'an: Supposons que nous considérions une configuration légèrement différente: et si au lieu de construire la distribution du mélange à partir de Gaussiens pondérés puis de tronquer, nous avons plutôt mélangé deux Gaussiens déjà tronqués (avec le même support). Si les Gaussiens étaient tronqués avant le mélange, serions-nous en mesure d'échantillonner à partir de la distribution en échantillonnant le premier gaussien tronqué avec probabilité p et le second avec probabilité 1 - p?
mjnichol
2
@mjnichol: dans ce cas, vous auriez donc oui en effet cela fonctionnerait.
pNab(μ1,σ12)+(1p)Nab(μ2,σ22)
Xi'an