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
Nbune( μ ,σ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})}