Giovanni Petris
2003-Oct-16 23:09 UTC
[R] Improving efficiency in "outer"-like calculation
Hello, I am doing mcmc=10000 simulations from a posterior distribution of the parameters of a mixture of K=6 normal densities. I have mcmc by K matrices simMeans, simVars and simWeights containing the simulation output: one row for each simulation, one column for each normal component of the mixture. One thing I would like to do is a plot of the posterior predictive density. In order to do that I define a vector x of points at which I want to evaluate this density. And then I use the following commands: pred <- colMeans(apply(structure(dnorm(rep(x,each=mcmc*K), mean=simMeans, sd=sqrt(simVars))* rep(simWeights,length(x)),dim=c(mcmc,K,length(x))),c(1,3),sum)) lines(x,pred) Everything works, but it is very slow. Does anybody have suggestions to do the same thing in a more efficient way? Thanks in advance, Giovanni Petris -- __________________________________________________ [ ] [ Giovanni Petris GPetris at uark.edu ] [ Department of Mathematical Sciences ] [ University of Arkansas - Fayetteville, AR 72701 ] [ Ph: (479) 575-6324, 575-8630 (fax) ] [ http://definetti.uark.edu/~gpetris/ ] [__________________________________________________]
Gardar Johannesson
2003-Oct-17 01:10 UTC
[R] Improving efficiency in "outer"-like calculation
Here is one way to do it (the way I'm doing it currently)... dmixnorm <- function(x,mu,sigma,prob) { ## x can be a vector colSums(prob*dnorm(matrix(x,length(mu),length(x),byrow=TRUE),mu,sigma)) } d <- 0 for(i in iter) d <- d + dmixnorm(x, mcmc$mu[i,], mcmc$sigma[i,], mcmc$prob[i,]) d/length(iter) my mcmc$mu, etc are yours simMeans, simVars and simWeights This does not take that long time and uses little memory. The trick is that for-loops are not always that bad (i.e., they are not always the bottle neck) Gardar At 06:09 PM 10/16/2003 -0500, Giovanni Petris wrote:>Hello, > >I am doing mcmc=10000 simulations from a posterior distribution of the >parameters >of a mixture of K=6 normal densities. >I have mcmc by K matrices simMeans, simVars and simWeights containing >the simulation output: one row for each simulation, one column for >each normal component of the mixture. >One thing I would like to do is a plot of the posterior predictive >density. In order to do that I define a vector x of points at which I >want to evaluate this density. And then I use the following commands: > >pred <- colMeans(apply(structure(dnorm(rep(x,each=mcmc*K), mean=simMeans, >sd=sqrt(simVars))* > >rep(simWeights,length(x)),dim=c(mcmc,K,length(x))),c(1,3),sum)) >lines(x,pred) > >Everything works, but it is very slow. Does anybody have suggestions >to do the same thing in a more efficient way? > >Thanks in advance, >Giovanni Petris > >-- > > __________________________________________________ >[ ] >[ Giovanni Petris GPetris@uark.edu ] >[ Department of Mathematical Sciences ] >[ University of Arkansas - Fayetteville, AR 72701 ] >[ Ph: (479) 575-6324, 575-8630 (fax) ] >[ http://definetti.uark.edu/~gpetris/ ] >[__________________________________________________] > >______________________________________________ >R-help@stat.math.ethz.ch mailing list >https://www.stat.math.ethz.ch/mailman/listinfo/r-help___________________________________________________________________ Gardar Johannesson Lawrence Livermore National Laboratory 7000 East Avenue, L-229 Livermore, CA 94550 johannesson1@llnl.gov Tel: (925) 422-3901, Fax: (925) 422-4141 [[alternative HTML version deleted]]