void MVT::mle() { const double eps = 1e-5; double dloglike = eps + 1; double loglike = this->loglike(vectorize_params()); double old = loglike; Vector Nu(1, nu()); while (dloglike > eps) { Estep(); mvn->mle(); MvtNuTF f(this); loglike = max_nd1(Nu, Target(f), dTarget(f)); set_nu(Nu[0]); dloglike = loglike - old; old = loglike; } }
void WishartModel::initialize_params(){ SpdMatrix mean(suf()->sumW()); mean/= suf()->n(); set_nu(2*mean.nrow()); // out of thin air set_sumsq((mean/nu()).inv()); };