Changeset 964 for library/bdm/estim

Show
Ignore:
Timestamp:
05/21/10 00:44:04 (14 years ago)
Author:
smidl
Message:

Corrections in ARX and PF

Location:
library/bdm/estim
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • library/bdm/estim/arx.cpp

    r896 r964  
    44void ARX::bayes_weighted ( const vec &yt, const vec &cond, const double w ) { 
    55 
    6         bdm_assert_debug ( yt.length() >= dimy, "ARX::bayes yt is smaller then dimc" ); 
    7         bdm_assert_debug ( cond.length() >= dimc, "ARX::bayes cond is smaller then dimc" ); 
     6        bdm_assert_debug ( yt.length() == dimy, "ARX::bayes yt is smaller then dimensiony()" ); 
     7        bdm_assert_debug ( (cond.length() == rgrlen - int(have_constant==true)) , "ARX::bayes dimension of cond is not rgrlen" ); 
    88        double lnc; 
    99        //cache 
     
    217217        BMEF::from_setting(set); 
    218218         
    219         shared_ptr<RV> yrv_ = UI::build<RV> ( set, "rv", UI::compulsory ); 
    220         shared_ptr<RV> rrv = UI::build<RV> ( set, "rgr", UI::compulsory ); 
    221         dimy = yrv_->_dsize(); 
     219        RV rrv;  
     220        UI::get (rrv, set, "rgr", UI::compulsory ); 
     221         
     222        dimy = yrv._dsize(); 
     223        bdm_assert(dimy>0,"ARX::yrv should not be empty"); 
    222224        // rgrlen - including constant!!! 
    223         dimc = rrv->_dsize(); 
    224  
    225         yrv = *yrv_; 
    226         rvc = *rrv; 
     225        rgrlen = rrv._dsize(); 
    227226 
    228227        int constant; 
     
    232231                have_constant = constant > 0; 
    233232        } 
    234         int rgrlen = dimc + int ( have_constant == true ); 
     233        dimc = rgrlen; 
     234        rvc = rrv; 
     235        rgrlen += int ( have_constant == true ); 
    235236 
    236237        //init 
     
    259260        // frg handled by BMEF 
    260261 
    261         //name results (for logging) 
    262         shared_ptr<RV> rv_par = UI::build<RV> ( set, "rv_param", UI::optional ); 
    263         if ( !rv_par ) { 
    264                 est.set_rv ( RV ( "{theta r }", vec_2 ( dimy*rgrlen, dimy*dimy ) ) ); 
    265         } else { 
    266                 est.set_rv ( *rv_par ); 
    267         }        
    268 } 
    269  
    270 } 
    271  
     262} 
     263 
     264} 
     265 
  • library/bdm/estim/arx.h

    r896 r964  
    4747        //! vector of dyadic update 
    4848        vec dyad; 
     49        //! length of the regressor 
     50        int rgrlen; 
    4951        //! posterior density 
    5052        egiw est; 
     
    5456        //! \name Constructors 
    5557        //!@{ 
    56         ARX ( const double frg0 = 1.0 ) : BMEF ( frg0 ),  have_constant ( true ), dyad(), est(), alter_est() {}; 
    57         ARX ( const ARX &A0 ) : BMEF ( A0 ),  have_constant ( A0.have_constant ), dyad ( A0.dyad ), est ( A0.est ), alter_est ( A0.alter_est ) { }; 
     58        ARX ( const double frg0 = 1.0 ) : BMEF ( frg0 ),  have_constant ( true ), dyad(), rgrlen(),est(), alter_est() {}; 
     59        ARX ( const ARX &A0 ) : BMEF ( A0 ),  have_constant ( A0.have_constant ), dyad ( A0.dyad ),rgrlen(A0.rgrlen), est ( A0.est ), alter_est ( A0.alter_est ) { }; 
    5860 
    5961        ARX* _copy() const; 
     
    115117        \code 
    116118        class = 'ARX'; 
    117         rv    = RV({names_of_dt} )                 // description of output variables 
     119        yrv   = RV({names_of_dt} )                 // description of output variables 
    118120        rgr   = RV({names_of_regressors}, [-1,-2]} // description of regressor variables 
    119121        constant = 1;                              // 0/1 switch if the constant term is modelled or not 
     
    125127        frg = 1.0;                                 // forgetting, default frg=1.0 
    126128 
    127         rv_param   = RV({names_of_parameters}}     // description of parametetr names 
    128                                                                                            // default: ["theta_i" and "r_i"] 
     129        rv  = RV({names_of_parameters}}            // description of parametetr names 
     130                                                                                           // default: [""] 
    129131        \endcode 
    130132        */ 
     
    133135        void validate() { 
    134136                BMEF::validate();        
    135  
     137                est.validate(); 
    136138                //if dimc not set set it from V 
    137139                if ( dimc == 0 ) { 
     
    192194 
    193195        void bayes ( const vec &val, const vec &cond ) { 
    194                 frg = cond ( dimc - 1 ); //  last in cond is phi 
    195                 ARX::bayes ( val, cond ); 
     196                int arx_cond_size=rgrlen -int(have_constant==true); 
     197                bdm_assert_debug(cond.size()>arx_cond_size, "ARXfrg: Insufficient conditioning, frg not given."); 
     198                frg = cond ( arx_cond_size ); // the first part after rgrlen 
     199                ARX::bayes ( val, cond.left(arx_cond_size) ); 
    196200        } 
    197201        void validate() { 
  • library/bdm/estim/kalman.h

    r963 r964  
    147147                R     = [];                   // Matrix R 
    148148                prior = struct('class','epdf_offspring');    // Prior density - will be converted to gaussian 
    149                 rvy   = RV('some_names');     // Description of required observations 
     149                yrv   = RV('some_names');     // Description of required observations 
    150150                rvc   = RV('some_names');     // Description of required inputs 
    151151                \endcode 
  • library/bdm/estim/particles.h

    r951 r964  
    323323                //set drv 
    324324 
    325                 set_yrv ( bm0->_rv() ); 
    326325                rvc = bm0->_rvc(); 
     326                dimc = bm0->dimensionc(); 
    327327                BM::set_rv(bm0->_rv()); 
    328328                yrv=bm0->_yrv(); 
     329                dimy = bm0->dimensiony(); 
    329330        } 
    330331         
     
    339340                        } 
    340341                } 
     342                if (log_level[logvars]){ 
     343                        for (int i=0; i<particles.length(); i++){ 
     344                                L.add_vector( log_level, logvars, RV ( particles(i)->dimension() ), prefix , i); 
     345                        } 
     346                } 
    341347        }; 
    342348        void log_write ( ) const { 
     
    347353                if (log_level[logmeans]){ 
    348354                        for (int i=0; i<particles.length(); i++){ 
    349                                  log_level.store( logmeans, particles(i)->posterior().mean(), i); 
     355                                log_level.store( logmeans, particles(i)->posterior().mean(), i); 
     356                        } 
     357                } 
     358                if (log_level[logvars]){ 
     359                        for (int i=0; i<particles.length(); i++){ 
     360                                log_level.store( logvars, particles(i)->posterior().variance(), i); 
    350361                        } 
    351362                }