void MM::mle(){ const Vec &n(suf()->n()); double tot = sum(n); if(tot==0){ Vec probs(size(), 1.0/size()); set_pi(probs); return; } set_pi(n/tot); }
void clear_trans_all(Trans *trans) { int size = trans->size; set_trans(trans->trans, 0, size, FALSE); set_pi(trans->pi, 0, size, FALSE); set_gamma(trans->gamma, 0, size, FALSE); }
void init_good_turing_trans(Trans *trans) { /* Set up transitions as if we had seen one of each transition already */ int size = trans->size; set_trans(trans->trans, 1, size, FALSE); set_pi(trans->pi, 1, size, FALSE); set_gamma(trans->gamma, size, size, FALSE); }
MM::MultinomialModel(const StringVec &names) : ParamPolicy(new VectorParams(1)), DataPolicy(new MS(1)), ConjPriorPolicy(), logp_current_(false) { std::vector<Ptr<CD> > dvec(make_catdat_ptrs(names)); uint nlev= dvec[0]->nlevels(); Vec probs(nlev, 1.0/nlev); set_pi(probs); set_data(dvec); mle(); set_observer(); }