All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions
GpCoreTools::LinearRegression Class Reference

Brief description of class still missing. More...

#include <LinearRegression.h>

List of all members.

Public Member Functions

double a () const
void add (double x, double y)
double at (double x) const
double b () const
int badValue (double deviation) const
bool calculate ()
unsigned int count () const
 LinearRegression ()
void remove (int i)
void reset ()
float stddev () const

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

{reset();}

Member Function Documentation

double GpCoreTools::LinearRegression::a ( ) const [inline]

Referenced by PPSBuffer::bytesAvailable().

{return _a;}
void GpCoreTools::LinearRegression::add ( double  x,
double  y 
)

Referenced by PPSBuffer::bytesAvailable().

  {
    if(_values.size()==0) { // Avoid big numbers on x
      _x0=x;
      x=0.0;
    } else {
      x-=_x0;
    }
    _sumX+=x;
    _sumY+=y;
    _sumXY+=x*y;
    _sumX2+=x*x;
    _values.push_back(std::pair<double, double>(x, y));
  }
double GpCoreTools::LinearRegression::at ( double  x) const [inline]

Referenced by PPSBuffer::bytesAvailable().

{return _a*(x-_x0)+_b;}
double GpCoreTools::LinearRegression::b ( ) const [inline]

Referenced by PPSBuffer::bytesAvailable().

{return _b;}
int GpCoreTools::LinearRegression::badValue ( double  deviation) const

Never returns an index greater that half of the size. It avoids rejecting values that have been just added.

Referenced by PPSBuffer::bytesAvailable().

  {
    int n=_values.size() >> 1;
    for(int i=0; i<n; i++) {
      const std::pair<double, double>& v=_values[i];
      double y=_a*v.first+_b;  // Already corrected by x0
      if(fabs(y-v.second)>deviation) {
        return i;
      }
    }
    return -1;
  }

Computes a and b. Returns false if line is vertical. In this case, equation is x=b.

Referenced by PPSBuffer::bytesAvailable().

  {
    double invn=1.0/_values.size();
    double denom=_sumX2-invn*_sumX*_sumX;
    if(denom!=0.0) {
      _a=(_sumXY-invn*_sumY*_sumX)/denom;
      _b=(invn*_sumY*_sumX2-invn*_sumXY*_sumX)/denom;
      return true;
    } else {
      _a=0.0;
      _b=_sumX*invn;
      return false;
    }
  }
unsigned int GpCoreTools::LinearRegression::count ( ) const [inline]

Referenced by PPSBuffer::bytesAvailable().

{return _values.size();}

Referenced by PPSBuffer::bytesAvailable().

  {
    unsigned int n=_values.size();
    std::pair<double, double>& v=_values[i];
    double x=v.first;
    double y=v.second;
    _sumX-=x;
    _sumY-=y;
    _sumXY-=x*y;
    _sumX2-=x*x;
    v=_values[n-1];
    _values.resize(n-1);
  }

Referenced by PPSBuffer::bytesAvailable().

  {
    _sumX=0.0;
    _sumY=0.0;
    _sumXY=0.0;
    _sumX2=0.0;
    _a=0.0;
    _b=0.0;
    _values.clear();
  }

Return the standard deviation around regression line. A and B must be computed.

References QGpCoreTools::sqrt().

Referenced by PPSBuffer::bytesAvailable().

  {
    double sum=0;
    double sum2=0;
    std::vector<std::pair<double, double> >::const_iterator it;
    for(it=_values.begin(); it!=_values.end(); it++) {
      double y=_a*it->first+_b;  // Already corrected by x0
      double dy=y-it->second;
      sum+=dy;
      sum2+=dy*dy;
    }
    double n=_values.size();
    double mean=sum/n;
    double stddev=(sum2-mean*mean*n)/(n-1);
    if(stddev<0.0) {
      return 0.0;
    } else {
      return sqrt(stddev);
    }
  }

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines