La simulación de una normal truncada se realiza fácilmente si tiene acceso a una función cuantil normal adecuada. Por ejemplo, en R, simulandoNba(μ,σ2)
dónde a y b denotar los límites inferior y superior se puede hacer invirtiendo el cdf Φ(σ−1{x−μ})−Φ(σ−1{a−μ})Φ(σ−1{b−μ})−Φ(σ−1{a−μ})
por ejemplo, en R
x = mu + sigma * qnorm( pnorm(a,mu,sigma) +
runif(1)*(pnorm(b,mu,sigma) - pnorm(a,mu,sigma)) )
De lo contrario, desarrollé un algoritmo de aceptación-rechazo normal truncado hace veinte años.
Si consideramos el problema de la mezcla truncada, con densidad
f(x;θ)∝{pφ(x;μ1,σ1)+(1−p)φ(x;μ2,σ2)}I[a,b](x)
Es una mezcla de distribuciones normales truncadas pero con diferentes pesos :
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})
Por lo tanto, para simular a partir de una mezcla normal truncada, es suficiente tomar
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
dónde
s=p{Φ(σ−11{b−μ1})−Φ(σ−11{a−μ1})}+(1−p){Φ(σ−12{b−μ2})−Φ(σ−12{a−μ2})}