#ifndef _theplu_yat_statistics_ttest_
#define _theplu_yat_statistics_ttest_
// $Id: tTest.h 1145 2008-02-25 20:23:47Z peter $
/*
Copyright (C) 2004, 2005 Peter Johansson
Copyright (C) 2006 Jari Häkkinen, Markus Ringnér, Peter Johansson
Copyright (C) 2007 Peter Johansson
This file is part of the yat library, http://trac.thep.lu.se/yat
The yat library is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The yat library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#include "AveragerWeighted.h"
#include
namespace theplu {
namespace yat {
namespace statistics {
///
/// @brief Class for Student's t-test.
///
/// See
/// http://en.wikipedia.org/wiki/Student's_t-test for more
/// details on the t-test.
///
class tTest
{
public:
///
/// @brief Default Constructor.
///
tTest(void);
/**
Adding a data value to tTest.
*/
void add(double value, bool target, double weight=1.0);
/**
Calculates the t-score, i.e. the ratio between difference in
mean and standard deviation of this difference. The t-score is
calculated as
\f$ t = \frac{ m_x - m_y }{
s\sqrt{\frac{1}{n_x}+\frac{1}{n_y}}} \f$ where \f$ m \f$ is the
weighted mean, n is the weighted version of number of data
points \f$ \frac{\left(\sum w_i\right)^2}{\sum w_i^2} \f$, and
\f$ s^2 \f$ is an estimation of the variance \f$ s^2 = \frac{
\sum_i w_i(x_i-m_x)^2 + \sum_i w_i(y_i-m_y)^2 }{ n_x + n_y - 2
} \f$
\see AveragerWeighted
If all weights are equal to unity this boils down to
\f$ t = \frac{ m_x - m_y }
{s\sqrt{\frac{1}{n_x}+\frac{1}{n_y}}} \f$ where \f$ m \f$ is
the mean, \f$ n \f$ is the number of data points and \f$ s^2 =
\frac{ \sum_i (x_i-m_x)^2 + \sum_i (y_i-m_y)^2 }{ n_x + n_y - 2
} \f$
\see Averager
\return t-score.
*/
double score(void);
///
/// Calculates the p-value, i.e. the probability of observing a
/// t-score equally or larger if the null hypothesis is true. If P
/// is near zero, this casts doubt on this hypothesis. The null
/// hypothesis is that the means of the two distributions are
/// equal. Assumtions for this test is that the two distributions
/// are normal distributions with equal variance. The latter
/// assumtion is dropped in Welch's t-test.
///
/// @return the two-sided p-value
///
double p_value() const;
///
/// @return One-sided P-value
///
double p_value_one_sided(void) const;
private:
double dof_;
bool updated_;
double t_;
AveragerWeighted pos_;
AveragerWeighted neg_;
};
}}} // of namespace statistics, yat, and theplu
#endif