yat/regression/OneDimensional.h

Code
Comments
Other
Rev Date Author Line
681 11 Oct 06 jari 1 #ifndef _theplu_yat_regression_onedimensional_
681 11 Oct 06 jari 2 #define _theplu_yat_regression_onedimensional_
202 01 Nov 04 peter 3
616 31 Aug 06 jari 4 // $Id$
616 31 Aug 06 jari 5
675 10 Oct 06 jari 6 /*
831 27 Mar 07 peter 7   Copyright (C) 2004 Peter Johansson
4359 23 Aug 23 peter 8   Copyright (C) 2005, 2006 Jari Häkkinen, Peter Johansson
4359 23 Aug 23 peter 9   Copyright (C) 2007 Peter Johansson
4359 23 Aug 23 peter 10   Copyright (C) 2008 Jari Häkkinen, Peter Johansson
4359 23 Aug 23 peter 11   Copyright (C) 2011 Peter Johansson
429 08 Dec 05 peter 12
1437 25 Aug 08 peter 13   This file is part of the yat library, http://dev.thep.lu.se/yat
675 10 Oct 06 jari 14
675 10 Oct 06 jari 15   The yat library is free software; you can redistribute it and/or
675 10 Oct 06 jari 16   modify it under the terms of the GNU General Public License as
1486 09 Sep 08 jari 17   published by the Free Software Foundation; either version 3 of the
675 10 Oct 06 jari 18   License, or (at your option) any later version.
675 10 Oct 06 jari 19
675 10 Oct 06 jari 20   The yat library is distributed in the hope that it will be useful,
675 10 Oct 06 jari 21   but WITHOUT ANY WARRANTY; without even the implied warranty of
675 10 Oct 06 jari 22   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
675 10 Oct 06 jari 23   General Public License for more details.
675 10 Oct 06 jari 24
675 10 Oct 06 jari 25   You should have received a copy of the GNU General Public License
1487 10 Sep 08 jari 26   along with yat. If not, see <http://www.gnu.org/licenses/>.
675 10 Oct 06 jari 27 */
675 10 Oct 06 jari 28
682 11 Oct 06 jari 29 #include "yat/statistics/AveragerPair.h"
675 10 Oct 06 jari 30
2532 31 Jul 11 peter 31 #include <iosfwd>
202 01 Nov 04 peter 32
295 29 Apr 05 peter 33 namespace theplu {
680 11 Oct 06 jari 34 namespace yat {
616 31 Aug 06 jari 35 namespace utility {
1019 01 Feb 08 peter 36   class VectorBase;
295 29 Apr 05 peter 37 }
383 12 Aug 05 jari 38 namespace regression {
713 21 Dec 06 peter 39
202 01 Nov 04 peter 40   ///
4200 19 Aug 22 peter 41   /// @brief Interface Class for One Dimensional fitting.
202 01 Nov 04 peter 42   ///
697 25 Oct 06 peter 43   /// @see OneDimensionalWeighted.
389 15 Aug 05 peter 44   ///
4200 19 Aug 22 peter 45   class OneDimensional
713 21 Dec 06 peter 46   {
713 21 Dec 06 peter 47
713 21 Dec 06 peter 48   public:
713 21 Dec 06 peter 49     ///
713 21 Dec 06 peter 50     /// @brief The default constructor
713 21 Dec 06 peter 51     ///
703 18 Dec 06 jari 52     OneDimensional(void);
202 01 Nov 04 peter 53
383 12 Aug 05 jari 54     ///
703 18 Dec 06 jari 55     /// @brief The destructor
383 12 Aug 05 jari 56     ///
713 21 Dec 06 peter 57     virtual ~OneDimensional(void);
4200 19 Aug 22 peter 58
695 25 Oct 06 peter 59     /**
726 04 Jan 07 peter 60        @brief Chi-squared
4200 19 Aug 22 peter 61
4200 19 Aug 22 peter 62        Chi-squared is defined as the \f$
729 05 Jan 07 peter 63        \sum{(\hat{y_i}-y_i)^2} \f$
713 21 Dec 06 peter 64     */
729 05 Jan 07 peter 65     double chisq(void) const;
4200 19 Aug 22 peter 66
713 21 Dec 06 peter 67     /**
727 04 Jan 07 peter 68        This function computes the best-fit given a model (see specific
727 04 Jan 07 peter 69        class for details) by minimizing \f$ \sum{(\hat{y_i}-y_i)^2}
727 04 Jan 07 peter 70        \f$, where \f$ \hat{y} \f$ is the fitted value.
695 25 Oct 06 peter 71     */
4200 19 Aug 22 peter 72     virtual void fit(const utility::VectorBase& x,
4200 19 Aug 22 peter 73                      const utility::VectorBase& y)=0;
4200 19 Aug 22 peter 74
202 01 Nov 04 peter 75     ///
695 25 Oct 06 peter 76     /// @return expected value in @a x accrding to the fitted model
202 01 Nov 04 peter 77     ///
586 19 Jun 06 peter 78     virtual double predict(const double x) const=0;
4200 19 Aug 22 peter 79
695 25 Oct 06 peter 80     /**
727 04 Jan 07 peter 81        The prediction error is defined as the expected squared
727 04 Jan 07 peter 82        deviation a new data point will have from value the model
727 04 Jan 07 peter 83        provides: \f$ E(Y|x - \hat{y}(x))^2 \f$ and is typically
729 05 Jan 07 peter 84        divided into the conditional variance ( see s2() )
729 05 Jan 07 peter 85        given \f$ x \f$ and the squared standard error ( see
729 05 Jan 07 peter 86        standard_error2() ) of the model estimation in \f$ x \f$.
4200 19 Aug 22 peter 87
727 04 Jan 07 peter 88        @return expected squared prediction error for a new data point
727 04 Jan 07 peter 89        in @a x
695 25 Oct 06 peter 90     */
4200 19 Aug 22 peter 91     double prediction_error2(const double x) const;
586 19 Jun 06 peter 92
648 14 Sep 06 peter 93     ///
695 25 Oct 06 peter 94     /// @brief print output to ostream @a os
648 14 Sep 06 peter 95     ///
695 25 Oct 06 peter 96     /// Printing estimated model to @a os in the points defined by @a
695 25 Oct 06 peter 97     /// min, @a max, and @a n. The values printed for each point is
695 25 Oct 06 peter 98     /// the x-value, the estimated y-value, and the estimated standard
695 25 Oct 06 peter 99     /// deviation of a new data poiunt will have from the y-value
695 25 Oct 06 peter 100     /// given the x-value (see prediction_error()).
4200 19 Aug 22 peter 101     ///
702 26 Oct 06 peter 102     /// @param os Ostream printout is sent to
695 25 Oct 06 peter 103     /// @param n number of points printed
695 25 Oct 06 peter 104     /// @param min smallest x-value for which the model is printed
695 25 Oct 06 peter 105     /// @param max largest x-value for which the model is printed
695 25 Oct 06 peter 106     ///
4200 19 Aug 22 peter 107     std::ostream& print(std::ostream& os,const double min,
1271 09 Apr 08 peter 108                         double max, const unsigned int n) const;
586 19 Jun 06 peter 109
695 25 Oct 06 peter 110     /**
729 05 Jan 07 peter 111        r2 is defined as \f$ 1 - \frac{Var(Y|x)}{Var(Y)} \f$ or the
697 25 Oct 06 peter 112        fraction of the variance explained by the regression model.
729 05 Jan 07 peter 113
729 05 Jan 07 peter 114        @see s2()
697 25 Oct 06 peter 115     */
729 05 Jan 07 peter 116     double r2(void) const;
697 25 Oct 06 peter 117
697 25 Oct 06 peter 118     /**
4200 19 Aug 22 peter 119        \f$ E(Y|x - E(Y|x))^2 \f$
729 05 Jan 07 peter 120
729 05 Jan 07 peter 121        @return Conditional variance of Y
728 04 Jan 07 peter 122     */
728 04 Jan 07 peter 123     virtual double s2(void) const=0;
728 04 Jan 07 peter 124
728 04 Jan 07 peter 125     /**
727 04 Jan 07 peter 126        The standard error is defined as \f$ E(Y|x - \hat{y}(x))^2 \f$
695 25 Oct 06 peter 127
727 04 Jan 07 peter 128        @return expected squared error of model value in @a x
695 25 Oct 06 peter 129     */
727 04 Jan 07 peter 130     virtual double standard_error2(const double x) const=0;
586 19 Jun 06 peter 131
713 21 Dec 06 peter 132   protected:
295 29 Apr 05 peter 133     ///
702 26 Oct 06 peter 134     /// Variance of y
295 29 Apr 05 peter 135     ///
718 26 Dec 06 jari 136     double variance(void) const;
202 01 Nov 04 peter 137
648 14 Sep 06 peter 138     ///
702 26 Oct 06 peter 139     /// Averager for pair of x and y
648 14 Sep 06 peter 140     ///
702 26 Oct 06 peter 141     statistics::AveragerPair ap_;
697 25 Oct 06 peter 142
729 05 Jan 07 peter 143     ///
729 05 Jan 07 peter 144     /// @see chisq()
729 05 Jan 07 peter 145     ///
729 05 Jan 07 peter 146     double chisq_;
429 08 Dec 05 peter 147   };
429 08 Dec 05 peter 148
681 11 Oct 06 jari 149 }}} // of namespaces regression, yat, and theplu
202 01 Nov 04 peter 150
202 01 Nov 04 peter 151 #endif