Changeset 625 for library/bdm/estim/arx.cpp
- Timestamp:
- 09/18/09 00:17:05 (15 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/estim/arx.cpp
r585 r625 5 5 double lnc; 6 6 7 7 8 if ( frg < 1.0 ) { 8 9 est.pow ( frg ); … … 11 12 } 12 13 } 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 } 14 20 nu += w; 15 21 … … 78 84 mlnorm<ldmat>* ARX::predictor ( ) const { 79 85 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 83 87 mat mu ( dim, V.rows() - dim ); 84 88 mat R ( dim, dim ); … … 90 94 //correction for student-t -- TODO check if correct!! 91 95 92 if ( dif == 0 ) { // no constant term 93 tmp->set_parameters ( mu, zeros ( dim ), ldmat ( R ) ); 94 } else { 96 if ( have_constant) { // constant term 95 97 //Assume the constant term is the last one: 96 98 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 ) ); 97 101 } 98 102 return tmp; … … 101 105 mlstudent* ARX::predictor_student ( ) const { 102 106 int dim = est.dimension(); 103 int dif = V.rows() - est.dimension();//-------------TODO104 bdm_assert_debug ( ( dif == 0 ) || ( dif == 1 ), "Give RVs do not match" );105 107 106 108 mat mu ( dim, V.rows() - dim ); … … 117 119 118 120 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 122 122 //Assume the constant term is the last one: 123 123 if ( mu.cols() > 1 ) { … … 126 126 tmp->set_parameters ( mat ( dim, 0 ), mu.get_col ( mu.cols() - 1 ), ldmat ( R ), Lam ); 127 127 } 128 } else { 129 // no constant term 130 tmp->set_parameters ( mu, zeros ( xdim ), ldmat ( R ), Lam ); 128 131 } 129 132 return tmp; … … 203 206 204 207 void 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 ); 206 209 shared_ptr<RV> rrv = UI::build<RV> ( set, "rgr", UI::compulsory ); 207 210 int ylen = yrv->_dsize(); 211 // rgrlen - including constant!!! 208 212 int rgrlen = rrv->_dsize(); 209 213 214 set_rv ( *yrv, *rrv ); 215 210 216 string opt; 211 217 if ( UI::get(opt, set, "options", UI::optional) ) { 212 218 BM::set_options(opt); 213 219 } 220 if (!UI::get(have_constant, set, "constant", UI::optional)){ 221 have_constant=true; 222 } 223 if (have_constant) {rgrlen++;_dt=ones(rgrlen+ylen);} 214 224 215 225 //init 216 226 mat V0; 217 227 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 } 222 233 double nu0; 223 234 if ( !UI::get ( nu0, set, "nu0" ) ) … … 230 241 set_parameters ( frg ); 231 242 set_statistics ( ylen, V0, nu0 ); 232 set_drv ( concat ( *yrv, *rrv ) ); 233 243 234 244 //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 }