# source:trunk/src/RegressionLinear.h@221

Last change on this file since 221 was 221, checked in by Peter, 18 years ago

interface to regression modified

• Property svn:eol-style set to native
• Property svn:keywords set to Author Date Id Revision
File size: 2.7 KB
Line
1// $Id: RegressionLinear.h 221 2004-12-30 22:36:25Z peter$
2
3#ifndef _theplu_statistics_regression_linear_
4#define _theplu_statistics_regression_linear_
5
6// C++ tools include
7/////////////////////
8#include "Regression.h"
9#include "vector.h"
10
11// Standard C++ includes
12////////////////////////
13#include <cmath>
14
15namespace theplu {
16namespace statistics {
17
18  ///
19  /// Class for Regression.
20  ///
21
22  class RegressionLinear : public Regression
23  {
24
25  public:
26    ///
27    /// Default Constructor.
28    ///
29    RegressionLinear(void);
30
31    ///
32    /// Copy Constructor. (not implemented)
33    ///
34    RegressionLinear(const RegressionLinear&);
35
36    ///
37    /// Destructor
38    ///
39    virtual ~RegressionLinear(void) {};
40
41    ///
42    /// @return the parameter \f$\alpha \f$
43    ///
44    inline double alpha(void) const { return alpha_; }
45
46    ///
47    /// @return standard deviation of parameter \f$\alpha \f$
48    ///
49    inline double alpha_var(void) const { return sqrt(alpha_var_); }
50
51    ///
52    /// @return the parameter \f$\beta 53 /// 54 inline double beta(void) const { return beta_; } 55 56 /// 57 /// @return standard devaition of parameter \f$ \beta \f$58 /// 59 inline double beta_var(void) const { return sqrt(beta_var_); } 60 61 /// 62 /// This function computes the best-fit linear regression 63 /// coefficients \f$ (\alpha, \beta)\f$of the model \f$ y =
64    /// \alpha + \beta (x-m_x) \f$from vectors \a x and \a y, by 65 /// minimizing \f$ \sum{(y_i - \alpha - \beta (x-m_x))^2} \f$. 66 /// 67 void fit(const gslapi::vector& x, const gslapi::vector& y) ; 68 69 /// 70 /// This function computes the best-fit linear regression 71 /// coefficients \f$ (\alpha, \beta)\f$of the model \f$ y =
72    /// \alpha + \beta (x-m_x) \f$from vectors \a x and \a y, by 73 /// minimizing \f$ \sum{w_i(y_i - \alpha - \beta (x-m_x))^2} \f\$.
74    ///
75    void fit(const gslapi::vector& x, const gslapi::vector& y,
76             const gslapi::vector& w);
77
78    ///
79    /// Function predicting value using the linear model. \a y_err is
80    /// the expected deviation from the line for a new data point. If
81    /// weights are used a weight can be specified for the new point.
82    ///
83    inline void predict(const double x, double& y, double& y_err,
84                        const double w=1.0) const
85    {
86      y = alpha_ + beta_ * (x-m_x_);
87      y_err = sqrt( alpha_var_+beta_var_*(x-m_x_)*(x-m_x_)+s2_/w );
88    }
89
90    ///
91    /// Function returning the coefficient of determination,
92    /// i.e. share of variance explained by the linear model.
93    ///
94    inline double r2(void) const { return r2_; }
95
96  private:
97    double alpha_;
98    double alpha_var_;
99    double beta_;
100    double beta_var_;
101    double m_x_; // average of x values
102    double s2_; // var(y|x)
103    double r2_; // coefficient of determination
104  };
105
106}} // of namespace statistics and namespace theplu
107
108#endif
109
Note: See TracBrowser for help on using the repository browser.