John Pliam > Statistics-LSNoHistory > Statistics::LSNoHistory

Download:
Statistics-LSNoHistory-0.01.tgz

Dependencies

Annotate this POD

CPAN RT

New  1
Open  0
View/Report Bugs
Module Version: 0.01   Source  

NAME ^

Statistics::LSNoHistory - Least-Squares linear regression package without data history

SYNOPSIS ^

  # construct from points
  $reg = Statistics::LSNoHistory->new(points => [
    1.0 => 1.0,
    2.1 => 1.9,
    2.8 => 3.2,
    4.0 => 4.1,
    5.2 => 4.9
  ]);

  # other equivalent constructions
  $reg = Statistics::LSNoHistory->new(
    xvalues => [1.0, 2.1, 2.8, 4.0, 5.2],
    yvalues => [1.0, 1.9, 3.2, 4.1, 4.9]
  );
  # or
  $reg = Statistics::LSNoHistory->new;
  $reg->append_arrays(
    [1.0, 2.1, 2.8, 4.0, 5.2],
    [1.0, 1.9, 3.2, 4.1, 4.9]
  );
  # or
  $reg = Statistics::LSNoHistory->new;
  $reg->append_points(
    1.0 => 1.0, 2.1 => 1.9, 2.8 => 3.2, 4.0 => 4.1, 5.2 => 4.9
  );

  # You may also construct from the preliminary statistics of a 
  # previous regression:
  $reg = Statistics::LSNoHistory->new(
    num => 5,
    sumx => 15.1,
    sumy => 15.1,
    sumxx => 56.29,
    sumyy => 55.67,
    sumxy => 55.83,
    minx => 1.0,
    maxx => 5.2,
    miny => 1.0,
    maxy => 4.9
  );
  # thus a branch may be instantiated as follows
  $branch = Statistics::LSNoHistory->new(%{$reg->dump_stats});
  $reg->append_point(6.1, 5.9);
  $branch->append_point(5.8, 6.0);

  # calculate regression values, print some
  printf("Slope: %.2f\n", $reg->slope);
  printf("Intercept %.2f\n", $reg->intercept);
  printf("Correlation Coefficient: %.2f\n", $reg->pearson_r);
  ...

DESCRIPTION ^

This package provides standard least squares linear regression functionality without the need for storing the complete data history. Like any other, it finds best m,k (in least squares sense) so that y = m*x + k fits data points (x_1,y_1),...,(x_n,y_n).

In many applications involving linear regression, it is desirable to compute a regression based on the intermediate statistics of a previous regression along with any new data points. Thus there is no need to store a complete data history, but rather only a minimal set of intermediate statistics, the number of which, thanks to Gauss, is 6.

The user interface provides a way to instantiate a regression object with either raw data or previous intermediate statistics.

CONSTRUCTOR ARGUMENTS ^

The constructor (or class method new) takes several possible arguments. The initialization scenario depends on the kinds of arguments passed and falls into one of the following categories:

METHODS ^

*

append_point(x,y) process an additional data point.

*

append_points(x_1 => y_1,..., x_n => y_n) process additional data points, which is equivalent to calling append_point() n times.

*

append_arrays([x_1, x_2,..., x_n], [y_1, y_2,..., y_n]) process additional data points given a pair x and y data array references. Also equivalent to calling append_point() n times.

*

average_x returns the mean of the x values.

*

average_y returns the mean of the y values.

*

variance_x returns the (n-1)-style variance of the x values.

*

variance_y returns the (n-1)-style variance of the y values.

*

slope returns the slope m so that y = m*x + k is a least squares fit. Note that this is the least (y-y_avg)**2, and thus the standard slope.

*

intercept returns the intercept k so that y = m*x + k is a least squares fit. Note again that this is the least (y-y_avg)**2, and thus the standard intercept.

*

predict(x) predicts a y value, given an x value. Computes m*x + k, where m, k are the standard regression slope and intercept (->slope and ->intercept, respectively) for the most recent data.

*

slope_y returns the slope m' so that y = m'*x + k' is a least squares fit. Note that this is the least (x-x_avg)**2, and thus not the standard slope.

*

intercept_y returns the intercept k' so that y = m'*x + k' is a least squares fit. Note that this is the least (x-x_avg)**2, and thus not the standard intercept.

*

predict_x(y) predicts an x value given a y value. Computes m'*y + k', where m', k' are the regression (y-reletive) slope and intercept (->slope_y and ->intercept_y, respectively) for the most recent data.

*

pearson_r returns Pearson's r correlation coefficient.

*

chi_squared returns the chi squared statistic.

*

minimum_x returns the minimum x value

*

maximum_x returns the maximum x value

*

minimum_y returns the minimum y value

*

maximum_y returns the maximum y value

*

dump_stats returns a hash reference of the form

        { num => <val>,
          sumx => <val>,
          sumy => <val>,
          sumxx => <val>,
          sumyy => <val>,
          sumxy => <val>,
          minx => <val>,
          maxx => <val>,
          miny => <val>,
          maxy => <val> }

in other words, containing all the stats required by the final constructor above. This effectively dumps the regression history.

BUGS ^

This technique is more susceptible to roundoff errors than others which store the data. Extra care must be taken to scale the data before processing.

AUTHOR ^

John Pliam <pliam@cpan.org>

SEE ALSO ^

CPAN modules: Statistics::OLS, Statistics::Descriptive, Statistics::GaussHelmert, Statistics::Regression.

Any book on statistics, any handbook of mathematics, any comprehensive book on numerical algorithms.

Press et al, Numerical Recipes in L [L in {C,Fortran, ...}], Nth edition [N > 0], Cambridge Univ Press.

COPYING ^

See distribution file COPYING for complete information.

syntax highlighting: