void parameters::Mstep(datafile dat, model mod){ const MatrixXi & omega=mod.Get_model(),mat=dat.Get_mat_datafile(); const VectorXd & eff=dat.Get_eff_datafile(); for (int k=0;k<m_proba.cols();k++){ m_propor(k)= (eff.array()*(m_proba.col(k)).array()/m_proba.rowwise().sum().array()).sum() / eff.sum(); for (int b=0;b<mat.cols();b++){ if ((omega.row(k).array()==b).any()){ const VectorXi & who=mod.Get_var_block(k,b); m_param[k][b].Mstep(who,mat,m_proba_block[k].col(b),m_proba.col(k).array()/m_proba.rowwise().sum().array(),eff); } } } }
void parameters::Probapost(model mod, const MatrixXi & mat){ const MatrixXi & omega=mod.Get_model(); m_proba=MatrixXd::Ones(mat.rows(),omega.rows()); for (int k = 0; k < omega.rows(); ++k) { m_proba_block[k]=m_proba_block[k].Ones(mat.rows(),(omega.rowwise().maxCoeff()(k)+1)); for (int b = 0; b < (omega.rowwise().maxCoeff()(k)+1); ++b){ if ((omega.row(k).array()==b).any()){ const VectorXi & who=mod.Get_var_block(k,b); if (who.rows()>1){ m_proba_block[k].col(b)=m_param[k][b].proba_indpt(who,mat)+m_param[k][b].proba_dpt(who,mat); }else{ m_proba_block[k].col(b)=m_param[k][b].proba_indpt(who,mat); } } } m_proba.col(k)=m_propor(k)* (m_proba_block[k].rowwise().prod()).array(); } }
void parameters::Compte_nbparam(datafile dat,model mod){ const MatrixXi & omega=mod.Get_model(); int g=omega.rows(); m_nbparam=g-1; for (int k=0;k<g;k++){ for (int b=0;b<(omega.rowwise().maxCoeff()(k)+1) ;b++){ if ((omega.row(k).array()==b).any()){ const VectorXi & who=mod.Get_var_block(k,b); const VectorXi modalite=dat.Get_modalite(who); if (who.rows()==1){ m_nbparam+=modalite(0)-1; }else{ for (int h=0;h<modalite.rows();h++){ m_nbparam+=modalite(h)-1; } m_nbparam+=modalite(0); if ((modalite(1)==2)&&(who.rows()==2)){m_nbparam--;} } } } } }