Exemplo n.º 1
0
// PK -----------------------------------------------------------------------
int MCMCPkPg::sampleSigma( PkPgModel& model, PkPgResult& Result ){
  for( size_t i = 0; i < model.N; i++ ){
    mat Y   = model.Y.slice( i );      // log( Y )
    mat Fit = Result.Fit.slice( i ); // need to check if it's logged
    for( size_t k = 0; k < model.K; k++ ){
      double pr1 = 0.5 * ( model.prior.r1 + model.prior.T );
      vec resid  = log( Y.col( k ) ) - log( Fit.col( k ) );
      double ssr = dot(resid, resid );
      double pr2 = 0.5 * ( model.prior.r2 + ssr );
      Result.Sigma( i, k ) = rinvgamma( pr1, pr2 );
    }
  }
  return 0;
}
Exemplo n.º 2
0
void CParam::S3_sig2_i(CData &Data) {

	for (int i=0; i<n_pheno; i++){
		arma::vec mu_i_onevec(n_SNP) ; mu_i_onevec.fill(mu_vec(i)) ; 
		arma::vec e_i = E_mat.row(i).t() ; 
		double n_i = sum(e_i) ; 
		arma::vec logy_i = Data.logY.row(i).t() ;  
		arma::vec logy_minus_mu = logy_i - mu_i_onevec ;  
		arma::vec e1_logy_minus_mu = logy_minus_mu % e_i ;
		arma::vec sum_e1_squares = e1_logy_minus_mu.t() * e1_logy_minus_mu ; 
		double a_star = Data.a_sigma + 0.5 * n_i ; 
		double b_star = Data.b_sigma + 0.5 * sum_e1_squares(0) ; 
		sig2_vec(i) = rinvgamma(a_star, b_star) ; 
  } 

	is_accept_vec(2) = 1 ;
}