double likelihood_DIRalpha() { /* * Dirichlet for topics */ int i,t; double likelihood = 0; for (i=0; i<ddN.DT; i++) { for (t=0; t<ddN.T; t++) { if ( ddS.Ndt[i][t]>0 ) { #ifdef L_CACHE if ( ddP.alphac>0 ) likelihood += gcache_value(&ddC.lgalphac, (int)ddS.Ndt[i][t]); else #endif likelihood += gammadiff((int)ddS.Ndt[i][t], ddP.alphapr[t], 0.0); } } #ifdef L_CACHE likelihood -= gcache_value(&ddC.lgalphatot, (int)ddS.NdT[i]); #else likelihood -= gammadiff((int)ddS.NdT[i], ddP.alphatot, 0.0); #endif } //yap_infinite(likelihood); return likelihood; }
double likelihood_PYalpha() { int i,t; double likelihood = 0; double la = 0; double lb = log(ddP.bpar); if ( ddP.apar>0 ) la = log(ddP.apar); for (i=0; i<ddN.DT; i++) { uint16_t Td_ = 0; for (t=0; t<ddN.T; t++) { if ( ddS.Ndt[i][t]>0 ) { Td_ += ddS.Tdt[i][t]; if ( ddS.Ndt[i][t]>1 ) { likelihood += S_S(ddC.SX,ddS.Ndt[i][t],ddS.Tdt[i][t]); } } } if ( ddP.apar==0 ) { likelihood += Td_*lb; } else { likelihood += Td_*la + gcache_value(&ddC.lgba, (int)Td_); } likelihood -= gcache_value(&ddC.lgb, (int)ddS.NdT[i]); //yap_infinite(likelihood); } return likelihood; }
double likelihood_DIRbeta() { int j,t; double likelihood = 0; double val = 0; for (t=0; t<ddN.T; t++) { for (j=0; j<ddN.W; j++) { if ( ddS.Nwt[j][t]>0 ) { assert(ddP.betapr[j]>0); #ifdef L_CACHE if ( ddP.betac>0 ) val += gcache_value(&ddC.lgbetac, (int)ddS.Nwt[j][t]); else #endif val += gammadiff((int)ddS.Nwt[j][t], ddP.betapr[j], 0.0); } } #ifdef L_CACHE val -= gcache_value(&ddC.lgbetatot, (int)ddS.NWt[t]); #else val -= gammadiff((int)ddS.NWt[t], ddP.betatot, 0.0); #endif } likelihood += val; //yap_infinite(likelihood); return likelihood; }
double likelihood_PYbeta() { int i,t; double likelihood = 0; double lbw = log(ddP.bwpar); double law = log(ddP.awpar); likelihood += pctl_gammaprior(ddP.bwpar); /* * term for k-th node */ #ifdef BWPAR0 for (t=1; t<ddN.T; t++) { #else for (t=0; t<ddN.T; t++) { #endif uint32_t Tw_ = 0; for (i=0; i<ddN.W; i++) { int tt = ddS.Twt[i][t]; int nn = ddS.Nwt[i][t]; if ( nn>0 ) { Tw_ += tt; likelihood += S_S(ddC.SY,nn,tt); #if 1 if ( !finite(likelihood) || isinf(likelihood) || isnan(likelihood) ) yap_quit("Like=%lf: Nwt[%d][%d]=%d Twt[i][t]=%d S.M=%d S.N=%d\n", likelihood, i, t, (int)ddS.Nwt[i][t],(int)ddS.Twt[i][t],ddC.SY->usedM, ddC.SY->usedN); #endif } } yap_infinite(likelihood); if ( ddP.awpar==0 ) { likelihood += Tw_*lbw; } else { #ifdef L_CACHE likelihood += Tw_*law + gcache_value(&ddC.lgbaw, (int)Tw_); #else likelihood += Tw_*law + gammadiff((int)Tw_, ddP.bwpar/ddP.awpar, 0.0); #endif } #ifdef L_CACHE likelihood -= gcache_value(&ddC.lgbw, (int)ddS.NWt[t]); #else likelihood -= gammadiff((int)ddS.NWt[t], ddP.bwpar, 0.0); #endif yap_infinite(likelihood); } yap_infinite(likelihood); return likelihood; } double likelihood_PYbeta_PDP() { /* * the constant prior */ int j; double likelihood = 0; for (j=0; j<ddN.W; j++) { if ( ddS.TwT[j]>0 ) { likelihood += ddS.TwT[j]*log(ddP.betapr[j]); } } //yap_infinite(likelihood); return likelihood; }
static double aterms2(double x, void *mydata) { int i, k; ALData *mp = (ALData *)mydata; double val = 0; #ifdef LGCACHE struct gcache_s lgp; #else double lg1a = lgamma(1-x); #endif stcnt_int *mm = mp->m; if ( x<=0 ) { fprintf(stderr,"Illegal discount value in aterms2()\n"); exit(1); } #ifdef LGCACHE gcache_init(&lgp, 1-x); #endif for (i=0; i<mp->I; i++) { val += mp->T[i] * log(x) + lgamma(mp->T[i]+mp->bpar[i]/x) - lgamma(mp->bpar[i]/x); for (k=0; k<mp->K[i]; k++) { scnt_int n; stcnt_int t; if ( mp->val ) { mp->val(&n, &t, i, k); } else { n = mp->n[i][k]; t = mp->t[i][k]; } if ( n>0 ) { if ( t==n ) { ; } else if ( t==1 ) { #ifdef LGCACHE val += gcache_value(&lgp, n-1); #else val += lgamma(n-x) - lg1a; #endif } else { int l; for (l=t-2; l>=0; l--) { if ( mm[l]>1 ) #ifdef LGCACHE val += gcache_value(&lgp, mm[l]-1); #else val += lgamma(mm[l]-x) - lg1a; #endif n -= mm[l]; } assert(n>0); if ( n>0 ) #ifdef LGCACHE val += gcache_value(&lgp, n-1); #else val += lgamma(n-x) - lg1a; #endif mm += t-1; } } } } return val; }