Hola sólo quiero tratar de simular una distribución de mezcla con la combinación de un distribución normal y un distribución t no central ,
la variable aleatoria Z se define como
$$Z = nX+(1-n)Y$$
donde
$$n \sim \mathrm{Bernoulli}(\pi) $$
$$ X \sim \mathrm{Normal}(\mu_1, \sigma_1) $$
$$ Y \sim t_\nu(\mu_2, 1) $$
Tengo los códigos como abajo pero un poco ineficientes, ¿alguien puede ayudar a mejorar?
mix.dist.alt <- function(n,mix.par,mu1,sigma1,mu2,df) {
#Purpose: Alternative implementation of routine to sample n values
# from the mixture distribution
#Inputs:
# n - number of samples to return
# mix.par - pi in the practical notes -- proportion of samples from norm dist
# mu1 - mean of norm dist
# sigma1 - sd of norm dist
# mu2 - mean of t dist
# df - df for t dist
#Outputs:
# vector of n values from the mixture distribution
#create results vector
Z<-numeric(n)
#go through each observation...
for(i in 1:n){
#...determine if it comes from the normal or t distribution
if(rbinom(1,1,mix.par)==1) {
#normal distribution
Z[i]<-rnorm(1,mu1,sigma1)
} else {
#t distribution
Z[i]<-mu2+rt(1,df)
}
}
return(Z)
}