Example #1
0
  void updateNu(int *seed,
		int *nAccept,
		double *nu,
		const int *Q,
		const int *G,
		const int *S,
		const double *x,
		const int *psi,
		const int *delta,
		const double *Delta,
		const double *gamma2,
		const double *rho,
		const double *sigma2,
		const double *phi,
		const double *tau2Rho,
		const double *a) {
    unsigned int seedU = (unsigned int) *seed;

    updateNu(&seedU,nAccept,nu,*Q,*G,S,x,psi,delta,Delta,*gamma2,
	     rho,sigma2,phi,tau2Rho,a);

    *seed = (int) seedU;

    return;
  }
void LogConCenPH::moveCovOrBase(int i, double delta){
	int numCov = cov_b.size();
	if(i < numCov){
		cov_b[i] = cov_b[i] + delta;
		updateNu();
		return;
	}
	int ind = actIndex[i - numCov];
	move_act_b(ind, delta);
}
Example #3
0
void IBCC::train(int noItr) {
  initialize();
  for(int i=0; i < noItr; ++i) {
    cerr << "VB Iteration " << (i+1) << "..." << endl;
    // E-step
    lblCnts(i==0); // get class counts  
    baseCnts(i==0); // get base classifiers counts
    // M-step
    updateNu(); // update class priors 
    expctKappa(); // compute class expectations 
    updateAlpha(); // update base classifiers priors 
    expctPi(); // compute base classifiers expectations
    // E-step
    expctRho();
  }
}
double LogConCenPH::nullk(){
//	int k = x.size();
	updateNu();
//	double scaleValue = (1 - augLeft - augRight) / s[k-1];
	double logScale = log(scaleValue);
//	for(int i = 0; i < k; i++)
//		s[i] = s[i] * scaleValue + augLeft;		
	int n_row = Lindex.size();
//	double tot_rvec = 0;
	double log_sum = 0;
	double p_ob = 0;
	int hi_ind;
	int lo_ind;
	for(int i = 0; i < n_row; i++){
		hi_ind = Rindex[i];
		lo_ind = Lindex[i];
		if(hi_ind == lo_ind){
			if( abs(nu[i] - 1) >  0.000000001 )
				log_sum += log(nu[i]) + (b[lo_ind] + logScale) + (nu[i]-1) * log(1-s[hi_ind]);	
			else
				log_sum += (b[lo_ind] + logScale);
			continue;
		}
		p_ob  =  pow(1-s[lo_ind], nu[i]) - pow(1-s[hi_ind], nu[i]);
		if(!(p_ob > 0) ) {
			 return(R_NegInf);
		}
		log_sum += log(p_ob);
	}
	if(log_sum == R_PosInf || log_sum == R_NegInf){
		return(R_NegInf);
	}
	if(log_sum != log_sum){
		return(R_NegInf);
	}
	return (log_sum);
}