- Timestamp:
- Dec 13, 2008, 1:23:39 AM (12 years ago)
- Location:
- trunk/yat/regression
- Files:
-
- 1 edited
- 4 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/yat/regression/CSpline.cc
r1637 r1643 2 2 3 3 /* 4 Copyright (C) 2004, 2005, 2006, 2007 Jari Häkkinen, Peter Johansson 5 Copyright (C) 2008 Peter Johansson 4 Copyright (C) 2008 Jari Häkkinen 6 5 7 6 This file is part of the yat library, http://dev.thep.lu.se/yat … … 21 20 */ 22 21 23 #include " Linear.h"24 #include "yat/statistics/AveragerPair.h" 25 #include "yat/utility/VectorBase.h"22 #include "CSpline.h" 23 24 #include <gsl/gsl_interp.h> 26 25 27 26 namespace theplu { … … 29 28 namespace regression { 30 29 31 Linear::Linear(void) 32 : OneDimensional(), alpha_(0), alpha_var_(0), beta_(0), beta_var_(0) 30 31 CSpline::CSpline(const utility::VectorConstView& x, 32 const utility::VectorConstView& y) 33 : GSLInterpolation(gsl_interp_cspline,x,y) 33 34 { 34 35 } 35 36 36 Linear::~Linear(void) 37 38 CSpline::~CSpline(void) 37 39 { 38 40 } 39 41 40 double Linear::alpha(void) const41 {42 return alpha_;43 }44 45 double Linear::alpha_var(void) const46 {47 return alpha_var_;48 }49 50 double Linear::beta(void) const51 {52 return beta_;53 }54 55 double Linear::beta_var(void) const56 {57 return beta_var_;58 }59 60 void Linear::fit(const utility::VectorBase& x, const utility::VectorBase& y)61 {62 ap_.reset();63 for (size_t i=0; i<x.size(); i++)64 ap_.add(x(i),y(i));65 66 alpha_ = ap_.y_averager().mean();67 beta_ = ap_.sum_xy_centered() / ap_.x_averager().sum_xx_centered();68 69 // calculating deviation between data and model70 chisq_ = (ap_.y_averager().sum_xx_centered() - ap_.sum_xy_centered()*71 ap_.sum_xy_centered()/ap_.x_averager().sum_xx_centered() );72 alpha_var_ = s2() / x.size();73 beta_var_ = s2() / ap_.x_averager().sum_xx_centered();74 }75 76 double Linear::predict(const double x) const77 {78 return alpha_ + beta_ * (x - ap_.x_averager().mean());79 }80 81 double Linear::s2(void) const82 {83 return chisq()/(ap_.n()-2);84 }85 86 double Linear::standard_error2(const double x) const87 {88 return alpha_var_+beta_var_*(x-ap_.x_averager().mean())*89 (x-ap_.x_averager().mean());90 }91 42 92 43 }}} // of namespaces regression, yat, and theplu -
trunk/yat/regression/CSpline.h
r1637 r1643 1 #ifndef _theplu_yat_regression_ linear_2 #define _theplu_yat_regression_ linear_1 #ifndef _theplu_yat_regression_cspline_ 2 #define _theplu_yat_regression_cspline_ 3 3 4 4 // $Id$ 5 5 6 6 /* 7 Copyright (C) 2004, 2005, 2006, 2007 Jari Häkkinen, Peter Johansson 8 Copyright (C) 2008 Peter Johansson 7 Copyright (C) 2008 Jari Häkkinen 9 8 10 9 This file is part of the yat library, http://dev.thep.lu.se/yat … … 24 23 */ 25 24 26 #include "OneDimensional.h" 27 28 #include <cmath> 25 #include "GSLInterpolation.h" 29 26 30 27 namespace theplu { 31 28 namespace yat { 32 33 class VectorBase;34 29 namespace utility { 30 class VectorConstView; 31 } 35 32 namespace regression { 36 33 37 34 /** 38 @brief linear regression. 39 40 Data are modeled as \f$ y_i = \alpha + \beta (x_i-m_x) + 41 \epsilon_i \f$. 35 @brief Documentation please. 42 36 */ 43 class Linear : public OneDimensional 44 { 45 46 public: 47 /// 48 /// @brief The default constructor 49 /// 50 Linear(void); 37 class CSpline : public GSLInterpolation 38 { 51 39 52 /// 53 /// @brief The destructor 54 /// 55 virtual ~Linear(void); 56 40 public: 57 41 /** 58 The parameter \f$ \alpha \f$ is estimated as \f$ 59 \frac{1}{n}\sum y_i \f$ 60 61 @return the parameter \f$ \alpha \f$ 42 @brief The default constructor 62 43 */ 63 double alpha(void) const; 44 CSpline(const utility::VectorConstView& x, 45 const utility::VectorConstView& y); 64 46 65 47 /** 66 The standard deviation is estimated as \f$ \sqrt{\frac{s^2}{n}} 67 \f$ where \f$ s^2 = \frac{\sum \epsilon^2}{n-2} \f$ 68 69 @return standard deviation of parameter \f$ \alpha \f$ 48 @brief The destructor 70 49 */ 71 double alpha_var(void) const;50 ~CSpline(void); 72 51 52 private: 73 53 /** 74 The parameter \f$ \beta \f$ is estimated as \f$ 75 \frac{\textrm{Cov}(x,y)}{\textrm{Var}(x)} \f$ 76 77 @return the parameter \f$ \beta \f$ 54 Copy Constructor. (not implemented) 78 55 */ 79 double beta(void) const;56 CSpline(const CSpline&); 80 57 81 /**82 The standard deviation is estimated as \f$ \frac{s^2}{\sum83 (x-m_x)^2} \f$ where \f$ s^2 = \frac{\sum \epsilon^2}{n-2} \f$84 85 @return standard deviation of parameter \f$ \beta \f$86 */87 double beta_var(void) const;88 89 /**90 Model is fitted by minimizing \f$ \sum{(y_i - \alpha - \beta91 (x-m_x))^2} \f$. By construction \f$ \alpha \f$ and \f$ \beta \f$92 are independent.93 */94 void fit(const utility::VectorBase& x, const utility::VectorBase& y) ;95 96 ///97 /// @return \f$ \alpha + \beta x \f$98 ///99 double predict(const double x) const;100 101 /**102 \f$ \frac{\sum \epsilon_i^2}{N-2} \f$103 104 @return variance of residuals105 */106 double s2(void) const;107 108 /**109 The error of the model is estimated as \f$110 \textrm{alpha\_err}^2+\textrm{beta\_err}^2*(x-m_x)*(x-m_x)\f$111 112 @return estimated error of model in @a x113 */114 double standard_error2(const double x) const;115 116 117 private:118 ///119 /// Copy Constructor. (not implemented)120 ///121 Linear(const Linear&);122 123 double alpha_;124 double alpha_var_;125 double beta_;126 double beta_var_;127 58 }; 128 59 -
trunk/yat/regression/GSLInterpolation.cc
r1637 r1643 2 2 3 3 /* 4 Copyright (C) 2004, 2005, 2006, 2007 Jari Häkkinen, Peter Johansson 5 Copyright (C) 2008 Peter Johansson 4 Copyright (C) 2008 Jari Häkkinen 6 5 7 6 This file is part of the yat library, http://dev.thep.lu.se/yat … … 21 20 */ 22 21 23 #include "Linear.h" 24 #include "yat/statistics/AveragerPair.h" 25 #include "yat/utility/VectorBase.h" 22 #include "GSLInterpolation.h" 23 24 #include "yat/utility/VectorConstView.h" 25 26 #include <cassert> 26 27 27 28 namespace theplu { … … 29 30 namespace regression { 30 31 31 Linear::Linear(void) 32 : OneDimensional(), alpha_(0), alpha_var_(0), beta_(0), beta_var_(0) 32 33 GSLInterpolation::GSLInterpolation(const gsl_interp_type* interpolator_type, 34 const utility::VectorConstView& x, 35 const utility::VectorConstView& y) 33 36 { 37 assert(x.size()==y.size()); 38 size_t size=x.size(); 39 x_=new double[size]; 40 y_=new double[size]; 41 for (size_t i=0; i<size; ++i) { 42 x_[i]=x(i); 43 y_[i]=y(i); 44 } 45 interpolator_=gsl_interp_alloc (interpolator_type, size); 46 gsl_interp_init(interpolator_, x_, y_, size); 47 accelerator_ = gsl_interp_accel_alloc(); 34 48 } 35 49 36 Linear::~Linear(void) 50 51 GSLInterpolation::~GSLInterpolation(void) 37 52 { 53 gsl_interp_free(interpolator_); 54 gsl_interp_accel_free(accelerator_); 55 delete x_; 56 delete y_; 38 57 } 39 58 40 double Linear::alpha(void) const 41 { 42 return alpha_; 59 60 double GSLInterpolation::evaluate(const double x) const 61 { 62 return gsl_interp_eval(interpolator_,x_,y_,x,accelerator_); 43 63 } 44 64 45 double Linear::alpha_var(void) const46 {47 return alpha_var_;48 }49 50 double Linear::beta(void) const51 {52 return beta_;53 }54 55 double Linear::beta_var(void) const56 {57 return beta_var_;58 }59 60 void Linear::fit(const utility::VectorBase& x, const utility::VectorBase& y)61 {62 ap_.reset();63 for (size_t i=0; i<x.size(); i++)64 ap_.add(x(i),y(i));65 66 alpha_ = ap_.y_averager().mean();67 beta_ = ap_.sum_xy_centered() / ap_.x_averager().sum_xx_centered();68 69 // calculating deviation between data and model70 chisq_ = (ap_.y_averager().sum_xx_centered() - ap_.sum_xy_centered()*71 ap_.sum_xy_centered()/ap_.x_averager().sum_xx_centered() );72 alpha_var_ = s2() / x.size();73 beta_var_ = s2() / ap_.x_averager().sum_xx_centered();74 }75 76 double Linear::predict(const double x) const77 {78 return alpha_ + beta_ * (x - ap_.x_averager().mean());79 }80 81 double Linear::s2(void) const82 {83 return chisq()/(ap_.n()-2);84 }85 86 double Linear::standard_error2(const double x) const87 {88 return alpha_var_+beta_var_*(x-ap_.x_averager().mean())*89 (x-ap_.x_averager().mean());90 }91 65 92 66 }}} // of namespaces regression, yat, and theplu -
trunk/yat/regression/GSLInterpolation.h
r1637 r1643 1 #ifndef _theplu_yat_regression_ linear_2 #define _theplu_yat_regression_ linear_1 #ifndef _theplu_yat_regression_gslinterpolation_ 2 #define _theplu_yat_regression_gslinterpolation_ 3 3 4 4 // $Id$ 5 5 6 6 /* 7 Copyright (C) 2004, 2005, 2006, 2007 Jari Häkkinen, Peter Johansson 8 Copyright (C) 2008 Peter Johansson 7 Copyright (C) 2008 Jari Häkkinen 9 8 10 9 This file is part of the yat library, http://dev.thep.lu.se/yat … … 24 23 */ 25 24 26 #include "OneDimensional.h" 27 28 #include <cmath> 25 #include <gsl/gsl_interp.h> 29 26 30 27 namespace theplu { 31 28 namespace yat { 32 33 class VectorBase;34 29 namespace utility { 30 class VectorConstView; 31 } 35 32 namespace regression { 36 33 37 34 /** 38 @brief linear regression. 39 40 Data are modeled as \f$ y_i = \alpha + \beta (x_i-m_x) + 41 \epsilon_i \f$. 35 @brief Documentation please. 42 36 */ 43 class Linear : public OneDimensional 44 { 45 46 public: 47 /// 48 /// @brief The default constructor 49 /// 50 Linear(void); 37 class GSLInterpolation 38 { 51 39 52 /// 53 /// @brief The destructor 54 /// 55 virtual ~Linear(void); 56 57 /** 58 The parameter \f$ \alpha \f$ is estimated as \f$ 59 \frac{1}{n}\sum y_i \f$ 60 61 @return the parameter \f$ \alpha \f$ 62 */ 63 double alpha(void) const; 40 public: 64 41 65 42 /** 66 The standard deviation is estimated as \f$ \sqrt{\frac{s^2}{n}} 67 \f$ where \f$ s^2 = \frac{\sum \epsilon^2}{n-2} \f$ 68 69 @return standard deviation of parameter \f$ \alpha \f$ 43 @brief Documentation please. 70 44 */ 71 double alpha_var(void) const; 45 double evaluate(const double x) const; 46 47 protected: 48 /** 49 @brief The default constructor 50 */ 51 GSLInterpolation(const gsl_interp_type*, const utility::VectorConstView& x, 52 const utility::VectorConstView& y); 72 53 73 54 /** 74 The parameter \f$ \beta \f$ is estimated as \f$ 75 \frac{\textrm{Cov}(x,y)}{\textrm{Var}(x)} \f$ 76 77 @return the parameter \f$ \beta \f$ 55 @brief The destructor 78 56 */ 79 double beta(void) const;57 virtual ~GSLInterpolation(void); 80 58 59 private: 81 60 /** 82 The standard deviation is estimated as \f$ \frac{s^2}{\sum 83 (x-m_x)^2} \f$ where \f$ s^2 = \frac{\sum \epsilon^2}{n-2} \f$ 61 Copy Constructor. (not implemented) 62 */ 63 GSLInterpolation(const GSLInterpolation&); 84 64 85 @return standard deviation of parameter \f$ \beta \f$ 86 */ 87 double beta_var(void) const; 88 89 /** 90 Model is fitted by minimizing \f$ \sum{(y_i - \alpha - \beta 91 (x-m_x))^2} \f$. By construction \f$ \alpha \f$ and \f$ \beta \f$ 92 are independent. 93 */ 94 void fit(const utility::VectorBase& x, const utility::VectorBase& y) ; 95 96 /// 97 /// @return \f$ \alpha + \beta x \f$ 98 /// 99 double predict(const double x) const; 100 101 /** 102 \f$ \frac{\sum \epsilon_i^2}{N-2} \f$ 103 104 @return variance of residuals 105 */ 106 double s2(void) const; 107 108 /** 109 The error of the model is estimated as \f$ 110 \textrm{alpha\_err}^2+\textrm{beta\_err}^2*(x-m_x)*(x-m_x)\f$ 111 112 @return estimated error of model in @a x 113 */ 114 double standard_error2(const double x) const; 115 116 117 private: 118 /// 119 /// Copy Constructor. (not implemented) 120 /// 121 Linear(const Linear&); 122 123 double alpha_; 124 double alpha_var_; 125 double beta_; 126 double beta_var_; 65 gsl_interp_accel* accelerator_; 66 gsl_interp* interpolator_; 67 double* x_; 68 double* y_; 127 69 }; 128 70 -
trunk/yat/regression/Makefile.am
r1493 r1643 5 5 # Copyright (C) 2006 Jari Häkkinen 6 6 # Copyright (C) 2007 Jari Häkkinen, Peter Johansson 7 # Copyright (C) 2008 Jari Häkkinen 7 8 # 8 9 # This file is part of the yat library, http://dev.thep.lu.se/yat … … 22 23 23 24 noinst_LTLIBRARIES = libregression.la 24 libregression_la_SOURCES = KernelBox.cc KernelTriCube.cc Linear.cc \ 25 libregression_la_SOURCES = CSpline.cc GSLInterpolation.cc KernelBox.cc \ 26 KernelTriCube.cc Linear.cc \ 25 27 LinearWeighted.cc Local.cc MultiDimensional.cc \ 26 28 MultiDimensionalWeighted.cc Naive.cc NaiveWeighted.cc \ … … 30 32 include_regressiondir = $(includedir)/yat/regression 31 33 32 include_regression_HEADERS = Kernel.h KernelBox.h KernelTriCube.h \ 34 include_regression_HEADERS = CSpline.h GSLInterpolation.h Kernel.h \ 35 KernelBox.h KernelTriCube.h \ 33 36 Linear.h LinearWeighted.h Local.h MultiDimensional.h \ 34 37 MultiDimensionalWeighted.h Naive.h NaiveWeighted.h \
Note: See TracChangeset
for help on using the changeset viewer.