individual-residual.txt

Revision 1 - 8/8/10 at 4:01 pm by eric.ward

Back to revision history for individual-residual.txt
This file is part of the project IsoEcol7_workshop_files
model {

   p.mean[1:num.prey] ~ ddirch(alpha[1:num.prey]);
   for(i in 1:num.prey) {
      logp.mean[i] <- log(p.mean[i]);
   }
   # convert to CLR space to include RE
   avglogp <- sum(logp.mean[1:num.prey])/num.prey;
   for(i in 1:num.prey) {
      mu[i] <- logp.mean[i] - avglogp;
   }
   
   ind.sig ~ dunif(0,10);
   ind.invSig2 <- 1/(ind.sig*ind.sig);
   # generate individual deviates from the global mean
   for(i in 1:N) {
      for(prey in 1:num.prey) {
         p.ind[i,prey] ~ dnorm(mu[prey], ind.invSig2);
         exp.p[i,prey] <- exp(p.ind[i,prey]);
      }
   }
   
   # CLR math: 
   for(i in 1:N) {
      p.tot[i] <- sum(exp.p[i,1:num.prey]);
      for(prey in 1:(num.prey-1)) {
         p[i,prey] <- exp.p[i,prey]/p.tot[i];
      }
      p[i,num.prey] <- 1-sum(p[i,1:(num.prey-1)]);
   }

   for(prey in 1:num.prey) {
      for(i in 1:N) {
         # these are weights for variances
         p2[i,prey] <- p[i,prey]*p[i,prey]; 
      }
   }

   # for each isotope and population, calculate the predicted mixtures
   for(iso in 1:num.iso) {
      resid.sigma[iso] ~ dunif(0,100);
      resid2[iso] <- (resid.sigma[iso]*resid.sigma[iso]);
      for(i in 1:N) {
         mix.mu[iso,i] <- inprod(u[,iso],p[i,]);
         mix.var[iso,i] <- inprod(sigma2[,iso],p2[i,]);
         mix.totalVar[iso,i] <- mix.var[iso,i] + resid2[iso];
         mix.prcsn[iso,i] <- 1/(mix.totalVar[iso,i]);
      }
   }

   # This section does the likelihood / posterior, N data points
   for(i in 1:N) {
      for(iso in 1:num.iso) {
         X[i,iso] ~ dnorm(mix.mu[iso, i], mix.prcsn[iso, i]);
      }
   }

}
Sculpin 0.2 | xhtml | problems or comments? | report bugs