Exemplo n.º 1
0
HHRESULT CGaussianMDP::sample_s2
(
   double &s2, 
   double *phi,
   double m,
   int sizephi,
   double w,
   double W
)
{
   double p1 = (double)sizephi/2.0 + w;
   double p2,s;
   int i;
   HHRESULT hr = HH_OK;
   
   s=0.0;
   for(i=0; i<sizephi; i++)
   {
      s += (phi[i]-m)*(phi[i]-m);
   }
   
   p2 = (s/2.0 + W); 
   
   s2 = 1.0/ rgamma2(p1,p2);
   
   return hr;
}
Exemplo n.º 2
0
HHRESULT CGaussianMDP::sample_alpha
(
   double par1,
   double par2,
   int n,
   int k,
   double &alpha
)
{
   double b,odds,prob;
   int ind;
   HHRESULT hr = HH_OK;
   
   b = rbeta(alpha+1,n);
   odds = (par1+k-1)/(n*(par2-log(b)));
   prob = odds/(odds+1);
   ind = (int)rbinom(1,prob);
   alpha = ind     * rgamma2(par1+k,   (par2-log(b))) +
           (1-ind) * rgamma2(par1+k-1, (par2-log(b)));
   
   return hr;
}  
Exemplo n.º 3
0
double rgamma(double alpha, double beta)
/*
 * Generates from a general gamma(alpha,beta) distribution
 */   
{
   double random;
   if (alpha < 1)
      do {
      random = rgamma1(alpha)/beta; 
      } while (random < 0 );
   if (alpha == 1)
      random = rexp(1)/beta; 
   if (alpha > 1)
      do {
      random = rgamma2(alpha)/beta; 
      } while (random < 0);
   return random;
}