Changeset 1004

Show
Ignore:
Timestamp:
05/27/10 13:08:44 (14 years ago)
Author:
smidl
Message:

mixtures do not have n

Location:
library/bdm/estim
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • library/bdm/estim/mixtures.cpp

    r943 r1004  
    88        //prepare sizes 
    99        Coms.set_size ( c ); 
    10         n = c; 
    1110        weights.set_parameters ( ones ( c ) ); //assume at least one observation in each comp. 
    1211        //est will be done at the end 
     
    2221 
    2322        //Copy it to the rest 
    24         for ( i = 1; i < n; i++ ) { 
     23        for ( i = 1; i < Coms.length(); i++ ) { 
    2524                //copy Com0 and create new rvs for them 
    2625                Coms ( i ) =  (BMEF*) Coms ( 0 )->_copy ( ); 
    2726        } 
    2827        //Pick some data for each component and update it 
    29         for ( i = 0; i < n; i++ ) { 
     28        for ( i = 0; i < Coms.length(); i++ ) { 
    3029                //pick one datum 
    3130                int ind = (int) floor ( ndat * UniRNG.sample() ); 
     
    4443        multiBM weights0 ( weights ); 
    4544 
     45        int n = Coms.length(); 
    4646        Array<BMEF*> Coms0 ( n ); 
    4747        for ( i = 0; i < n; i++ ) { 
     
    131131        vec w = weights.posterior().mean(); 
    132132        double exLL = 0.0; 
    133         for ( int i = 0; i < n; i++ ) { 
     133        for ( int i = 0; i < Coms.length(); i++ ) { 
    134134                exLL += w ( i ) * exp ( Coms ( i )->logpred ( yt ) ); 
    135135        } 
     
    138138 
    139139emix* MixEF::epredictor ( const vec &vec) const { 
    140         Array<shared_ptr<epdf> > pC ( n ); 
    141         for ( int i = 0; i < n; i++ ) { 
     140        Array<shared_ptr<epdf> > pC ( Coms.length() ); 
     141        for ( int i = 0; i < Coms.length(); i++ ) { 
    142142                pC ( i ) = Coms ( i )->epredictor ( ); 
    143143                pC (i) -> set_rv(_yrv()); 
     
    153153void MixEF::flatten ( const BMEF* M2 ) { 
    154154        const MixEF* Mix2 = dynamic_cast<const MixEF*> ( M2 ); 
    155         bdm_assert_debug ( Mix2->n == n, "Different no of coms" ); 
     155        bdm_assert_debug ( Mix2->Coms.length() == Coms.length(), "Different no of coms" ); 
    156156        //Flatten each component 
    157         for ( int i = 0; i < n; i++ ) { 
     157        for ( int i = 0; i < Coms.length(); i++ ) { 
    158158                Coms ( i )->flatten ( Mix2->Coms ( i ) ); 
    159159        } 
  • library/bdm/estim/mixtures.h

    r997 r1004  
    4343class MixEF: public BMEF { 
    4444protected: 
    45         //!Number of components 
    46         int n; 
    4745        //! Models for Components of \f$\theta_i\f$ 
    4846        Array<BMEF*> Coms; 
     
    5755                public: 
    5856                eprod_mix(const MixEF &m):mix(m){} 
    59                 const epdf* factor(int i) const {return (i==(mix.n-1)) ? &mix.weights.posterior() : &mix.Coms(i)->posterior();} 
    60                 const int no_factors()const {return mix.n+1;} 
     57                const epdf* factor(int i) const {return (i==(mix.Coms.length()-1)) ? &mix.weights.posterior() : &mix.Coms(i)->posterior();} 
     58                const int no_factors()const {return mix.Coms.length()+1;} 
    6159        } est; 
    6260        ////!indices of component rvc in common rvc 
     
    6866        //! Full constructor 
    6967        MixEF ( const Array<BMEF*> &Coms0, const vec &alpha0 ) : 
    70                         BMEF ( ), n ( Coms0.length() ), Coms ( n ), 
     68                        BMEF ( ), Coms ( Coms0.length() ), 
    7169                        weights (), est(*this), method ( QB ) { 
    72                 for ( int i = 0; i < n; i++ ) { 
     70                for ( int i = 0; i < Coms0.length(); i++ ) { 
    7371                        Coms ( i ) = ( BMEF* ) Coms0 ( i )->_copy(); 
    7472                } 
     
    7977        //! Constructor of empty mixture 
    8078        MixEF () : 
    81                         BMEF ( ), n ( 0 ), Coms ( 0 ), 
     79                        BMEF ( ), Coms ( 0 ), 
    8280                        weights (), est(*this), method ( QB ) { 
    8381        } 
    8482        //! Copy constructor 
    85         MixEF ( const MixEF &M2 ) : BMEF ( ), n ( M2.n ), Coms ( n ), 
     83        MixEF ( const MixEF &M2 ) : BMEF ( ),  Coms ( M2.Coms.length() ), 
    8684                        weights ( M2.weights ), est(*this), method ( M2.method ) { 
    87                 for ( int i = 0; i < n; i++ ) { 
     85                for ( int i = 0; i < M2.Coms.length(); i++ ) { 
    8886                        Coms ( i ) = (BMEF*) M2.Coms ( i )->_copy(); 
    8987                } 
     
    121119        } 
    122120 
    123         void to_setting ( Setting &set ) const { 
    124                 BMEF::to_setting( set ); 
    125                 UI::save ( Coms, set, "Coms" ); 
    126                 UI::save ( &weights, set, "weights" ); 
    127         } 
     121void to_setting ( Setting &set ) const { 
     122        BMEF::to_setting( set ); 
     123        UI::save ( Coms, set, "Coms" ); 
     124        UI::save ( &weights, set, "weights" ); 
     125} 
     126/*! \brief reads data from setting 
     127*/ 
     128void from_setting (const  Setting &set ) { 
     129        BMEF::from_setting( set ); 
     130        UI::get ( Coms, set, "Coms" ); 
     131        UI::get ( weights, set, "weights" ); 
     132} 
    128133}; 
    129134UIREGISTER ( MixEF );