Changeset 878
- Timestamp:
- 03/24/10 14:30:43 (15 years ago)
- Location:
- library
- Files:
-
- 7 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/estim/arx.cpp
r850 r878 239 239 bdm_assert ( pri->_V().rows() == dimy + rgrlen, "prior is not compatible" ); 240 240 est.set_parameters ( pri->_dimx(), pri->_V(), pri->_nu() ); 241 est.validate(); 241 242 } else { 242 243 est.set_parameters ( dimy, zeros ( dimy + rgrlen ) ); 244 est.validate(); 243 245 set_prior_default ( est ); 244 246 } … … 249 251 bdm_assert ( alt->_V().rows() == dimy + rgrlen, "alternative is not compatible" ); 250 252 alter_est.set_parameters ( alt->_dimx(), alt->_V(), alt->_nu() ); 253 alter_est.validate(); 251 254 } else { 252 255 alter_est = est; -
library/bdm/estim/arx.h
r850 r878 67 67 void set_statistics ( int dimy0, const ldmat V0, double nu0 = -1.0 ) { 68 68 est.set_parameters ( dimy0, V0, nu0 ); 69 est.validate(); 69 70 last_lognc = est.lognc(); 70 71 dimy = dimy0; … … 156 157 if (dV0.length()>prior._dimx()) 157 158 dV0.set_subvector ( prior._dimx(), dV0.length() - 1, 1e-5 ); 158 159 159 160 prior.set_parameters ( prior._dimx(), ldmat ( dV0 ) ); 161 prior.validate(); 160 162 } 161 163 -
library/bdm/stat/emix.cpp
r798 r878 126 126 void egiwmix::set_parameters ( const vec &w0, const Array<egiw*> &Coms0, bool copy ) { 127 127 w = w0 / sum ( w0 ); 128 dim = Coms0 ( 0 )->dimension();129 128 int i; 130 129 for ( i = 0; i < w.length(); i++ ) { … … 142 141 destroyComs = false; 143 142 } 143 } 144 145 void egiwmix::validate (){ 146 dim = Coms ( 0 )->dimension(); 144 147 } 145 148 -
library/bdm/stat/emix.h
r775 r878 207 207 //!By default Coms are copied inside. Parameter \c copy can be set to false if Coms live externally. Use method ownComs() if Coms should be destroyed by the destructor. 208 208 void set_parameters ( const vec &w, const Array<egiw*> &Coms, bool copy = false ); 209 209 210 210 //!return expected value 211 void validate(); 212 211 213 vec mean() const; 212 214 … … 341 343 epdfs = epdfs0;//.set_length ( epdfs0.length() ); 342 344 dls.set_length ( epdfs.length() ); 343 344 345 bool independent = true; 345 346 if ( named ) { … … 349 350 } 350 351 dim = rv._dsize(); 352 351 353 } else { 352 354 dim = 0; … … 369 371 } 370 372 } 371 } 372 373 374 } 375 376 373 377 vec mean() const; 374 378 … … 405 409 public: 406 410 //!Default constructor 407 mmix() : Coms ( 0 ) { } 408 411 mmix() : Coms ( 0 ) { }; 412 413 414 415 416 417 409 418 double evallogcond ( const vec &dt, const vec &cond ) { 410 419 double ll = 0.0; -
library/bdm/stat/exp_family.cpp
r850 r878 21 21 dimx = dimx0; 22 22 nPsi = V0.rows() - dimx; 23 dim = dimx * ( dimx + nPsi ); // size(R) + size(Theta)24 23 25 24 V = V0; … … 53 52 eWishartCh Omega; //inverse Wishart, result is R, 54 53 Omega.set_parameters ( iChLam, nu - 2*nPsi - dimx ); // 2*nPsi is there to match numercial simulations - check if analytically correct 54 Omega.validate(); 55 55 56 56 mat OmChi; … … 87 87 eWishartCh Omega; //inverse Wishart, result is R, 88 88 Omega.set_parameters ( iCh, nu - 2*nPsi - dimx ); // 2*nPsi is there to match numercial simulations - check if analytically correct 89 Omega.validate(); 89 90 90 91 chmat Omi; … … 420 421 k = k0; 421 422 iepdf.set_parameters ( k * ones ( beta0.length() ), beta0 ); 422 dimc = iepdf.dimension();423 dim = iepdf.dimension();424 423 } 425 424 … … 532 531 UI::get ( ref, set, "ref" , UI::compulsory ); 533 532 set_parameters ( set["k"], ref, set["l"] ); 533 validate(); 534 534 } 535 535 … … 538 538 UI::get ( mu0, set, "mu0", UI::compulsory ); 539 539 set_parameters ( mu0.length(), set["k"] ); 540 validate(); 540 541 condition ( mu0 ); 541 542 } -
library/bdm/stat/exp_family.h
r870 r878 369 369 egiw ( int dimx0, ldmat V0, double nu0 = -1.0 ) : eEF() { 370 370 set_parameters ( dimx0, V0, nu0 ); 371 validate(); 371 372 }; 372 373 … … 465 466 UI::get ( dV, set, "dV", UI::compulsory ); 466 467 set_parameters ( dimx, ldmat ( dV ), nu ); 468 validate(); 467 469 468 470 } else { 469 471 set_parameters ( dimx, V, nu ); 472 validate(); 470 473 } 471 474 } … … 479 482 480 483 void validate() { 481 // check sizes, rvs etc. 484 dim = dimx * ( dimx + nPsi ); 485 486 // check sizes, rvs etc. 482 487 // also check if RV are meaningful!!! 483 488 // meaningful = rv for theta and rv for r are split! … … 510 515 eDirich ( const eDirich &D0 ) : eEF () { 511 516 set_parameters ( D0.beta ); 517 validate(); 512 518 }; 513 519 eDirich ( const vec &beta0 ) { 514 520 set_parameters ( beta0 ); 521 validate(); 515 522 }; 516 523 void set_parameters ( const vec &beta0 ) { … … 718 725 egamma ( const vec &a, const vec &b ) { 719 726 set_parameters ( a, b ); 727 validate(); 720 728 }; 721 729 void set_parameters ( const vec &a, const vec &b ) { 722 730 alpha = a, beta = b; 723 dim = alpha.length();724 731 }; 725 732 //!@} … … 845 852 nk = prod ( 1.0 / distance ); 846 853 lnk = log ( nk ); 847 dim = low.length();848 854 } 849 855 //!@} … … 909 915 UI::get ( delta, set, "delta", UI::compulsory ); 910 916 mean = UI::build<fnc> ( set, "mean", UI::compulsory ); 911 912 917 iepdf.set_parameters ( -delta, delta ); 918 } 919 920 void validate(){ 913 921 dimc = mean->dimensionc(); 914 validate(); 915 } 922 iepdf.validate(); 923 } 924 916 925 }; 917 926 UIREGISTER ( mguni ); … … 935 944 mlnorm ( const mat &A, const vec &mu0, const sq_T &R ) : pdf_internal< TEpdf<sq_T> >() { 936 945 set_parameters ( A, mu0, R ); 946 validate(); 937 947 } 938 948 … … 942 952 A = A0; 943 953 mu_const = mu0; 944 this->dimc = A0.cols();945 } 954 } 955 946 956 //!@} 947 957 //! Set value of \c rvc . Result of this operation is stored in \c epdf use function \c _ep to access it. … … 1002 1012 bdm_assert ( A.rows() == mu_const.length(), "mlnorm: A vs. mu mismatch" ); 1003 1013 bdm_assert ( A.rows() == _R().rows(), "mlnorm: A vs. R mismatch" ); 1014 this->dimc = A.cols(); 1004 1015 1005 1016 } … … 1061 1072 void validate() { 1062 1073 bdm_assert ( g->dimension() == this->dimension(), "incompatible function" ); 1074 this->dim = g->dimension(); 1075 this->dimc = g->dimensionc(); 1076 this->iepdf.validate(); 1063 1077 } 1064 1078 }; … … 1202 1216 void set_parameters ( int len, double k0 ) { 1203 1217 k = k0; 1204 iepdf.set_parameters ( ( 1.0 / ( k*k ) + 2.0 ) *ones ( len ) /*alpha*/, ones ( len ) /*beta*/ ); 1218 iepdf.set_parameters ( ( 1.0 / ( k*k ) + 2.0 ) *ones ( len ) /*alpha*/, ones ( len ) /*beta*/ ); 1219 }; 1220 1221 void validate (){ 1222 iepdf.validate(); 1205 1223 dimc = dimension(); 1206 }; 1224 }; 1225 1207 1226 void condition ( const vec &val ) { 1208 1227 _beta = elem_mult ( val, ( _alpha - 1.0 ) ); … … 1235 1254 mgamma::set_parameters ( k0, ref0 ); 1236 1255 refl = pow ( ref0, 1.0 - l0 ); 1237 l = l0; 1256 l = l0; 1257 }; 1258 1259 void validate (){ 1260 mgamma::validate(); 1238 1261 dimc = dimension(); 1239 1262 }; … … 1273 1296 refl = pow ( ref0, 1.0 - l0 ); 1274 1297 l = l0; 1298 }; 1299 1300 void validate(){ 1301 migamma::validate(); 1275 1302 dimc = dimension(); 1276 1303 }; 1277 1304 1278 1305 void condition ( const vec &val ) { 1279 1306 vec mean = elem_mult ( refl, pow ( val, l ) ); … … 1349 1376 sig2 = 0.5 * log ( k * k + 1 ); 1350 1377 iepdf.set_parameters ( zeros ( size ), 2*sig2*eye ( size ) ); 1351 1352 dimc = size; 1353 }; 1378 }; 1379 1380 void validate(){ 1381 iepdf.validate(); 1382 dimc = iepdf.dimension(); 1383 } 1354 1384 1355 1385 void condition ( const vec &val ) { … … 1393 1423 Y = chmat ( Y0 ); 1394 1424 delta = delta0; 1395 p = Y.rows(); 1396 dim = p * p; 1425 p = Y.rows(); 1397 1426 } 1398 1427 //! Set internal structures … … 1401 1430 delta = delta0; 1402 1431 p = Y.rows(); 1432 } 1433 1434 virtual void validate (){ 1403 1435 dim = p * p; 1404 1436 } 1437 1405 1438 //! Sample matrix argument 1406 1439 mat sample_mat() const { … … 1470 1503 1471 1504 virtual void validate (){ 1472 dim = W.dimension(); 1505 W.validate(); 1506 dim = W.dimension(); 1473 1507 } 1474 1508 … … 1540 1574 l = l0; 1541 1575 refl = pow ( ref0, 1 - l ); 1542 1543 1576 iepdf.set_parameters ( eye ( p ), delta ); 1577 }; 1578 1579 void validate(){ 1580 iepdf.validate(); 1544 1581 dimc = iepdf.dimension(); 1545 1582 } 1583 1546 1584 void condition ( const vec &c ) { 1547 1585 vec z = c; … … 1841 1879 void mgnorm<sq_T >::set_parameters ( const shared_ptr<fnc> &g0, const sq_T &R0 ) { 1842 1880 g = g0; 1843 this->dim = g->dimension();1844 this->dimc = g->dimensionc();1845 1881 this->iepdf.set_parameters ( zeros ( g->dimension() ), R0 ); 1846 1882 } -
library/tests/testsuite/epdf_test.cpp
r802 r878 13 13 14 14 TEST ( enorm_test ) { 15 epdf_harness::test_config ( "enorm.cfg" ); 15 epdf_harness::test_config ( "enorm.cfg" ); 16 16 } 17 17 … … 22 22 // not using epdf_harness because eprod isn't configurable (yet?) 23 23 TEST ( eprod_test ) { 24 24 25 25 RV a ( "{eprod_a }", "1" ); 26 26 RV b ( "{eprod_b }", "2" ); 27 27 28 28 egamma_ptr g0; 29 29 g0->set_parameters ( vec ( "2" ), vec ( "2" ) ); 30 g0->validate(); 30 31 g0->set_rv ( a ); 31 32 32 33 egamma_ptr g1; 33 34 g1->set_parameters ( vec ( "100000 10000" ), vec ( "10000 1000" ) ); 35 g1->validate(); 34 36 g1->set_rv ( b ); 35 37 36 38 Array<const epdf*> coms ( 2 ); 37 39 coms ( 0 ) = g0.get(); 38 40 coms ( 1 ) = g1.get(); 39 41 40 42 eprod p; 41 43 // set_parameters doesn't say so, but it actually requires 42 44 // pointers in the array to outlast the eprod instance... 43 45 p.set_parameters ( coms ); 44 46 45 47 CHECK_EQUAL ( vec ( "1 10 10" ), p.mean() ); 46 48 CHECK_EQUAL ( vec ( "0 0 0" ), p.variance() ); … … 51 53 eWishartCh eW; 52 54 eW.set_parameters ( wM / 100, 100 ); 55 eW.validate(); 53 56 mat mea = zeros ( 2, 2 ); 54 57 mat Ch; … … 57 60 mea += Ch.T() * Ch; 58 61 } 59 62 60 63 mat actual = mea / 100; 61 64 CHECK_CLOSE ( wM, actual, 0.1 ); … … 77 80 78 81 } 79 82 80 83 mat observed ( "0.99464 0.885458; 0.885458 1.01853" ); 81 84 mat actual = mea / 100;