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)+(1−p)×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


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)+(1−p)φ(x;μ2,σ2)}I[a,b](x)
f(x;θ)∝p{Φ(σ1−1{b−μ1})−Φ(σ1−1{a−μ1})}σ1−1ϕ(σ1−1{x−μ1})Φ(σ1−1{b−μ1})−Φ(σ1−1{a−μ1})+(1−p){Φ(σ2−1{b−μ2})−Φ(σ2−1{a−μ2})}σ2−1ϕ(σ2−1{x−μ2})Φ(σ2−1{b−μ2})−Φ(σ1−1{a−μ2})
x={x1∼Nab(μ1,σ12)with probability p{Φ(σ1−1{b−μ1})−Φ(σ1−1{a−μ1})}/sx2∼Nab(μ2,σ22)with probability (1−p){Φ(σ2−1{b−μ2})−Φ(σ2−1{a−μ2})}/s
où
s=p{Φ(σ1−1{b−μ1})−Φ(σ1−1{a−μ1})}+(1−p){Φ(σ2−1{b−μ2})−Φ(σ2−1{a−μ2})}


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 . p1−p
— 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)+(1−p)Nab(μ2,σ22)
— Xi'an
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.