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

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

• Property svn:eol-style set to native
• Property svn:keywords set to Author Date Id Revision
File size: 2.4 KB
Line
1// $Id: RegressionLinear.h 216 2004-12-29 09:29:54Z 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 <gsl/gsl_fit.h>
14
15namespace theplu {
16namespace statistics {
17
18  ///
19  /// Class for Regression.
20  ///
21
22
23  class RegressionLinear : public Regression
24  {
25
26  public:
27    ///
28    /// Default Constructor.
29    ///
30    RegressionLinear(void);
31
32    ///
33    /// Copy Constructor. (not implemented)
34    ///
35    RegressionLinear(const RegressionLinear&);
36
37    ///
38    /// Destructor
39    ///
40    virtual ~RegressionLinear(void) {};
41
42    inline void estimate(const double x, double& y, double& y_err) const
43    {
44      gsl_fit_linear_est(x, m_, k_, cov00_, cov01_, cov11_, &y, &y_err);
45    }
46
47    ///
48    /// This function computes the best-fit linear regression
49    /// coefficients (k,m) of the model  \f$y = kx + m \f$ from
50    /// vectors \a x and \a y, by minimizing \f$\sum{(kx_i+m-y_i)^2} 51 /// \f$.
52    ///
53    inline int fit(const gslapi::vector& x, const gslapi::vector& y)
54    {
55      return gsl_fit_linear(x.gsl_vector_pointer()->data,
56                            x.gsl_vector_pointer()->stride,
57                            y.gsl_vector_pointer()->data,
58                            y.gsl_vector_pointer()->stride,
59                            x.gsl_vector_pointer()->size,
60                            &m_, &k_, &cov00_, &cov01_, &cov11_, &sumsq_); }
61
62    inline double k(void) const { return k_; }
63    inline double m(void) const { return m_; }
64
65
66    ///
67    /// This function computes the best-fit linear regression
68    /// coefficients (k,m) of the model \f$y = kx + m \f$ from
69    /// vectors \a x and \a y, by minimizing \f$\sum w_i(kx_i+m-y_i)^2 70 /// \f$. The weight \f$w_i \f$ is the inverse of the variance for
71    /// \f$y_i \f$
72    ///
73    inline int fit_weighted(const gslapi::vector& x, const gslapi::vector& y,
74                            const gslapi::vector& w)
75    {
76      return gsl_fit_wlinear(x.gsl_vector_pointer()->data,
77                             x.gsl_vector_pointer()->stride,
78                             w.gsl_vector_pointer()->data,
79                             w.gsl_vector_pointer()->stride,
80                             y.gsl_vector_pointer()->data,
81                             y.gsl_vector_pointer()->stride,
82                             x.gsl_vector_pointer()->size,
83                             &m_, &k_,  &cov00_, &cov01_, &cov11_, &sumsq_); }
84
85
86  private:
87    double cov00_;
88    double cov01_;
89    double cov11_;
90    double k_;
91    double m_;
92
93  };
94
95}} // of namespace statistics and namespace theplu
96
97#endif
98
Note: See TracBrowser for help on using the repository browser.