OpenMS
LinearRegression.h
Go to the documentation of this file.
1 // Copyright (c) 2002-2023, The OpenMS Team -- EKU Tuebingen, ETH Zurich, and FU Berlin
2 // SPDX-License-Identifier: BSD-3-Clause
3 //
4 // --------------------------------------------------------------------------
5 // $Maintainer: Timo Sachsenberg $
6 // $Authors: $
7 // --------------------------------------------------------------------------
8 
9 #pragma once
10 
11 #include <OpenMS/CONCEPT/Types.h>
14 
15 #include <cmath>
16 #include <vector>
17 
18 
19 namespace OpenMS
20 {
21  namespace Math
22  {
39  class OPENMS_DLLAPI LinearRegression
40  {
41 public:
42 
45  intercept_(0),
46  slope_(0),
47  x_intercept_(0),
48  lower_(0),
49  upper_(0),
50  t_star_(0),
51  r_squared_(0),
52  stand_dev_residuals_(0),
53  mean_residuals_(0),
54  stand_error_slope_(0),
55  chi_squared_(0),
56  rsd_(0)
57  {
58  }
59 
61  virtual ~LinearRegression() = default;
62 
84  void computeRegression(double confidence_interval_P,
85  std::vector<double>::const_iterator x_begin,
86  std::vector<double>::const_iterator x_end,
87  std::vector<double>::const_iterator y_begin,
88  bool compute_goodness = true);
89 
112  void computeRegressionWeighted(double confidence_interval_P,
113  std::vector<double>::const_iterator x_begin,
114  std::vector<double>::const_iterator x_end,
115  std::vector<double>::const_iterator y_begin,
116  std::vector<double>::const_iterator w_begin,
117  bool compute_goodness = true);
118 
120  double getIntercept() const;
122  double getSlope() const;
124  double getXIntercept() const;
126  double getLower() const;
128  double getUpper() const;
130  double getTValue() const;
132  double getRSquared() const;
134  double getStandDevRes() const;
136  double getMeanRes() const;
138  double getStandErrSlope() const;
140  double getChiSquared() const;
142  double getRSD() const;
143 
145  static inline double computePointY(double x, double slope, double intercept)
146  {
147  return slope * x + intercept;
148  }
149 
150 protected:
151 
153  double intercept_;
155  double slope_;
157  double x_intercept_;
159  double lower_;
161  double upper_;
163  double t_star_;
165  double r_squared_;
173  double chi_squared_;
175  double rsd_;
176 
178  void computeGoodness_(const std::vector<double>& X, const std::vector<double>& Y, double confidence_interval_P);
179 
181  template <typename Iterator>
182  double computeChiSquare(Iterator x_begin, Iterator x_end, Iterator y_begin, double slope, double intercept);
183 
185  template <typename Iterator>
186  double computeWeightedChiSquare(Iterator x_begin, Iterator x_end, Iterator y_begin, Iterator w_begin, double slope, double intercept);
187 
188 private:
189 
194 
195  }; //class
196 
197  //x, y, w must be of same size
198  template <typename Iterator>
199  double LinearRegression::computeChiSquare(Iterator x_begin, Iterator x_end, Iterator y_begin, double slope, double intercept)
200  {
201  double chi_squared = 0.0;
202  Iterator xIter = x_begin;
203  Iterator yIter = y_begin;
204  for (; xIter != x_end; ++xIter, ++yIter)
205  {
206  chi_squared += std::pow(*yIter - computePointY(*xIter, slope, intercept), 2);
207  }
208 
209  return chi_squared;
210  }
211 
212  //x, y, w must be of same size
213  template <typename Iterator>
214  double LinearRegression::computeWeightedChiSquare(Iterator x_begin, Iterator x_end, Iterator y_begin, Iterator w_begin, double slope, double intercept)
215  {
216  double chi_squared = 0.0;
217  Iterator xIter = x_begin;
218  Iterator yIter = y_begin;
219  Iterator wIter = w_begin;
220  for (; xIter != x_end; ++xIter, ++yIter, ++wIter)
221  {
222  chi_squared += *wIter * std::pow(*yIter - computePointY(*xIter, slope, intercept), 2);
223  }
224 
225  return chi_squared;
226  }
227  } // namespace Math
228 } // namespace OpenMS
229 
230 
This class offers functions to perform least-squares fits to a straight line model,...
Definition: LinearRegression.h:40
void computeRegressionWeighted(double confidence_interval_P, std::vector< double >::const_iterator x_begin, std::vector< double >::const_iterator x_end, std::vector< double >::const_iterator y_begin, std::vector< double >::const_iterator w_begin, bool compute_goodness=true)
This function computes the best-fit linear regression coefficients of the model for the weighted da...
double r_squared_
The squared correlation coefficient (Pearson)
Definition: LinearRegression.h:165
double getRSquared() const
Non-mutable access to the squared Pearson coefficient.
double getIntercept() const
Non-mutable access to the y-intercept of the straight line.
double x_intercept_
The intercept of the fitted line with the x-axis.
Definition: LinearRegression.h:157
double getUpper() const
Non-mutable access to the upper border of confidence interval.
LinearRegression()
Constructor.
Definition: LinearRegression.h:44
double lower_
The lower bound of the confidence interval.
Definition: LinearRegression.h:159
virtual ~LinearRegression()=default
Destructor.
void computeRegression(double confidence_interval_P, std::vector< double >::const_iterator x_begin, std::vector< double >::const_iterator x_end, std::vector< double >::const_iterator y_begin, bool compute_goodness=true)
This function computes the best-fit linear regression coefficients of the model for the dataset .
double getXIntercept() const
Non-mutable access to the x-intercept of the straight line.
static double computePointY(double x, double slope, double intercept)
given x compute y = slope * x + intercept
Definition: LinearRegression.h:145
double upper_
The upper bound of the confidence interval.
Definition: LinearRegression.h:161
LinearRegression & operator=(const LinearRegression &arg)
Not implemented.
double computeWeightedChiSquare(Iterator x_begin, Iterator x_end, Iterator y_begin, Iterator w_begin, double slope, double intercept)
Compute the chi squared of a weighted linear fit.
Definition: LinearRegression.h:214
double t_star_
The value of the t-statistic.
Definition: LinearRegression.h:163
double getRSD() const
Non-mutable access to relative standard deviation.
double computeChiSquare(Iterator x_begin, Iterator x_end, Iterator y_begin, double slope, double intercept)
Compute the chi squared of a linear fit.
Definition: LinearRegression.h:199
double getTValue() const
Non-mutable access to the value of the t-distribution.
double getStandErrSlope() const
Non-mutable access to the standard error of the slope.
double getSlope() const
Non-mutable access to the slope of the straight line.
double getChiSquared() const
Non-mutable access to the chi squared value.
double chi_squared_
The value of the Chi Squared statistic.
Definition: LinearRegression.h:173
double intercept_
The intercept of the fitted line with the y-axis.
Definition: LinearRegression.h:153
double slope_
The slope of the fitted line.
Definition: LinearRegression.h:155
double getLower() const
Non-mutable access to the lower border of confidence interval.
void computeGoodness_(const std::vector< double > &X, const std::vector< double > &Y, double confidence_interval_P)
Computes the goodness of the fitted regression line.
double mean_residuals_
Mean of residuals.
Definition: LinearRegression.h:169
double stand_dev_residuals_
The standard deviation of the residuals.
Definition: LinearRegression.h:167
LinearRegression(const LinearRegression &arg)
Not implemented.
double rsd_
the relative standard deviation
Definition: LinearRegression.h:175
double getMeanRes() const
Non-mutable access to the residual mean.
double stand_error_slope_
The standard error of the slope.
Definition: LinearRegression.h:171
double getStandDevRes() const
Non-mutable access to the standard deviation of the residuals.
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:22