aGrUM 3.1.1
a C++ library for (probabilistic) graphical models
gum::learning::IndepTestG2 Class Reference

the class for computing G2 independence test scores More...

#include <agrum/BN/learning/scores/indepTestG2.h>

Inheritance diagram for gum::learning::IndepTestG2:
Collaboration diagram for gum::learning::IndepTestG2:

Public Member Functions

Constructors / Destructors
 IndepTestG2 (const DBRowGeneratorParser &parser, const Prior &external_prior, const std::vector< std::pair< std::size_t, std::size_t > > &ranges, const Bijection< NodeId, std::size_t > &nodeId2columns=Bijection< NodeId, std::size_t >())
 default constructor
 IndepTestG2 (const DBRowGeneratorParser &parser, const Prior &prior, const Bijection< NodeId, std::size_t > &nodeId2columns=Bijection< NodeId, std::size_t >())
 default constructor
 IndepTestG2 (const IndepTestG2 &from)
 copy constructor
 IndepTestG2 (IndepTestG2 &&from) noexcept
 move constructor
IndepTestG2clone () const override
 virtual copy constructor
 ~IndepTestG2 () override
 destructor
Operators
IndepTestG2operator= (const IndepTestG2 &from)
 copy operator
IndepTestG2operator= (IndepTestG2 &&from) noexcept
 move operator
std::pair< double, doublestatistics (NodeId var1, NodeId var2, const std::vector< NodeId > &rhs_ids={}) override
 get the pair <G2statistic,pvalue> for a test var1 indep var2 given rhs_ids
Accessors / Modifiers
void setNumberOfThreads (Size nb) override
 sets the number max of threads that can be used
Size getNumberOfThreads () const override
 returns the current max number of threads of the scheduler
bool isGumNumberOfThreadsOverriden () const override
 indicates whether the user set herself the number of threads
virtual void setMinNbRowsPerThread (const std::size_t nb) const
 changes the number min of rows a thread should process in a multithreading context
virtual std::size_t minNbRowsPerThread () const
 returns the minimum of rows that each thread should process
void setRanges (const std::vector< std::pair< std::size_t, std::size_t > > &new_ranges)
 sets new ranges to perform the counts
void clearRanges ()
 reset the ranges to the one range corresponding to the whole database
const std::vector< std::pair< std::size_t, std::size_t > > & ranges () const
 returns the current ranges
virtual void clear ()
 clears all the data structures from memory, including the cache
virtual void clearCache ()
 clears the current cache
virtual void useCache (const bool on_off)
 turn on/off the use of a cache of the previously computed score
const Bijection< NodeId, std::size_t > & nodeId2Columns () const
 return the mapping between the columns of the database and the node ids
const DatabaseTabledatabase () const
 return the database used by the score

Protected Member Functions

std::pair< double, doublestatistics_ (const IdCondSet &idset)
 compute the pair <G2 statistic,pvalue>
std::vector< doublemarginalize_ (const std::size_t node_2_marginalize, const std::size_t X_size, const std::size_t Y_size, const std::size_t Z_size, const std::vector< double > &N_xyz) const
 returns a counting vector where variables are marginalized from N_xyz
template<typename CellContribFn>
std::pair< double, doublecomputeStatistics_ (const IdCondSet &idset, CellContribFn cellContrib)
 shared loop for chi-squared-family statistics

Static Protected Member Functions

static Size degreesOfFreedom_ (std::size_t X_size, std::size_t Y_size, std::size_t Z_size=1, std::size_t n_skipped=0)
 returns the degrees of freedom for a chi2/G2 test X _|_ Y | Z

Protected Attributes

std::vector< std::size_t > _domain_sizes_
 the domain sizes of the variables (indexed by column id in the database)
const double one_log2_ {M_LOG2E}
 1 / log(2)
Priorprior_ {nullptr}
 the expert knowledge prior added to the contingency tables
RecordCounter counter_
 the record counter used for the counts over discrete variables
ScoringCache cache_
 the scoring cache
bool use_cache_ {true}
 a Boolean indicating whether we wish to use the cache
const std::vector< NodeIdempty_ids_
 an empty vector

Detailed Description

the class for computing G2 independence test scores

Definition at line 66 of file indepTestG2.h.

Constructor & Destructor Documentation

◆ IndepTestG2() [1/4]

gum::learning::IndepTestG2::IndepTestG2 ( const DBRowGeneratorParser & parser,
const Prior & external_prior,
const std::vector< std::pair< std::size_t, std::size_t > > & ranges,
const Bijection< NodeId, std::size_t > & nodeId2columns = BijectionNodeId, std::size_t >() )

default constructor

Parameters
parserthe parser used to parse the database
external_priorAn prior that we add to the computation of the score (this should come from expert knowledge): this consists in adding numbers to counts in the contingency tables
rangesa set of pairs {(X1,Y1),...,(Xn,Yn)} of database's rows indices. The counts are then performed only on the union of the rows [Xi,Yi), i in {1,...,n}. This is useful, e.g, when performing cross validation tasks, in which part of the database should be ignored. An empty set of ranges is equivalent to an interval [X,Y) ranging over the whole database.
nodeId2Columnsa mapping from the ids of the nodes in the graphical model to the corresponding column in the DatabaseTable parsed by the parser. This enables estimating from a database in which variable A corresponds to the 2nd column the parameters of a BN in which variable A has a NodeId of 5. An empty nodeId2Columns bijection means that the mapping is an identity, i.e., the value of a NodeId is equal to the index of the column in the DatabaseTable.
Warning
If nodeId2columns is not empty, then only the scores over the ids belonging to this bijection can be computed: applying method score() over other ids will raise exception NotFound.

References gum::learning::CachedContingencyCounter::ranges().

Referenced by IndepTestG2(), IndepTestG2(), clone(), operator=(), and operator=().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IndepTestG2() [2/4]

gum::learning::IndepTestG2::IndepTestG2 ( const DBRowGeneratorParser & parser,
const Prior & prior,
const Bijection< NodeId, std::size_t > & nodeId2columns = BijectionNodeId, std::size_t >() )

default constructor

Parameters
parserthe parser used to parse the database
priorAn prior that we add to the computation of the score
nodeId2Columnsa mapping from the ids of the nodes in the graphical model to the corresponding column in the DatabaseTable parsed by the parser. This enables estimating from a database in which variable A corresponds to the 2nd column the parameters of a BN in which variable A has a NodeId of 5. An empty nodeId2Columns bijection means that the mapping is an identity, i.e., the value of a NodeId is equal to the index of the column in the DatabaseTable.
Warning
If nodeId2columns is not empty, then only the scores over the ids belonging to this bijection can be computed: applying method score() over other ids will raise exception NotFound.

◆ IndepTestG2() [3/4]

gum::learning::IndepTestG2::IndepTestG2 ( const IndepTestG2 & from)

copy constructor

References IndepTestG2().

Here is the call graph for this function:

◆ IndepTestG2() [4/4]

gum::learning::IndepTestG2::IndepTestG2 ( IndepTestG2 && from)
noexcept

move constructor

References IndepTestG2().

Here is the call graph for this function:

◆ ~IndepTestG2()

gum::learning::IndepTestG2::~IndepTestG2 ( )
override

destructor

Member Function Documentation

◆ clear()

virtual void gum::learning::CachedContingencyCounter::clear ( )
virtualinherited

clears all the data structures from memory, including the cache

Reimplemented in gum::learning::KNML.

◆ clearCache()

virtual void gum::learning::CachedContingencyCounter::clearCache ( )
virtualinherited

clears the current cache

Reimplemented in gum::learning::KNML.

◆ clearRanges()

void gum::learning::CachedContingencyCounter::clearRanges ( )
inherited

reset the ranges to the one range corresponding to the whole database

◆ clone()

IndepTestG2 * gum::learning::IndepTestG2::clone ( ) const
nodiscardoverridevirtual

virtual copy constructor

Implements gum::learning::IndependenceTest.

References IndepTestG2().

Here is the call graph for this function:

◆ computeStatistics_()

template<typename CellContribFn>
std::pair< double, double > gum::learning::IndependenceTest::computeStatistics_ ( const IdCondSet & idset,
CellContribFn cellContrib )
protectedinherited

shared loop for chi-squared-family statistics

Handles counts, marginalisation, structural-zero detection and the final p-value. Only active cells (margX * margY != 0) are forwarded to cellContrib; sampling zeros must be handled inside the lambda. Signature: double cellContrib(double O, double margX, double margY, double total)

◆ database()

const DatabaseTable & gum::learning::CachedContingencyCounter::database ( ) const
inherited

return the database used by the score

◆ degreesOfFreedom_()

Size gum::learning::IndependenceTest::degreesOfFreedom_ ( std::size_t X_size,
std::size_t Y_size,
std::size_t Z_size = 1,
std::size_t n_skipped = 0 )
staticprotectedinherited

returns the degrees of freedom for a chi2/G2 test X _|_ Y | Z

Parameters
X_sizedomain size of X
Y_sizedomain size of Y
Z_sizeproduct of domain sizes of the conditioning variables (1 if no conditioning set)
n_skippednumber of cells excluded from the statistic sum because their expected count is zero (silent cells). Each such cell effectively removes one degree of freedom. The result is clamped to 1 to keep the distribution well-defined.

◆ getNumberOfThreads()

Size gum::learning::CachedContingencyCounter::getNumberOfThreads ( ) const
overridevirtualinherited

returns the current max number of threads of the scheduler

Implements gum::IThreadNumberManager.

◆ isGumNumberOfThreadsOverriden()

bool gum::learning::CachedContingencyCounter::isGumNumberOfThreadsOverriden ( ) const
overridevirtualinherited

indicates whether the user set herself the number of threads

Implements gum::IThreadNumberManager.

◆ marginalize_()

std::vector< double > gum::learning::IndependenceTest::marginalize_ ( const std::size_t node_2_marginalize,
const std::size_t X_size,
const std::size_t Y_size,
const std::size_t Z_size,
const std::vector< double > & N_xyz ) const
protectedinherited

returns a counting vector where variables are marginalized from N_xyz

Parameters
node_2_marginalizeindicates which node(s) shall be marginalized:
  • 0 means that X should be marginalized
  • 1 means that Y should be marginalized
  • 2 means that Z should be marginalized
X_sizethe domain size of variable X
Y_sizethe domain size of variable Y
Z_sizethe domain size of the set of conditioning variables Z
N_xyza counting vector of dimension X * Y * Z (in this order)

◆ minNbRowsPerThread()

virtual std::size_t gum::learning::CachedContingencyCounter::minNbRowsPerThread ( ) const
virtualinherited

returns the minimum of rows that each thread should process

◆ nodeId2Columns()

const Bijection< NodeId, std::size_t > & gum::learning::CachedContingencyCounter::nodeId2Columns ( ) const
inherited

return the mapping between the columns of the database and the node ids

Warning
An empty nodeId2Columns bijection means that the mapping is an identity, i.e., the value of a NodeId is equal to the index of the column in the DatabaseTable.

◆ operator=() [1/2]

IndepTestG2 & gum::learning::IndepTestG2::operator= ( const IndepTestG2 & from)

copy operator

References IndepTestG2().

Here is the call graph for this function:

◆ operator=() [2/2]

IndepTestG2 & gum::learning::IndepTestG2::operator= ( IndepTestG2 && from)
noexcept

move operator

References IndepTestG2().

Here is the call graph for this function:

◆ ranges()

const std::vector< std::pair< std::size_t, std::size_t > > & gum::learning::CachedContingencyCounter::ranges ( ) const
inherited

returns the current ranges

Referenced by CachedContingencyCounter(), gum::learning::IndependenceTest::IndependenceTest(), gum::learning::IndepTestChi2::IndepTestChi2(), gum::learning::IndepTestG2::IndepTestG2(), and gum::learning::KNML::KNML().

Here is the caller graph for this function:

◆ setMinNbRowsPerThread()

virtual void gum::learning::CachedContingencyCounter::setMinNbRowsPerThread ( const std::size_t nb) const
virtualinherited

changes the number min of rows a thread should process in a multithreading context

◆ setNumberOfThreads()

void gum::learning::CachedContingencyCounter::setNumberOfThreads ( Size nb)
overridevirtualinherited

sets the number max of threads that can be used

Implements gum::IThreadNumberManager.

◆ setRanges()

void gum::learning::CachedContingencyCounter::setRanges ( const std::vector< std::pair< std::size_t, std::size_t > > & new_ranges)
inherited

sets new ranges to perform the counts

◆ statistics()

std::pair< double, double > gum::learning::IndepTestG2::statistics ( NodeId var1,
NodeId var2,
const std::vector< NodeId > & rhs_ids = {} )
overridevirtual

get the pair <G2statistic,pvalue> for a test var1 indep var2 given rhs_ids

Implements gum::learning::IndependenceTest.

Referenced by gum::learning::IBNLearner::G2().

Here is the caller graph for this function:

◆ statistics_()

std::pair< double, double > gum::learning::IndepTestG2::statistics_ ( const IdCondSet & idset)
protected

compute the pair <G2 statistic,pvalue>

◆ useCache()

virtual void gum::learning::CachedContingencyCounter::useCache ( const bool on_off)
virtualinherited

turn on/off the use of a cache of the previously computed score

Reimplemented in gum::learning::KNML.

Member Data Documentation

◆ _domain_sizes_

std::vector< std::size_t > gum::learning::IndependenceTest::_domain_sizes_
protectedinherited

the domain sizes of the variables (indexed by column id in the database)

Definition at line 148 of file independenceTest.h.

◆ cache_

ScoringCache gum::learning::CachedContingencyCounter::cache_
protectedinherited

the scoring cache

Definition at line 171 of file cachedContingencyCounter.h.

◆ counter_

RecordCounter gum::learning::CachedContingencyCounter::counter_
protectedinherited

the record counter used for the counts over discrete variables

Definition at line 168 of file cachedContingencyCounter.h.

◆ empty_ids_

const std::vector< NodeId > gum::learning::CachedContingencyCounter::empty_ids_
protectedinherited

an empty vector

Definition at line 177 of file cachedContingencyCounter.h.

◆ one_log2_

const double gum::learning::CachedContingencyCounter::one_log2_ {M_LOG2E}
protectedinherited

1 / log(2)

Definition at line 162 of file cachedContingencyCounter.h.

162{M_LOG2E};
#define M_LOG2E
Definition math_utils.h:55

◆ prior_

Prior* gum::learning::CachedContingencyCounter::prior_ {nullptr}
protectedinherited

the expert knowledge prior added to the contingency tables

Definition at line 165 of file cachedContingencyCounter.h.

165{nullptr};

◆ use_cache_

bool gum::learning::CachedContingencyCounter::use_cache_ {true}
protectedinherited

a Boolean indicating whether we wish to use the cache

Definition at line 174 of file cachedContingencyCounter.h.

174{true};

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