aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
Chi2TestPolicy_tpl.h
Go to the documentation of this file.
1/****************************************************************************
2 * This file is part of the aGrUM/pyAgrum library. *
3 * *
4 * Copyright (c) 2005-2025 by *
5 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
6 * - Christophe GONZALES(_at_AMU) *
7 * *
8 * The aGrUM/pyAgrum library is free software; you can redistribute it *
9 * and/or modify it under the terms of either : *
10 * *
11 * - the GNU Lesser General Public License as published by *
12 * the Free Software Foundation, either version 3 of the License, *
13 * or (at your option) any later version, *
14 * - the MIT license (MIT), *
15 * - or both in dual license, as here. *
16 * *
17 * (see https://agrum.gitlab.io/articles/dual-licenses-lgplv3mit.html) *
18 * *
19 * This aGrUM/pyAgrum library is distributed in the hope that it will be *
20 * useful, but WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
21 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES MERCHANTABILITY or FITNESS *
22 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
26 * OTHER DEALINGS IN THE SOFTWARE. *
27 * *
28 * See LICENCES for more details. *
29 * *
30 * SPDX-FileCopyrightText: Copyright 2005-2025 *
31 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
32 * - Christophe GONZALES(_at_AMU) *
33 * SPDX-License-Identifier: LGPL-3.0-or-later OR MIT *
34 * *
35 * Contact : info_at_agrum_dot_org *
36 * homepage : http://agrum.gitlab.io *
37 * gitlab : https://gitlab.com/agrumery/agrum *
38 * *
39 ****************************************************************************/
40#pragma once
41
42
49// =========================================================================
51
52// =========================================================================
53
54
55namespace gum {
56
57
58 // ##########################################################################
59 //
60 // ##########################################################################
61
62 // ==========================================================================
63 //
64 // ==========================================================================
65 template < typename GUM_SCALAR >
66 void Chi2TestPolicy< GUM_SCALAR >::addObservation(Idx iattr, GUM_SCALAR ivalue) {
68 _conTab_.add(iattr, ivalue);
69 }
70
71 // ############################################################################
72 // @name Test result
73 // ############################################################################
74
75 // ============================================================================
76 // Computes the GStat of current variable according to the test
77 // ============================================================================
78 template < typename GUM_SCALAR >
81 _chi2Score_ = 0;
82 for (auto attrIter = _conTab_.attrABeginSafe(); attrIter != _conTab_.attrAEndSafe();
83 ++attrIter) {
84 double semiExpected = (double)(attrIter.val()) / (double)this->nbObservation();
85 for (auto valIter = _conTab_.attrBBeginSafe(); valIter != _conTab_.attrBEndSafe();
86 ++valIter) {
87 double cell = (double)_conTab_.joint(attrIter.key(), valIter.key());
88 if (cell < 5) continue;
89 double expected = semiExpected * (double)(valIter.val());
90
91 _chi2Score_ += std::pow(cell - expected, 2.0) / expected;
92 }
93 }
94 }
95
96 // ============================================================================
97 // Returns the performance of current variable according to the test
98 // ============================================================================
99 template < typename GUM_SCALAR >
101 if (this->isModified_()) computeScore();
102 double score = 1
104 (_conTab_.attrASize() - 1) * (_conTab_.attrBSize() - 1));
105 return score;
106 }
107
108 // ============================================================================
109 // Returns a second criterion to severe ties
110 // ============================================================================
111 template < typename GUM_SCALAR >
113 if (this->isModified_()) computeScore();
114 return _chi2Score_;
115 }
116
117 template < typename GUM_SCALAR >
122
123} // End of namespace gum
Headers of the Chi2TestPolicy.
ContingencyTable< Idx, GUM_SCALAR > _conTab_
The contingency table used to keeps records of all observation.
void addObservation(Idx attr, GUM_SCALAR value)
Comptabilizes the new observation.
void add(const Chi2TestPolicy< GUM_SCALAR > &src)
virtual double secondaryscore() const
Returns a second criterion to severe ties.
void computeScore() const
Recomputes the statistic from the beginning.
const ContingencyTable< Idx, GUM_SCALAR > & ct() const
double score() const
Returns the performance of current variable according to the test.
static double probaChi2(double x, Size df)
computes the probability of chi2 value (used by the cache)
Idx nbObservation() const
Comptabilizes the new observation.
virtual void computeScore() const
Recomputes the statistic from the beginning.
bool isModified_() const
virtual void addObservation(Idx attr, GUM_SCALAR value)
Comptabilizes the new observation.
void add(const ITestPolicy< GUM_SCALAR > &src)
Size Idx
Type for indexes.
Definition types.h:79
gum is the global namespace for all aGrUM entities
Definition agrum.h:46