source: trunk/lib/statistics/LinearWeighted.h @ 495

Last change on this file since 495 was 495, checked in by Peter, 16 years ago

modified interface for Regression::Local

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 2.7 KB
Line 
1// $Id: LinearWeighted.h 495 2006-01-11 17:27:22Z peter $
2
3#ifndef _theplu_statistics_regression_linear_weighted_
4#define _theplu_statistics_regression_linear_weighted_
5
6#include <c++_tools/statistics/OneDimensionalWeighted.h>
7#include <c++_tools/gslapi/vector.h>
8
9#include <cmath>
10
11namespace theplu {
12namespace statistics { 
13namespace regression {
14
15  ///
16  /// @brief linear regression.   
17  ///
18  /// @todo document
19  ///
20  class LinearWeighted : public OneDimensionalWeighted
21  {
22 
23  public:
24    ///
25    /// Default Constructor.
26    ///
27    inline LinearWeighted(void)
28      : OneDimensionalWeighted(), alpha_(0), alpha_var_(0), beta_(0), 
29        beta_var_(0),
30        m_x_(0), s2_(0) {}
31
32    ///
33    /// Destructor
34    ///
35    inline virtual ~LinearWeighted(void) {};
36         
37    ///
38    /// @return the parameter \f$ \alpha \f$
39    ///
40    inline double alpha(void) const { return alpha_; }
41
42    ///
43    /// @return standard deviation of parameter \f$ \alpha \f$
44    ///
45    inline double alpha_err(void) const { return sqrt(alpha_var_); }
46
47    ///
48    /// @return the parameter \f$ \beta \f$
49    ///
50    inline double beta(void) const { return beta_; }
51
52    ///
53    /// @return standard deviation of parameter \f$ \beta \f$
54    ///
55    inline double beta_err(void) const { return sqrt(beta_var_); }
56   
57    ///
58    /// This function computes the best-fit linear regression
59    /// coefficients \f$ (\alpha, \beta)\f$ of the model \f$ y =
60    /// \alpha + \beta (x-m_x) \f$ from vectors \a x and \a y, by
61    /// minimizing \f$ \sum{w_i(y_i - \alpha - \beta (x-m_x))^2} \f$,
62    /// where \f$ m_x \f$ is the weighted average. By construction \f$
63    /// \alpha \f$ and \f$ \beta \f$ are independent.
64    ///
65    void fit(const gslapi::vector& x, const gslapi::vector& y,
66             const gslapi::vector& w);
67   
68    ///
69    /// Function predicting value using the linear model. \a y_err is
70    /// the estimated error of y(x)
71    ///
72    inline void predict(const double x, double& y, double& y_err, 
73                        const double w=1.0) 
74    { 
75      y = alpha_ + beta_ * (x-m_x_); 
76      y_err_ = y_err = sqrt( alpha_var_+beta_var_*(x-m_x_)*(x-m_x_)); 
77      x_=x;
78      y_=y;
79    }
80
81    ///
82    /// @return prediction value and parameters
83    ///
84    std::ostream& print(std::ostream&) const;
85             
86    ///
87    /// @return header for print()
88    ///
89    std::ostream& print_header(std::ostream&) const;
90
91    ///
92    /// Function returning the coefficient of determination,
93    /// i.e. fraction of variance explained by the linear model.
94    ///
95    inline double r2(void) const { return r2_; }
96
97  private:
98    ///
99    /// Copy Constructor. (not implemented)
100    ///
101    LinearWeighted(const LinearWeighted&);
102
103    double alpha_;
104    double alpha_var_;
105    double beta_;
106    double beta_var_;
107    double m_x_; // average of x values
108    double s2_; // var(y|x)
109    double r2_; // coefficient of determination
110  };
111
112}}} // of namespaces regression, statisitcs and thep
113
114#endif
Note: See TracBrowser for help on using the repository browser.