Last change
on this file since 430 was
430,
checked in by Peter, 18 years ago
|
changed interface of Regression::Local
|
-
Property svn:eol-style set to
native
-
Property svn:keywords set to
Author Date Id Revision
|
File size:
1.4 KB
|
Line | |
---|
1 | // $Id: Linear.cc 430 2005-12-08 22:53:08Z peter $ |
---|
2 | |
---|
3 | #include <c++_tools/statistics/Linear.h> |
---|
4 | |
---|
5 | #include <c++_tools/statistics/AveragerPair.h> |
---|
6 | #include <c++_tools/gslapi/vector.h> |
---|
7 | |
---|
8 | #include <gsl/gsl_fit.h> |
---|
9 | |
---|
10 | |
---|
11 | namespace theplu { |
---|
12 | namespace statistics { |
---|
13 | namespace regression { |
---|
14 | |
---|
15 | |
---|
16 | void Linear::fit(const gslapi::vector& x, const gslapi::vector& y) |
---|
17 | { |
---|
18 | ap_.reset(); |
---|
19 | for (size_t i=0; i<x.size(); i++) |
---|
20 | ap_.add(x(i),y(i)); |
---|
21 | |
---|
22 | alpha_ = ap_.y_averager().mean(); |
---|
23 | beta_ = ap_.covariance() / ap_.x_averager().variance(); |
---|
24 | |
---|
25 | // estimating the noise level, i.e. the conditional variance of y |
---|
26 | // given x, Var(y|x). |
---|
27 | double Q = (ap_.y_averager().sum_xsqr_centered() - ap_.sum_xy_centered() * |
---|
28 | ap_.sum_xy_centered()/ap_.x_averager().sum_xsqr_centered() ) ; |
---|
29 | s2_ = Q/(x.size()-2); |
---|
30 | r2_= 1; |
---|
31 | alpha_var_ = s2_ / x.size(); |
---|
32 | beta_var_ = s2_ / ap_.x_averager().sum_xsqr_centered(); |
---|
33 | m_x_ = ap_.x_averager().mean(); |
---|
34 | } |
---|
35 | |
---|
36 | void Linear::predict(const double x, double& y, double& y_err) const |
---|
37 | { |
---|
38 | y = alpha_ + beta_ * (x-m_x_); |
---|
39 | y_err = sqrt( alpha_var_+beta_var_*(x-m_x_)*(x-m_x_)+s2_ ); |
---|
40 | } |
---|
41 | |
---|
42 | std::ostream& Linear::print_header(std::ostream& s) const |
---|
43 | { |
---|
44 | s << "# column 1: x\n" |
---|
45 | << "# column 2: y\n" |
---|
46 | << "# column 3: y_err\n" |
---|
47 | << "# column 4: alpha\n" |
---|
48 | << "# column 5: alpha_err\n" |
---|
49 | << "# column 6: beta\n" |
---|
50 | << "# column 7: beta_err\n" |
---|
51 | << "# column 8: s2 (var(y|x))\n" |
---|
52 | << "# column 9: r2 (coefficient of determination)"; |
---|
53 | return s; |
---|
54 | } |
---|
55 | |
---|
56 | |
---|
57 | }}} // of namespaces regression, statisitcs and thep |
---|
Note: See
TracBrowser
for help on using the repository browser.