131 | | vec mean() const { |
132 | | int i; |
133 | | vec mu = zeros ( dim ); |
134 | | for ( i = 0; i < w.length(); i++ ) { |
135 | | mu += w ( i ) * Coms ( i )->mean(); |
136 | | } |
137 | | return mu; |
138 | | } |
139 | | vec variance() const { |
140 | | //non-central moment |
141 | | vec mom2 = zeros ( dim ); |
142 | | for ( int i = 0; i < w.length(); i++ ) { |
143 | | mom2 += w ( i ) * ( Coms ( i )->variance() + pow ( Coms ( i )->mean(), 2 ) ); |
144 | | } |
145 | | //central moment |
146 | | return mom2 - pow ( mean(), 2 ); |
147 | | } |
148 | | double evallog ( const vec &val ) const { |
149 | | int i; |
150 | | double sum = 0.0; |
151 | | for ( i = 0; i < w.length(); i++ ) { |
152 | | sum += w ( i ) * exp ( Coms ( i )->evallog ( val ) ); |
153 | | } |
154 | | if ( sum == 0.0 ) { |
155 | | sum = std::numeric_limits<double>::epsilon(); |
156 | | } |
157 | | double tmp = log ( sum ); |
158 | | bdm_assert_debug ( std::isfinite ( tmp ), "Infinite" ); |
159 | | return tmp; |
160 | | }; |
161 | | |
162 | | vec evallog_mat ( const mat &Val ) const { |
163 | | vec x = zeros ( Val.cols() ); |
164 | | for ( int i = 0; i < w.length(); i++ ) { |
165 | | x += w ( i ) * exp ( Coms ( i )->evallog_mat ( Val ) ); |
166 | | } |
167 | | return log ( x ); |
168 | | }; |
| 131 | |
| 132 | vec mean() const; |
| 133 | |
| 134 | vec variance() const; |
| 135 | |
| 136 | double evallog ( const vec &val ) const; |
| 137 | |
| 138 | vec evallog_mat ( const mat &Val ) const; |
336 | | double evallogcond ( const vec &val, const vec &cond ) { |
337 | | int i; |
338 | | double res = 0.0; |
339 | | for ( i = pdfs.length() - 1; i >= 0; i-- ) { |
340 | | /* if ( pdfs(i)->_rvc().count() >0) { |
341 | | pdfs ( i )->condition ( dls ( i )->get_cond ( val,cond ) ); |
342 | | } |
343 | | // add logarithms |
344 | | res += epdfs ( i )->evallog ( dls ( i )->pushdown ( val ) );*/ |
345 | | res += pdfs ( i )->evallogcond ( |
346 | | dls ( i )->pushdown ( val ), |
347 | | dls ( i )->get_cond ( val, cond ) |
348 | | ); |
349 | | } |
350 | | return res; |
351 | | } |
352 | | vec evallogcond_mat ( const mat &Dt, const vec &cond ) { |
353 | | vec tmp ( Dt.cols() ); |
354 | | for ( int i = 0; i < Dt.cols(); i++ ) { |
355 | | tmp ( i ) = evallogcond ( Dt.get_col ( i ), cond ); |
356 | | } |
357 | | return tmp; |
358 | | }; |
359 | | vec evallogcond_mat ( const Array<vec> &Dt, const vec &cond ) { |
360 | | vec tmp ( Dt.length() ); |
361 | | for ( int i = 0; i < Dt.length(); i++ ) { |
362 | | tmp ( i ) = evallogcond ( Dt ( i ), cond ); |
363 | | } |
364 | | return tmp; |
365 | | }; |
366 | | |
| 300 | double evallogcond ( const vec &val, const vec &cond ); |
| 301 | |
| 302 | vec evallogcond_mat ( const mat &Dt, const vec &cond ); |
| 303 | |
| 304 | vec evallogcond_mat ( const Array<vec> &Dt, const vec &cond ); |
443 | | vec mean() const { |
444 | | vec tmp ( dim ); |
445 | | for ( int i = 0; i < epdfs.length(); i++ ) { |
446 | | vec pom = epdfs ( i )->mean(); |
447 | | dls ( i )->pushup ( tmp, pom ); |
448 | | } |
449 | | return tmp; |
450 | | } |
451 | | vec variance() const { |
452 | | vec tmp ( dim ); //second moment |
453 | | for ( int i = 0; i < epdfs.length(); i++ ) { |
454 | | vec pom = epdfs ( i )->mean(); |
455 | | dls ( i )->pushup ( tmp, pow ( pom, 2 ) ); |
456 | | } |
457 | | return tmp - pow ( mean(), 2 ); |
458 | | } |
459 | | vec sample() const { |
460 | | vec tmp ( dim ); |
461 | | for ( int i = 0; i < epdfs.length(); i++ ) { |
462 | | vec pom = epdfs ( i )->sample(); |
463 | | dls ( i )->pushup ( tmp, pom ); |
464 | | } |
465 | | return tmp; |
466 | | } |
467 | | double evallog ( const vec &val ) const { |
468 | | double tmp = 0; |
469 | | for ( int i = 0; i < epdfs.length(); i++ ) { |
470 | | tmp += epdfs ( i )->evallog ( dls ( i )->pushdown ( val ) ); |
471 | | } |
472 | | bdm_assert_debug ( std::isfinite ( tmp ), "Infinite" ); |
473 | | return tmp; |
474 | | } |
| 381 | vec mean() const; |
| 382 | |
| 383 | vec variance() const; |
| 384 | |
| 385 | vec sample() const; |
| 386 | |
| 387 | double evallog ( const vec &val ) const; |
| 388 | |