Show
Ignore:
Timestamp:
09/18/09 00:17:05 (15 years ago)
Author:
smidl
Message:

ARX re-designed

Files:
1 modified

Legend:

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

    r585 r625  
    55        double lnc; 
    66 
     7                 
    78        if ( frg < 1.0 ) { 
    89                est.pow ( frg ); 
     
    1112                } 
    1213        } 
    13         V.opupdt ( dt, w ); 
     14        if (have_constant) { 
     15                _dt.set_subvector(0,dt); 
     16                V.opupdt ( _dt, w ); 
     17        } else { 
     18                V.opupdt ( dt, w ); 
     19        } 
    1420        nu += w; 
    1521 
     
    7884mlnorm<ldmat>* ARX::predictor ( ) const { 
    7985        int dim = est.dimension(); 
    80         int dif = V.rows() - dim ;///<----------- TODO 
    81         bdm_assert_debug ( ( dif == 0 ) || ( dif == 1 ), "Give RVs do not match" ); 
    82  
     86         
    8387        mat mu ( dim, V.rows() - dim ); 
    8488        mat R ( dim, dim ); 
     
    9094        //correction for student-t  -- TODO check if correct!! 
    9195 
    92         if ( dif == 0 ) { // no constant term 
    93                 tmp->set_parameters ( mu, zeros ( dim ), ldmat ( R ) ); 
    94         } else { 
     96        if ( have_constant) { // constant term 
    9597                //Assume the constant term is the last one: 
    9698                tmp->set_parameters ( mu.get_cols ( 0, mu.cols() - 2 ), mu.get_col ( mu.cols() - 1 ), ldmat ( R ) ); 
     99        } else { 
     100                tmp->set_parameters ( mu, zeros ( dim ), ldmat ( R ) ); 
    97101        } 
    98102        return tmp; 
     
    101105mlstudent* ARX::predictor_student ( ) const { 
    102106        int dim = est.dimension(); 
    103         int dif = V.rows() - est.dimension();//-------------TODO 
    104         bdm_assert_debug ( ( dif == 0 ) || ( dif == 1 ), "Give RVs do not match" ); 
    105107 
    106108        mat mu ( dim, V.rows() - dim ); 
     
    117119 
    118120 
    119         if ( dif == 0 ) { // no constant term 
    120                 tmp->set_parameters ( mu, zeros ( xdim ), ldmat ( R ), Lam ); 
    121         } else { 
     121        if ( have_constant) { // no constant term 
    122122                //Assume the constant term is the last one: 
    123123                if ( mu.cols() > 1 ) { 
     
    126126                        tmp->set_parameters ( mat ( dim, 0 ), mu.get_col ( mu.cols() - 1 ), ldmat ( R ), Lam ); 
    127127                } 
     128        } else { 
     129                // no constant term 
     130                tmp->set_parameters ( mu, zeros ( xdim ), ldmat ( R ), Lam ); 
    128131        } 
    129132        return tmp; 
     
    203206 
    204207void ARX::from_setting ( const Setting &set ) { 
    205         shared_ptr<RV> yrv = UI::build<RV> ( set, "y", UI::compulsory ); 
     208        shared_ptr<RV> yrv = UI::build<RV> ( set, "rv", UI::compulsory ); 
    206209        shared_ptr<RV> rrv = UI::build<RV> ( set, "rgr", UI::compulsory ); 
    207210        int ylen = yrv->_dsize(); 
     211        // rgrlen - including constant!!! 
    208212        int rgrlen = rrv->_dsize(); 
    209  
     213         
     214        set_rv ( *yrv, *rrv ); 
     215         
    210216        string opt; 
    211217        if ( UI::get(opt, set,  "options", UI::optional) ) { 
    212218                BM::set_options(opt); 
    213219        } 
     220        if (!UI::get(have_constant, set, "constant", UI::optional)){ 
     221                have_constant=true; 
     222        } 
     223        if (have_constant) {rgrlen++;_dt=ones(rgrlen+ylen);} 
    214224 
    215225        //init 
    216226        mat V0; 
    217227        vec dV0; 
    218         if ( !UI::get ( dV0, set, "dV0" ) ) 
    219                 dV0 = concat ( 1e-3 * ones ( ylen ), 1e-5 * ones ( rgrlen ) ); 
    220         V0 = diag ( dV0 ); 
    221  
     228        if (!UI::get(V0, set, "V0",UI::optional)){ 
     229                if ( !UI::get ( dV0, set, "dV0" ) ) 
     230                        dV0 = concat ( 1e-3 * ones ( ylen ), 1e-5 * ones ( rgrlen ) ); 
     231                V0 = diag ( dV0 ); 
     232        } 
    222233        double nu0; 
    223234        if ( !UI::get ( nu0, set, "nu0" ) ) 
     
    230241        set_parameters ( frg ); 
    231242        set_statistics ( ylen, V0, nu0 ); 
    232         set_drv ( concat ( *yrv, *rrv ) ); 
    233  
     243         
    234244        //name results (for logging) 
    235         set_rv ( RV ( "{theta r }", vec_2 ( ylen*rgrlen, ylen*ylen ) ) ); 
    236  
    237 } 
    238  
    239 } 
     245        shared_ptr<RV> rv_par=UI::build<RV>(set, "rv_param",UI::optional ); 
     246        if (!rv_par){ 
     247                est.set_rv ( RV ( "{theta r }", vec_2 ( ylen*rgrlen, ylen*ylen ) ) ); 
     248        } else { 
     249                est.set_rv ( *rv_par ); 
     250        } 
     251        validate(); 
     252} 
     253 
     254}