Legend:
- Unmodified
- Added
- Removed
-
bdm/stat/emix.h
r224 r229 104 104 for ( i = 0;i < w.length();i++ ) {mu += w ( i ) * Coms ( i )->mean(); } 105 105 return mu; 106 } 107 vec variance() const { 108 //non-central moment 109 vec mom2 = zeros(rv.count()); 110 for ( int i = 0;i < w.length();i++ ) {mom2 += w ( i ) * pow(Coms ( i )->mean(),2); } 111 //central moment 112 return mom2-pow(mean(),2); 106 113 } 107 114 double evallog ( const vec &val ) const { … … 243 250 return tmp; 244 251 } 252 vec variance() const { 253 vec tmp ( rv.count() ); //second moment 254 for ( int i=0;i<epdfs.length();i++ ) { 255 vec pom = epdfs ( i )->mean(); 256 dls ( i )->fill_val ( tmp, pow(pom,2) ); 257 } 258 return tmp-pow(mean(),2); 259 } 245 260 vec sample() const { 246 261 vec tmp ( rv.count() ); -
bdm/stat/libBM.h
r225 r229 197 197 virtual vec mean() const =0; 198 198 199 //! return expected variance (not covariance!) 200 virtual vec variance() const = 0; 201 199 202 //! Destructor for future use; 200 203 virtual ~epdf() {}; -
bdm/stat/libEF.h
r225 r229 132 132 double lognc () const; 133 133 vec mean() const {return mu;} 134 vec variance() const {return diag(R.to_mat());} 134 135 // mlnorm<sq_T>* condition ( const RV &rvn ) const ; 135 136 mpdf* condition ( const RV &rvn ) const ; … … 192 193 vec sample() const; 193 194 vec mean() const; 195 vec variance() const{it_error("Not implemented"); return vec(0);}; 194 196 void mean_mat ( mat &M, mat&R ) const; 195 197 //! In this instance, val= [theta, r]. For multivariate instances, it is stored columnwise val = [theta_1 theta_2 ... r_1 r_2 ] … … 220 222 //!sufficient statistics 221 223 vec beta; 224 //!speedup variable 225 double gamma; 222 226 public: 223 227 //!Default constructor … … 226 230 eDirich ( const eDirich &D0 ) : eEF ( D0.rv ),beta ( D0.beta ) {}; 227 231 vec sample() const {it_error ( "Not implemented" );return vec_1 ( 0.0 );}; 228 vec mean() const {return beta/sum ( beta );}; 232 vec mean() const {return beta/gamma;}; 233 vec variance() const {return elem_mult(beta,(beta+1))/ (gamma*(gamma+1));} 229 234 //! In this instance, val is ... 230 235 double evallog_nn ( const vec &val ) const {double tmp; tmp=( beta-1 ) *log ( val ); it_assert_debug(std::isfinite(tmp),"Infinite value"); … … 248 253 } 249 254 beta= beta0; 255 gamma = sum(beta); 250 256 } 251 257 }; … … 327 333 //! Returns poiter to alpha and beta. Potentially dengerous: use with care! 328 334 void _param ( vec* &a, vec* &b ) {a=αb=β}; 329 vec mean() const {vec pom ( alpha ); pom/=beta; return pom;} 335 vec mean() const {return elem_div(alpha,beta);} 336 vec variance() const {return elem_div(alpha,elem_mult(beta,beta)); } 330 337 }; 331 338 … … 365 372 void _param ( vec* &a, vec* &b ) {a=alpha;b=beta;}; 366 373 vec mean() const {return elem_div(*beta,*alpha-1);} 374 vec variance() const {vec mea=mean(); return elem_div(elem_mult(mea,mea),*alpha-2);} 367 375 }; 368 376 /* … … 416 424 lnk = log ( nk ); 417 425 } 418 vec mean() const {vec pom=high; pom-=low; pom/=2.0; return pom;} 426 vec mean() const {return (high-low)/2.0;} 427 vec variance() const {return (pow(high,2)+pow(low,2)+elem_mult(high,low))/3.0;} 419 428 }; 420 429 … … 646 655 return pom; 647 656 } 657 vec variance() const { 658 vec pom=zeros ( rv.count() ); 659 for ( int i=0;i<n;i++ ) {pom+=pow(samples ( i ),2) *w ( i );} 660 return pom-pow(mean(),2); 661 } 648 662 }; 649 663