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 RNbune( μ ,σ2)
unebΦ (σ- 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) }je[ a , b ]( x )
f(x;θ)∝p{Φ(σ−11{b−μ1})−Φ(σ−11{a−μ1})}σ−11ϕ(σ−11{x−μ1})Φ(σ−11{b−μ1})−Φ(σ−11{a−μ1})+(1−p){Φ(σ−12{b−μ2})−Φ(σ−12{a−μ2})}σ−12ϕ(σ−12{x−μ2})Φ(σ−12{b−μ2})−Φ(σ−11{a−μ2})
x=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪x1∼Nba(μ1,σ21)x2∼Nba(μ2,σ22)with probability p{Φ(σ−11{b−μ1})−Φ(σ−11{a−μ1})}/swith probability (1−p){Φ(σ−12{b−μ2})−Φ(σ−12{a−μ2})}/s
où
s=p{Φ(σ−11{b−μ1})−Φ(σ−11{a−μ1})}+(1−p){Φ(σ−12{b−μ2})−Φ(σ−12{a−μ2})}