Show
Ignore:
Timestamp:
10/23/09 00:05:25 (15 years ago)
Author:
smidl
Message:

Major changes in BM -- OK is only test suite and tests/tutorial -- the rest is broken!!!

Files:
1 modified

Legend:

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

    r665 r679  
    22namespace bdm { 
    33 
    4 void ARX::bayes ( const vec &dt, const double w ) { 
     4        void ARX::bayes_weighted ( const vec &yt, const vec &cond, const double w ) { 
    55        double lnc; 
    6                  
     6        //cache 
     7        ldmat &V=est._V();  
     8        double &nu=est._nu(); 
     9 
     10        dyad.set_subvector(0,yt); 
     11        dyad.set_subvector(dimy,cond); 
     12        // possible "1" is there from the beginning 
     13         
    714        if ( frg < 1.0 ) { 
    815                est.pow ( frg ); // multiply V and nu 
     16 
    917                 
    1018                //stabilize 
    1119                ldmat V0=alter_est._V(); //$ copy 
    1220                double &nu0=alter_est._nu(); 
     21                 
    1322                V0*=(1-frg); 
    1423                V += V0; //stabilization 
     
    2029                } 
    2130        } 
    22         if (have_constant) { 
    23                 _dt.set_subvector(0,dt); 
    24                 V.opupdt ( _dt, w ); 
    25         } else { 
    26                 V.opupdt ( dt, w ); 
    27         } 
     31        V.opupdt ( dyad, w ); 
    2832        nu += w; 
    2933 
     
    3640} 
    3741 
    38 double ARX::logpred ( const vec &dt ) const { 
     42double ARX::logpred ( const vec &yt ) const { 
    3943        egiw pred ( est ); 
    4044        ldmat &V = pred._V(); 
     
    4246 
    4347        double lll; 
     48        vec dyad_p = dyad; 
     49        dyad_p.set_subvector(0,yt); 
    4450 
    4551        if ( frg < 1.0 ) { 
     
    5359                } 
    5460 
    55         V.opupdt ( dt, 1.0 ); 
     61        V.opupdt ( dyad_p, 1.0 ); 
    5662        nu += 1.0; 
    5763        // log(sqrt(2*pi)) = 0.91893853320467 
     
    6773        const ARX* A0 = dynamic_cast<const ARX*> ( B0 ); 
    6874 
    69         bdm_assert_debug ( V.rows() == A0->V.rows(), "ARX::set_statistics Statistics  differ" ); 
    70         set_statistics ( A0->dimx, A0->V, A0->nu ); 
     75        bdm_assert_debug ( dimension() == A0->dimension(), "Statistics of different dimensions" ); 
     76        set_statistics ( A0->dimensiony(), A0->posterior()._V(), A0->posterior()._nu() ); 
    7177} 
    7278 
    7379enorm<ldmat>* ARX::epredictor ( const vec &rgr ) const { 
    74         int dim = dimx;//est.dimension(); 
    75         mat mu ( dim, V.rows() - dim ); 
    76         mat R ( dim, dim ); 
     80        mat mu ( dimy, posterior()._V().rows() - dimy ); 
     81        mat R ( dimy, dimy ); 
    7782 
    7883        enorm<ldmat>* tmp; 
    7984        tmp = new enorm<ldmat> ( ); 
    8085        //TODO: too hackish 
    81         if ( drv._dsize() > 0 ) { 
     86        if ( yrv._dsize() > 0 ) { 
    8287        } 
    8388 
     
    9196 
    9297mlnorm<ldmat>* ARX::predictor ( ) const { 
    93         int dim = est.dimension(); 
    94          
    95         mat mu ( dim, V.rows() - dim ); 
    96         mat R ( dim, dim ); 
     98        mat mu ( dimy, posterior()._V().rows() - dimy ); 
     99        mat R ( dimy, dimy ); 
    97100        mlnorm<ldmat>* tmp; 
    98101        tmp = new mlnorm<ldmat> ( ); 
     
    106109                tmp->set_parameters ( mu.get_cols ( 0, mu.cols() - 2 ), mu.get_col ( mu.cols() - 1 ), ldmat ( R ) ); 
    107110        } else { 
    108                 tmp->set_parameters ( mu, zeros ( dim ), ldmat ( R ) ); 
     111                tmp->set_parameters ( mu, zeros ( dimy ), ldmat ( R ) ); 
    109112        } 
    110113        return tmp; 
     
    112115 
    113116mlstudent* ARX::predictor_student ( ) const { 
    114         int dim = est.dimension(); 
    115  
    116         mat mu ( dim, V.rows() - dim ); 
    117         mat R ( dim, dim ); 
     117        const ldmat &V = posterior()._V(); 
     118         
     119        mat mu ( dimy, V.rows() - dimy ); 
     120        mat R ( dimy, dimy ); 
    118121        mlstudent* tmp; 
    119122        tmp = new mlstudent ( ); 
     
    122125        mu = mu.T(); 
    123126 
    124         int xdim = dimx; 
    125127        int end = V._L().rows() - 1; 
    126         ldmat Lam ( V._L() ( xdim, end, xdim, end ), V._D() ( xdim, end ) );  //exp val of R 
     128        ldmat Lam ( V._L() ( dimy, end, dimy, end ), V._D() ( dimy, end ) );  //exp val of R 
    127129 
    128130 
     
    132134                        tmp->set_parameters ( mu.get_cols ( 0, mu.cols() - 2 ), mu.get_col ( mu.cols() - 1 ), ldmat ( R ), Lam ); 
    133135                } else { 
    134                         tmp->set_parameters ( mat ( dim, 0 ), mu.get_col ( mu.cols() - 1 ), ldmat ( R ), Lam ); 
     136                        tmp->set_parameters ( mat ( dimy, dimc ), mu.get_col ( mu.cols() - 1 ), ldmat ( R ), Lam ); 
    135137                } 
    136138        } else { 
    137139                // no constant term 
    138                 tmp->set_parameters ( mu, zeros ( xdim ), ldmat ( R ), Lam ); 
     140                tmp->set_parameters ( mu, zeros ( dimy ), ldmat ( R ), Lam ); 
    139141        } 
    140142        return tmp; 
     
    214216 
    215217void ARX::from_setting ( const Setting &set ) { 
    216         shared_ptr<RV> yrv = UI::build<RV> ( set, "rv", UI::compulsory ); 
     218        shared_ptr<RV> yrv_ = UI::build<RV> ( set, "rv", UI::compulsory ); 
    217219        shared_ptr<RV> rrv = UI::build<RV> ( set, "rgr", UI::compulsory ); 
    218         int ylen = yrv->_dsize(); 
     220        dimy = yrv_->_dsize(); 
    219221        // rgrlen - including constant!!! 
    220         int rgrlen = rrv->_dsize(); 
    221          
    222         dimx = ylen; 
    223         set_rv ( *yrv, *rrv ); 
     222        dimc = rrv->_dsize(); 
     223         
     224        yrv = *yrv_; 
     225        rvc = *rrv; 
    224226         
    225227        string opt; 
     
    233235                have_constant=constant>0; 
    234236        } 
    235         if (have_constant) {rgrlen++;_dt=ones(rgrlen+ylen);} 
     237        int rgrlen = dimc+int(have_constant==true); 
    236238 
    237239        //init 
    238240        shared_ptr<egiw> pri=UI::build<egiw>(set, "prior", UI::optional); 
    239241        if (pri) { 
    240                 bdm_assert(pri->_dimx()==ylen,"prior is not compatible"); 
    241                 bdm_assert(pri->_V().rows()==ylen+rgrlen,"prior is not compatible"); 
     242                bdm_assert(pri->_dimx()==dimy,"prior is not compatible"); 
     243                bdm_assert(pri->_V().rows()==dimy+rgrlen,"prior is not compatible"); 
    242244                est.set_parameters( pri->_dimx(),pri->_V(), pri->_nu()); 
    243245        }else{ 
    244                 est.set_parameters( ylen, zeros(ylen+rgrlen)); 
     246                est.set_parameters( dimy, zeros(dimy+rgrlen)); 
    245247                set_prior_default(est); 
    246248        } 
     
    248250        shared_ptr<egiw> alt=UI::build<egiw>(set, "alternative", UI::optional); 
    249251        if (alt) { 
    250                 bdm_assert(alt->_dimx()==ylen,"alternative is not compatible"); 
    251                 bdm_assert(alt->_V().rows()==ylen+rgrlen,"alternative is not compatible"); 
     252                bdm_assert(alt->_dimx()==dimy,"alternative is not compatible"); 
     253                bdm_assert(alt->_V().rows()==dimy+rgrlen,"alternative is not compatible"); 
    252254                alter_est.set_parameters( alt->_dimx(),alt->_V(), alt->_nu()); 
    253255        } else { 
     
    264266        shared_ptr<RV> rv_par=UI::build<RV>(set, "rv_param",UI::optional ); 
    265267        if (!rv_par){ 
    266                 est.set_rv ( RV ( "{theta r }", vec_2 ( ylen*rgrlen, ylen*ylen ) ) ); 
     268                est.set_rv ( RV ( "{theta r }", vec_2 ( dimy*rgrlen, dimy*dimy ) ) ); 
    267269        } else { 
    268270                est.set_rv ( *rv_par ); 
     
    270272        validate(); 
    271273} 
    272  
    273 } 
     274} 
     275