Changeset 629
- Timestamp:
- 09/18/09 00:17:11 (15 years ago)
- Location:
- library
- Files:
-
- 2 removed
- 6 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/stat/exp_family.cpp
r565 r629 17 17 this->bayes ( dt, 1.0 ); 18 18 }; 19 20 void egiw::set_parameters (int dimx0, ldmat V0, double nu0) { 21 dimx = dimx0; 22 nPsi = V0.rows() - dimx; 23 dim = dimx * (dimx + nPsi); // size(R) + size(Theta) 24 25 V = V0; 26 if (nu0 < 0) { 27 nu = 0.1 + nPsi + 2 * dimx + 2; // +2 assures finite expected value of R 28 // terms before that are sufficient for finite normalization 29 } else { 30 nu = nu0; 31 } 32 } 19 33 20 34 vec egiw::sample() const { … … 119 133 mat R; 120 134 mean_mat ( M, R ); 121 return c vectorize ( concat_vertical ( M,R ) );135 return concat( cvectorize ( M),cvectorize( R ) ); 122 136 } 123 137 … … 125 139 126 140 vec egiw::variance() const { 127 141 int l = V.rows(); 142 // cut out rest of lower-right part of V 143 const ldmat tmp ( V, linspace ( dimx, l - 1 ) ); 144 // invert it 145 ldmat itmp ( l ); 146 tmp.inv ( itmp ); 147 148 // following Wikipedia notation 149 // m=nu-nPsi-dimx-1, p=dimx 150 double mp1p=nu-nPsi-2*dimx; // m-p+1 151 double mp1m=mp1p-2; // m-p-1 152 128 153 if ( dimx == 1 ) { 129 int l = V.rows(); 130 const ldmat tmp ( V, linspace ( 1, l - 1 ) ); 131 ldmat itmp ( l ); 132 tmp.inv ( itmp ); 133 double cove = V._D() ( 0 ) / ( nu - nPsi - 2 * dimx - 2 ); 154 double cove = V._D() ( 0 ) / mp1m ; 134 155 135 156 vec var ( l ); 136 157 var.set_subvector ( 0, diag ( itmp.to_mat() ) *cove ); 137 var ( l - 1 ) = cove * cove / ( nu - nPsi - 2 * dimx - 2);158 var ( l - 1 ) = cove * cove / (mp1m-2); 138 159 return var; 139 160 } else { 140 bdm_error ( "not implemented" ); 141 return vec(); 161 ldmat Vll( V, linspace(0,dimx-1)); // top-left part of V 162 mat Y=Vll.to_mat(); 163 mat varY(Y.rows(), Y.cols()); 164 165 double denom = (mp1p-1)*mp1m*mp1m*(mp1m-2); // (m-p)(m-p-1)^2(m-p-3) 166 167 int i,j; 168 for ( i=0; i<Y.rows(); i++){ 169 for ( j=0; j<Y.cols(); j++){ 170 varY(i,j) = (mp1p*Y(i,j)*Y(i,j) + mp1m * Y(i,i)* Y(j,j)) /denom; 171 } 172 } 173 vec mean_dR = diag(Y)/mp1m; // corresponds to cove 174 vec var_th=diag ( itmp.to_mat() ); 175 vec var_Th ( mean_dR.length()*var_th.length() ); 176 // diagonal of diag(mean_dR) \kron diag(var_th) 177 for (int i=0; i<mean_dR.length(); i++){ 178 var_Th.set_subvector(i*var_th.length(), var_th*mean_dR(i)); 179 } 180 181 return concat(var_Th, cvectorize(varY)); 142 182 } 143 183 } -
library/bdm/stat/exp_family.h
r621 r629 217 217 egiw (int dimx0, ldmat V0, double nu0 = -1.0) : eEF() {set_parameters (dimx0, V0, nu0);}; 218 218 219 void set_parameters (int dimx0, ldmat V0, double nu0 = -1.0) { 220 dimx = dimx0; 221 nPsi = V0.rows() - dimx; 222 dim = dimx * (dimx + nPsi); // size(R) + size(Theta) 223 224 V = V0; 225 if (nu0 < 0) { 226 nu = 0.1 + nPsi + 2 * dimx + 2; // +2 assures finite expected value of R 227 // terms before that are sufficient for finite normalization 228 } else { 229 nu = nu0; 230 } 231 } 219 void set_parameters (int dimx0, ldmat V0, double nu0 = -1.0); 232 220 //!@} 233 221 -
library/tests/CMakeLists.txt
r607 r629 7 7 link_directories (./unittest-cpp) 8 8 9 SET(testutil_src e giw_harness.cpp egiw_harness.h epdf_harness.cpp epdf_harness.h mat_checks.cpp mat_checks.h9 SET(testutil_src epdf_harness.cpp epdf_harness.h mat_checks.cpp mat_checks.h 10 10 mpdf_harness.cpp mpdf_harness.h square_mat_point.cpp square_mat_point.h test_util.cpp test_util.h) 11 11 -
library/tests/arx_straux_test.cpp
r607 r629 5 5 6 6 TEST(test_arx_straux){ 7 mat A=" [0.8147 0.9134 0.2785;"7 mat A="0.8147 0.9134 0.2785;" 8 8 "0.9058 0.6324 0.5469;" 9 "0.1270 0.0975 0.9575 ]";9 "0.1270 0.0975 0.9575"; 10 10 11 mat B=" [0.9649 0.9572 0.1419;"11 mat B="0.9649 0.9572 0.1419;" 12 12 "0.1576 0.4854 0.4218;" 13 "0.9706 0.8003 0.9157 ]";13 "0.9706 0.8003 0.9157"; 14 14 //when updateing matrices do not forget to update CHECK_EQUAL below!!! 15 15 -
library/tests/egiw.cfg
r473 r629 1 1 data = ( 2 2 { 3 class = "e giw_harness";3 class = "epdf_harness"; 4 4 epdf = { 5 5 class = "egiw"; … … 13 13 }; 14 14 mean = [ 1.1, 0.1 ]; 15 lognc = 3.39463;16 15 variance = [ 0.01, 8e-05 ]; 17 16 support = ( "matrix", 2, 2, [ -2.0, 4.0, 0.01, 2.0 ] ); … … 20 19 }, 21 20 { 22 class = "e giw_harness";21 class = "epdf_harness"; 23 22 epdf = { 24 23 class = "egiw"; 25 V = ( "matrix", 2, 2, [ 20 .0, 8.0, 8.0, 4.0 ] );26 nu = 4 .0;24 V = ( "matrix", 2, 2, [ 200.0, 80.0, 80.0, 40.0 ] ); 25 nu = 40.0; 27 26 dimx = 1; 28 27 rv : … … 32 31 }; 33 32 }; 34 mean = [ 2, -4 ]; 35 lognc = 0.451583; 36 variance = [ -1, -16 ]; 33 mean = [2.0, 1.14286]; 34 variance = [0.0285714, 0.0395795]; 37 35 } ); 38 36 -
library/tests/egiw_test.cpp
r557 r629 5 5 #include "itpp_ext.h" 6 6 #include "epdf_harness.h" 7 #include "egiw_harness.h"8 7 #include "mat_checks.h" 9 8 #include "UnitTest++.h"