aGrUM  0.16.0
gum::Chi2TestPolicy< GUM_SCALAR > Class Template Reference

<agrum/multidim/core/testPolicy/Chi2TestPolicy.h> More...

#include <Chi2TestPolicy.h>

+ Inheritance diagram for gum::Chi2TestPolicy< GUM_SCALAR >:
+ Collaboration diagram for gum::Chi2TestPolicy< GUM_SCALAR >:

Public Member Functions

 Chi2TestPolicy ()
 
virtual ~Chi2TestPolicy ()
 
void * operator new (size_t s)
 Allocators and Deallocators redefinition. More...
 
void operator delete (void *p)
 
const ContingencyTable< Idx, GUM_SCALAR > & ct () const
 
void add (const Chi2TestPolicy< GUM_SCALAR > &src)
 
std::string toString () const
 
Observation insertion
void addObservation (Idx attr, GUM_SCALAR value)
 Comptabilizes the new observation. More...
 
Test relevance
bool isTestRelevant () const
 Returns true if enough observation were made so that the test can be relevant. More...
 
Test result
void computeScore () const
 Recomputes the statistic from the beginning. More...
 
double score () const
 Returns the performance of current variable according to the test. More...
 
virtual double secondaryscore () const
 Returns a second criterion to severe ties. More...
 
Observation methods
Idx nbObservation () const
 Comptabilizes the new observation. More...
 
Fusion Methods
void add (const ITestPolicy< GUM_SCALAR > &src)
 

Protected Member Functions

bool _isModified () const
 

Detailed Description

template<typename GUM_SCALAR>
class gum::Chi2TestPolicy< GUM_SCALAR >

<agrum/multidim/core/testPolicy/Chi2TestPolicy.h>

Chi2TestPolicy implements a test policy that follows the Chi2 statistic

Definition at line 51 of file Chi2TestPolicy.h.

Constructor & Destructor Documentation

◆ Chi2TestPolicy()

template<typename GUM_SCALAR>
gum::Chi2TestPolicy< GUM_SCALAR >::Chi2TestPolicy ( )
inline

Definition at line 53 of file Chi2TestPolicy.h.

53  : ITestPolicy< GUM_SCALAR >(), __conTab(), __chi2Score(0) {
54  GUM_CONSTRUCTOR(Chi2TestPolicy);
55  }
ContingencyTable< Idx, GUM_SCALAR > __conTab
The contingency table used to keeps records of all observation.

◆ ~Chi2TestPolicy()

template<typename GUM_SCALAR>
virtual gum::Chi2TestPolicy< GUM_SCALAR >::~Chi2TestPolicy ( )
inlinevirtual

Definition at line 57 of file Chi2TestPolicy.h.

57 { GUM_DESTRUCTOR(Chi2TestPolicy); }

Member Function Documentation

◆ _isModified()

template<typename GUM_SCALAR>
bool gum::ITestPolicy< GUM_SCALAR >::_isModified ( ) const
inlineprotectedinherited

Definition at line 165 of file ITestPolicy.h.

References gum::ITestPolicy< GUM_SCALAR >::__isModified.

165 { return __isModified; }
bool __isModified
Booleans indicating if we have to re eval test.
Definition: ITestPolicy.h:169

◆ add() [1/2]

template<typename GUM_SCALAR >
void gum::Chi2TestPolicy< GUM_SCALAR >::add ( const Chi2TestPolicy< GUM_SCALAR > &  src)

Definition at line 102 of file Chi2TestPolicy_tpl.h.

References gum::ITestPolicy< GUM_SCALAR >::add(), and gum::Chi2TestPolicy< GUM_SCALAR >::ct().

Referenced by gum::Chi2TestPolicy< GUM_SCALAR >::ct().

102  {
104  __conTab += src.ct();
105  }
void add(const ITestPolicy< GUM_SCALAR > &src)
Definition: ITestPolicy.h:140
ContingencyTable< Idx, GUM_SCALAR > __conTab
The contingency table used to keeps records of all observation.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ add() [2/2]

template<typename GUM_SCALAR>
void gum::ITestPolicy< GUM_SCALAR >::add ( const ITestPolicy< GUM_SCALAR > &  src)
inlineinherited

Definition at line 140 of file ITestPolicy.h.

References gum::ITestPolicy< GUM_SCALAR >::__isModified, gum::ITestPolicy< GUM_SCALAR >::__nbObs, and gum::ITestPolicy< GUM_SCALAR >::nbObservation().

Referenced by gum::Chi2TestPolicy< GUM_SCALAR >::add(), gum::GTestPolicy< GUM_SCALAR >::add(), and gum::LeastSquareTestPolicy< GUM_SCALAR >::add().

140  {
141  __isModified = true;
142  __nbObs += src.nbObservation();
143  }
bool __isModified
Booleans indicating if we have to re eval test.
Definition: ITestPolicy.h:169
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ addObservation()

template<typename GUM_SCALAR >
void gum::Chi2TestPolicy< GUM_SCALAR >::addObservation ( Idx  attr,
GUM_SCALAR  value 
)
virtual

Comptabilizes the new observation.

Reimplemented from gum::ITestPolicy< GUM_SCALAR >.

Definition at line 45 of file Chi2TestPolicy_tpl.h.

References gum::ITestPolicy< GUM_SCALAR >::addObservation().

Referenced by gum::Chi2TestPolicy< GUM_SCALAR >::operator delete().

45  {
47  __conTab.add(iattr, ivalue);
48  }
virtual void addObservation(Idx attr, GUM_SCALAR value)
Comptabilizes the new observation.
Definition: ITestPolicy.h:90
void add(GUM_SCALAR_A valueA, GUM_SCALAR_B valueB)
Increments the number of sample for case( iattr, ivalue )
ContingencyTable< Idx, GUM_SCALAR > __conTab
The contingency table used to keeps records of all observation.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ computeScore()

template<typename GUM_SCALAR >
void gum::Chi2TestPolicy< GUM_SCALAR >::computeScore ( ) const
virtual

Recomputes the statistic from the beginning.

Reimplemented from gum::ITestPolicy< GUM_SCALAR >.

Definition at line 59 of file Chi2TestPolicy_tpl.h.

References gum::ITestPolicy< GUM_SCALAR >::computeScore().

Referenced by gum::Chi2TestPolicy< GUM_SCALAR >::isTestRelevant().

59  {
61  __chi2Score = 0;
62  for (auto attrIter = __conTab.attrABeginSafe();
63  attrIter != __conTab.attrAEndSafe();
64  ++attrIter) {
65  double semiExpected =
66  (double)(attrIter.val()) / (double)this->nbObservation();
67  for (auto valIter = __conTab.attrBBeginSafe();
68  valIter != __conTab.attrBEndSafe();
69  ++valIter) {
70  double cell = (double)__conTab.joint(attrIter.key(), valIter.key());
71  if (cell < 5) continue;
72  double expected = semiExpected * (double)(valIter.val());
73 
74  __chi2Score += std::pow(cell - expected, 2.0) / expected;
75  }
76  }
77  }
virtual void computeScore() const
Recomputes the statistic from the beginning.
Definition: ITestPolicy.h:117
HashTableConstIteratorSafe< GUM_SCALAR_B, Idx > attrBEndSafe() const
Increments the number of sample for case( iattr, ivalue )
Idx joint(GUM_SCALAR_A valueA, GUM_SCALAR_B valueB) const
Returns the number of samples for case (iattr, ivalue)
HashTableConstIteratorSafe< GUM_SCALAR_A, Idx > attrAEndSafe() const
Increments the number of sample for case( iattr, ivalue )
HashTableConstIteratorSafe< GUM_SCALAR_A, Idx > attrABeginSafe() const
Returns the number of samples for line iattr.
HashTableConstIteratorSafe< GUM_SCALAR_B, Idx > attrBBeginSafe() const
Returns the number of samples for column ivalue.
Idx nbObservation() const
Comptabilizes the new observation.
Definition: ITestPolicy.h:98
ContingencyTable< Idx, GUM_SCALAR > __conTab
The contingency table used to keeps records of all observation.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ct()

template<typename GUM_SCALAR>
const ContingencyTable< Idx, GUM_SCALAR >& gum::Chi2TestPolicy< GUM_SCALAR >::ct ( ) const
inline

Definition at line 121 of file Chi2TestPolicy.h.

References gum::Chi2TestPolicy< GUM_SCALAR >::__conTab, and gum::Chi2TestPolicy< GUM_SCALAR >::add().

Referenced by gum::Chi2TestPolicy< GUM_SCALAR >::add().

121 { return __conTab; }
ContingencyTable< Idx, GUM_SCALAR > __conTab
The contingency table used to keeps records of all observation.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isTestRelevant()

template<typename GUM_SCALAR>
bool gum::Chi2TestPolicy< GUM_SCALAR >::isTestRelevant ( ) const
inlinevirtual

Returns true if enough observation were made so that the test can be relevant.

Implements gum::ITestPolicy< GUM_SCALAR >.

Definition at line 91 of file Chi2TestPolicy.h.

References gum::Chi2TestPolicy< GUM_SCALAR >::__conTab, gum::ContingencyTable< GUM_SCALAR_A, GUM_SCALAR_B >::attrASize(), gum::Chi2TestPolicy< GUM_SCALAR >::computeScore(), gum::ITestPolicy< GUM_SCALAR >::nbObservation(), gum::Chi2TestPolicy< GUM_SCALAR >::score(), and gum::Chi2TestPolicy< GUM_SCALAR >::secondaryscore().

91  {
92  return (this->nbObservation() > 20
93  && this->nbObservation() > __conTab.attrASize() * 5);
94  }
Idx nbObservation() const
Comptabilizes the new observation.
Definition: ITestPolicy.h:98
Idx attrASize() const
Returns the number of samples for line iattr.
ContingencyTable< Idx, GUM_SCALAR > __conTab
The contingency table used to keeps records of all observation.
+ Here is the call graph for this function:

◆ nbObservation()

template<typename GUM_SCALAR>
Idx gum::ITestPolicy< GUM_SCALAR >::nbObservation ( ) const
inlineinherited

Comptabilizes the new observation.

Definition at line 98 of file ITestPolicy.h.

References gum::ITestPolicy< GUM_SCALAR >::__nbObs, and gum::ITestPolicy< GUM_SCALAR >::isTestRelevant().

Referenced by gum::ITestPolicy< GUM_SCALAR >::add(), gum::Chi2TestPolicy< GUM_SCALAR >::isTestRelevant(), gum::LeastSquareTestPolicy< GUM_SCALAR >::isTestRelevant(), and gum::GTestPolicy< GUM_SCALAR >::isTestRelevant().

98 { return __nbObs; }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ operator delete()

template<typename GUM_SCALAR>
void gum::Chi2TestPolicy< GUM_SCALAR >::operator delete ( void *  p)
inline

Definition at line 65 of file Chi2TestPolicy.h.

References gum::Chi2TestPolicy< GUM_SCALAR >::addObservation(), gum::SmallObjectAllocator::deallocate(), and gum::SmallObjectAllocator::instance().

65  {
67  }
void deallocate(void *pDeallocatedObject, const size_t &objectSize)
Deallocates an object.
static SmallObjectAllocator & instance()
+ Here is the call graph for this function:

◆ operator new()

template<typename GUM_SCALAR>
void* gum::Chi2TestPolicy< GUM_SCALAR >::operator new ( size_t  s)
inline

Allocators and Deallocators redefinition.

Definition at line 62 of file Chi2TestPolicy.h.

References gum::SmallObjectAllocator::allocate(), and gum::SmallObjectAllocator::instance().

62  {
64  }
void * allocate(const size_t &objectSize)
Allocates a block.
static SmallObjectAllocator & instance()
+ Here is the call graph for this function:

◆ score()

template<typename GUM_SCALAR >
double gum::Chi2TestPolicy< GUM_SCALAR >::score ( ) const
virtual

Returns the performance of current variable according to the test.

Implements gum::ITestPolicy< GUM_SCALAR >.

Definition at line 83 of file Chi2TestPolicy_tpl.h.

References gum::ChiSquare::probaChi2().

Referenced by gum::Chi2TestPolicy< GUM_SCALAR >::isTestRelevant(), and gum::Chi2TestPolicy< GUM_SCALAR >::toString().

83  {
84  if (this->_isModified()) computeScore();
85  double score =
86  1
88  __chi2Score, (__conTab.attrASize() - 1) * (__conTab.attrBSize() - 1));
89  return score;
90  }
Idx attrBSize() const
Returns the number of samples for column ivalue.
void computeScore() const
Recomputes the statistic from the beginning.
static double probaChi2(double x, Size df)
computes the probability of chi2 value (used by the cache)
Definition: chiSquare.cpp:118
double score() const
Returns the performance of current variable according to the test.
bool _isModified() const
Definition: ITestPolicy.h:165
Idx attrASize() const
Returns the number of samples for line iattr.
ContingencyTable< Idx, GUM_SCALAR > __conTab
The contingency table used to keeps records of all observation.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ secondaryscore()

template<typename GUM_SCALAR >
double gum::Chi2TestPolicy< GUM_SCALAR >::secondaryscore ( ) const
virtual

Returns a second criterion to severe ties.

Implements gum::ITestPolicy< GUM_SCALAR >.

Definition at line 96 of file Chi2TestPolicy_tpl.h.

Referenced by gum::Chi2TestPolicy< GUM_SCALAR >::isTestRelevant(), and gum::Chi2TestPolicy< GUM_SCALAR >::toString().

96  {
97  if (this->_isModified()) computeScore();
98  return __chi2Score;
99  }
void computeScore() const
Recomputes the statistic from the beginning.
bool _isModified() const
Definition: ITestPolicy.h:165
+ Here is the caller graph for this function:

◆ toString()

template<typename GUM_SCALAR>
std::string gum::Chi2TestPolicy< GUM_SCALAR >::toString ( ) const
inline

Definition at line 125 of file Chi2TestPolicy.h.

References gum::Chi2TestPolicy< GUM_SCALAR >::__conTab, gum::Chi2TestPolicy< GUM_SCALAR >::score(), gum::Chi2TestPolicy< GUM_SCALAR >::secondaryscore(), and gum::ContingencyTable< GUM_SCALAR_A, GUM_SCALAR_B >::toString().

125  {
126  std::stringstream ss;
127  ss << ITestPolicy< GUM_SCALAR >::toString()
128  << "\t\t\tContingency Table : " << std::endl
129  << __conTab.toString() << std::endl
130  << "\t\t\tGStat : " << this->score() << std::endl
131  << "\t\t\tGStat : " << this->secondaryscore() << std::endl;
132  return ss.str();
133  }
std::string toString() const
virtual double secondaryscore() const
Returns a second criterion to severe ties.
double score() const
Returns the performance of current variable according to the test.
ContingencyTable< Idx, GUM_SCALAR > __conTab
The contingency table used to keeps records of all observation.
+ Here is the call graph for this function:

Member Data Documentation

◆ __chi2Score

template<typename GUM_SCALAR>
double gum::Chi2TestPolicy< GUM_SCALAR >::__chi2Score
mutableprivate

Definition at line 139 of file Chi2TestPolicy.h.

◆ __conTab

template<typename GUM_SCALAR>
ContingencyTable< Idx, GUM_SCALAR > gum::Chi2TestPolicy< GUM_SCALAR >::__conTab
private

The contingency table used to keeps records of all observation.

Definition at line 137 of file Chi2TestPolicy.h.

Referenced by gum::Chi2TestPolicy< GUM_SCALAR >::ct(), gum::Chi2TestPolicy< GUM_SCALAR >::isTestRelevant(), and gum::Chi2TestPolicy< GUM_SCALAR >::toString().


The documentation for this class was generated from the following files: