Changeset 229 for bdm/stat

Show
Ignore:
Timestamp:
01/15/09 10:53:54 (15 years ago)
Author:
smidl
Message:

epdf has a new function: variance()

Location:
bdm/stat
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • bdm/stat/emix.h

    r224 r229  
    104104                for ( i = 0;i < w.length();i++ ) {mu += w ( i ) * Coms ( i )->mean(); } 
    105105                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); 
    106113        } 
    107114        double evallog ( const vec &val ) const { 
     
    243250                return tmp; 
    244251        } 
     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        } 
    245260        vec sample() const { 
    246261                vec tmp ( rv.count() ); 
  • bdm/stat/libBM.h

    r225 r229  
    197197        virtual vec mean() const =0; 
    198198 
     199        //! return expected variance (not covariance!) 
     200        virtual vec variance() const = 0; 
     201         
    199202        //! Destructor for future use; 
    200203        virtual ~epdf() {}; 
  • bdm/stat/libEF.h

    r225 r229  
    132132        double lognc () const; 
    133133        vec mean() const {return mu;} 
     134        vec variance() const {return diag(R.to_mat());} 
    134135//      mlnorm<sq_T>* condition ( const RV &rvn ) const ; 
    135136        mpdf* condition ( const RV &rvn ) const ; 
     
    192193        vec sample() const; 
    193194        vec mean() const; 
     195        vec variance() const{it_error("Not implemented"); return vec(0);}; 
    194196        void mean_mat ( mat &M, mat&R ) const; 
    195197        //! In this instance, val= [theta, r]. For multivariate instances, it is stored columnwise val = [theta_1 theta_2 ... r_1 r_2 ] 
     
    220222        //!sufficient statistics 
    221223        vec beta; 
     224        //!speedup variable 
     225        double gamma; 
    222226public: 
    223227        //!Default constructor 
     
    226230        eDirich ( const eDirich &D0 ) : eEF ( D0.rv ),beta ( D0.beta ) {}; 
    227231        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));} 
    229234        //! In this instance, val is ... 
    230235        double evallog_nn ( const vec &val ) const {double tmp; tmp=( beta-1 ) *log ( val );            it_assert_debug(std::isfinite(tmp),"Infinite value"); 
     
    248253                } 
    249254                beta= beta0; 
     255                gamma = sum(beta); 
    250256        } 
    251257}; 
     
    327333        //! Returns poiter to alpha and beta. Potentially dengerous: use with care! 
    328334        void _param ( vec* &a, vec* &b ) {a=&alpha;b=&beta;}; 
    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)); } 
    330337}; 
    331338 
     
    365372                void _param ( vec* &a, vec* &b ) {a=alpha;b=beta;}; 
    366373                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);} 
    367375}; 
    368376/* 
     
    416424                lnk = log ( nk ); 
    417425        } 
    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;} 
    419428}; 
    420429 
     
    646655                return pom; 
    647656        } 
     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        } 
    648662}; 
    649663