IMPISD_BEGIN_NAMESPACE MultivariateFNormalSufficientSparse::MultivariateFNormalSufficientSparse( const MatrixXd& FX, double JF, const VectorXd& FM, const SparseMatrix<double>& Sigma, cholmod_common *c, double cutoff) : Object("Multivariate Normal distribution %1%") { c_ = c; W_=nullptr; Sigma_=nullptr; P_=nullptr; PW_=nullptr; epsilon_=nullptr; L_=nullptr; N_=FX.rows(); M_=FX.cols(); IMP_LOG(TERSE, "MVNsparse: direct init with N=" << N_ << " and M=" << M_ << std::endl); IMP_USAGE_CHECK( N_ > 0, "please provide at least one observation per dimension"); IMP_USAGE_CHECK( M_ > 0, "please provide at least one variable"); FM_=FM; set_FX(FX,cutoff); //also computes W, Fbar and epsilon. set_JF(JF); set_Sigma(Sigma); //computes the Cholesky decomp. }
MultivariateFNormalSufficientSparse::MultivariateFNormalSufficientSparse( const VectorXd& Fbar, double JF, const VectorXd& FM, int Nobs, const SparseMatrix<double>& W, const SparseMatrix<double>& Sigma, cholmod_common *c) : Object("Multivariate Normal distribution %1%") { c_ = c; W_=nullptr; Sigma_=nullptr; P_=nullptr; PW_=nullptr; epsilon_=nullptr; L_=nullptr; N_=Nobs; M_=Fbar.rows(); IMP_LOG(TERSE, "MVNsparse: sufficient statistics init with N=" << N_ << " and M=" << M_ << std::endl); IMP_USAGE_CHECK( N_ > 0, "please provide at least one observation per dimension"); IMP_USAGE_CHECK( M_ > 0, "please provide at least one variable"); FM_=FM; set_Fbar(Fbar); //also computes epsilon set_W(W); set_JF(JF); set_Sigma(Sigma); }
void ZMMM::mle(){ double n = suf()->n(); if(n < 1) { report_error("Too few degrees of freedom to compute ML in " "ZeroMeanGaussianModel::mle()"); } set_Sigma( suf()->center_sumsq(mu_) / (n-1)); }
MultivariateFNormalSufficient::MultivariateFNormalSufficient( const MatrixXd& FX, double JF, const VectorXd& FM, const MatrixXd& Sigma, double factor) { //O(1) reset_flags(); N_=FX.rows(); M_=FX.cols(); LOG( "MVN: direct init with N=" << N_ << " and M=" << M_ << std::endl); CHECK( N_ > 0, "please provide at least one observation per dimension"); CHECK( M_ > 0, "please provide at least one variable"); set_factor(factor); set_FM(FM); set_FX(FX); set_jacobian(JF); set_Sigma(Sigma); }
MultivariateFNormalSufficient::MultivariateFNormalSufficient( const VectorXd& Fbar, double JF, const VectorXd& FM, int Nobs, const MatrixXd& W, const MatrixXd& Sigma, double factor) { reset_flags(); N_=Nobs; M_=Fbar.rows(); LOG( "MVN: sufficient statistics init with N=" << N_ << " and M=" << M_ << std::endl); CHECK( N_ > 0, "please provide at least one observation per dimension"); CHECK( M_ > 0, "please provide at least one variable"); set_factor(factor); set_FM(FM); set_Fbar(Fbar); set_W(W); set_jacobian(JF); set_Sigma(Sigma); }
MVTR::MvtRegModel(const Mat &X,const Mat &Y, bool add_intercept) : ParamPolicy(new MatrixParams(X.ncol() + add_intercept,Y.ncol()), new SpdParams(Y.ncol()), new UnivParams(default_df)) { Mat XX(add_intercept? cbind(1.0,X) : X); QR qr(XX); Mat Beta(qr.solve(qr.QtY(Y))); Mat resid = Y - XX* Beta; uint n = XX.nrow(); Spd Sig = resid.t() * resid/n; set_Beta(Beta); set_Sigma(Sig); for(uint i=0; i<n; ++i){ Vec y = Y.row(i); Vec x = XX.row(i); NEW(MvRegData, dp)(y,x); DataPolicy::add_data(dp); } }
MultivariateFNormalSufficient::MultivariateFNormalSufficient( const VectorXd& Fbar, double JF, const VectorXd& FM, int Nobs, const MatrixXd& W, const MatrixXd& Sigma, double factor) : base::Object("Multivariate Normal distribution %1%") { reset_flags(); N_=Nobs; M_=Fbar.rows(); IMP_LOG_TERSE( "MVN: sufficient statistics init with N=" << N_ << " and M=" << M_ << std::endl); IMP_USAGE_CHECK( N_ > 0, "please provide at least one observation per dimension"); IMP_USAGE_CHECK( M_ > 0, "please provide at least one variable"); set_factor(factor); set_FM(FM); set_Fbar(Fbar); set_W(W); set_jacobian(JF); set_Sigma(Sigma); use_cg_=false; }
MultivariateFNormalSufficient::MultivariateFNormalSufficient( const MatrixXd& FX, double JF, const VectorXd& FM, const MatrixXd& Sigma, double factor) : base::Object("Multivariate Normal distribution %1%") { //O(1) reset_flags(); N_=FX.rows(); M_=FX.cols(); IMP_LOG_TERSE( "MVN: direct init with N=" << N_ << " and M=" << M_ << std::endl); IMP_USAGE_CHECK( N_ > 0, "please provide at least one observation per dimension"); IMP_USAGE_CHECK( M_ > 0, "please provide at least one variable"); set_factor(factor); set_FM(FM); set_FX(FX); set_jacobian(JF); set_Sigma(Sigma); use_cg_=false; }
void WeightedMvnModel::mle(){ set_mu(suf()->ybar()); set_Sigma(suf()->var_hat()); }
void MvReg::mle() { set_Beta(suf()->beta_hat()); set_Sigma(suf()->SSE(Beta()) / suf()->n()); }