org.apache.commons.math.stat.regression

## Class AbstractMultipleLinearRegression

- java.lang.Object
- - org.apache.commons.math.stat.regression.AbstractMultipleLinearRegression

All Implemented Interfaces:
  MultipleLinearRegression

Direct Known Subclasses:
  GLSMultipleLinearRegression, OLSMultipleLinearRegression

    public abstract class AbstractMultipleLinearRegression
    extends java.lang.Object
    implements MultipleLinearRegression

Abstract base class for implementations of MultipleLinearRegression.

Since:
  2.0
Version:
  $Revision: 1073459 $ $Date: 2011-02-22 20:18:12 +0100 (mar. 22 févr. 2011) $

### Field Summary

Fields
`private boolean` `noIntercept` Whether or not the regression model includes an intercept.
`protected RealMatrix` `X` X sample data.
`protected RealVector` `Y` Y sample data.

### Constructor Summary

Constructors
Constructor and Description
`AbstractMultipleLinearRegression()`

### Method Summary

Methods
`protected abstract RealVector` `calculateBeta()` Calculates the beta of multiple linear regression in matrix notation.
`protected abstract RealMatrix` `calculateBetaVariance()` Calculates the beta variance of multiple linear regression in matrix notation.
`protected double` `calculateErrorVariance()` Calculates the variance of the error term.
`protected RealVector` `calculateResiduals()` Calculates the residuals of multiple linear regression in matrix notation.
`protected double` `calculateYVariance()` Calculates the variance of the y values.
`double` `estimateErrorVariance()` Estimates the variance of the error.
`double` `estimateRegressandVariance()` Returns the variance of the regressand, ie Var(y).
`double[]` `estimateRegressionParameters()` Estimates the regression parameters b.
`double[]` `estimateRegressionParametersStandardErrors()` Returns the standard errors of the regression parameters.
`double[][]` `estimateRegressionParametersVariance()` Estimates the variance of the regression parameters, ie Var(b).
`double` `estimateRegressionStandardError()` Estimates the standard error of the regression.
`double[]` `estimateResiduals()` Estimates the residuals, ie u = y - X*b.
`boolean` `isNoIntercept()`
`void` `newSampleData(double[] data, int nobs, int nvars)` Loads model x and y sample data from a flat input array, overriding any previous sample.
`protected void` `newXSampleData(double[][] x)` Loads new x sample data, overriding any previous data.
`protected void` `newYSampleData(double[] y)` Loads new y sample data, overriding any previous data.
`void` `setNoIntercept(boolean noIntercept)`
`protected void` `validateCovarianceData(double[][] x, double[][] covariance)` Validates that the x data and covariance matrix have the same number of rows and that the covariance matrix is square.
`protected void` `validateSampleData(double[][] x, double[] y)` Validates sample data.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### X

    protected RealMatrix X

X sample data.

#### Y

    protected RealVector Y

Y sample data.

#### noIntercept

    private boolean noIntercept

Whether or not the regression model includes an intercept. True means no intercept.

### Constructor Detail

#### AbstractMultipleLinearRegression

    public AbstractMultipleLinearRegression()

### Method Detail

#### isNoIntercept

    public boolean isNoIntercept()

Returns:
  true if the model has no intercept term; false otherwise
Since:
  2.2

#### setNoIntercept

    public void setNoIntercept(boolean noIntercept)

Parameters:
  `noIntercept` - true means the model is to be estimated without an intercept term
Since:
  2.2

#### newSampleData

    public void newSampleData(double[] data,
                     int nobs,
                     int nvars)

Loads model x and y sample data from a flat input array, overriding any previous sample.

Assumes that rows are concatenated with y values first in each row. For example, an input `data` array containing the sequence of values (1, 2, 3, 4, 5, 6, 7, 8, 9) with `nobs = 3` and `nvars = 2` creates a regression dataset with two independent variables, as below:

       y   x[0]  x[1]
       --------------
       1     2     3
       4     5     6
       7     8     9

Note that there is no need to add an initial unitary column (column of 1's) when specifying a model including an intercept term. If `isNoIntercept()` is `true`, the X matrix will be created without an initial column of "1"s; otherwise this column will be added.

Throws IllegalArgumentException if any of the following preconditions fail:

- `data` cannot be null
- `data.length = nobs * (nvars + 1)`
- `nobs > nvars`

Parameters:
  `data` - input data array
  `nobs` - number of observations (rows)
  `nvars` - number of independent variables (columns, not counting y)
Throws:
  `java.lang.IllegalArgumentException` - if the preconditions are not met

#### newYSampleData

    protected void newYSampleData(double[] y)

Loads new y sample data, overriding any previous data.

Parameters:
  `y` - the array representing the y sample
Throws:
  `java.lang.IllegalArgumentException` - if y is null or empty

#### newXSampleData

    protected void newXSampleData(double[][] x)

Loads new x sample data, overriding any previous data.

The input `x` array should have one row for each sample observation, with columns corresponding to independent variables. For example, if

      x = new double[][] {{1, 2}, {3, 4}, {5, 6}}

then `setXSampleData(x)` results in a model with two independent variables and 3 observations:

       x[0]  x[1]
       ----------
         1    2
         3    4
         5    6

Note that there is no need to add an initial unitary column (column of 1's) when specifying a model including an intercept term.

Parameters:
  `x` - the rectangular array representing the x sample
Throws:
  `java.lang.IllegalArgumentException` - if x is null, empty or not rectangular

#### validateSampleData

    protected void validateSampleData(double[][] x,
                          double[] y)

Validates sample data. Checks that

- Neither x nor y is null or empty;
- The length (i.e. number of rows) of x equals the length of y
- x has at least one more row than it has columns (i.e. there is sufficient data to estimate regression coefficients for each of the columns in x plus an intercept.

Parameters:
  `x` - the [n,k] array representing the x data
  `y` - the [n,1] array representing the y data
Throws:
  `java.lang.IllegalArgumentException` - if any of the checks fail

#### validateCovarianceData

    protected void validateCovarianceData(double[][] x,
                              double[][] covariance)

Validates that the x data and covariance matrix have the same number of rows and that the covariance matrix is square.

Parameters:
  `x` - the [n,k] array representing the x sample
  `covariance` - the [n,n] array representing the covariance matrix
Throws:
  `java.lang.IllegalArgumentException` - if the number of rows in x is not equal to the number of rows in covariance or covariance is not square.

#### estimateRegressionParameters

    public double[] estimateRegressionParameters()

Estimates the regression parameters b.

Specified by:
  `estimateRegressionParameters` in interface `MultipleLinearRegression`
Returns:
  The [k,1] array representing b

#### estimateResiduals

    public double[] estimateResiduals()

Estimates the residuals, ie u = y - X*b.

Specified by:
  `estimateResiduals` in interface `MultipleLinearRegression`
Returns:
  The [n,1] array representing the residuals

#### estimateRegressionParametersVariance

    public double[][] estimateRegressionParametersVariance()

Estimates the variance of the regression parameters, ie Var(b).

Specified by:
  `estimateRegressionParametersVariance` in interface `MultipleLinearRegression`
Returns:
  The [k,k] array representing the variance of b

#### estimateRegressionParametersStandardErrors

    public double[] estimateRegressionParametersStandardErrors()

Returns the standard errors of the regression parameters.

Specified by:
  `estimateRegressionParametersStandardErrors` in interface `MultipleLinearRegression`
Returns:
  standard errors of estimated regression parameters

#### estimateRegressandVariance

    public double estimateRegressandVariance()

Returns the variance of the regressand, ie Var(y).

Specified by:
  `estimateRegressandVariance` in interface `MultipleLinearRegression`
Returns:
  The double representing the variance of y

#### estimateErrorVariance

    public double estimateErrorVariance()

Estimates the variance of the error.

Returns:
  estimate of the error variance
Since:
  2.2

#### estimateRegressionStandardError

    public double estimateRegressionStandardError()

Estimates the standard error of the regression.

Returns:
  regression standard error
Since:
  2.2

#### calculateBeta

    protected abstract RealVector calculateBeta()

Calculates the beta of multiple linear regression in matrix notation.

Returns:
  beta

#### calculateBetaVariance

    protected abstract RealMatrix calculateBetaVariance()

Calculates the beta variance of multiple linear regression in matrix notation.

Returns:
  beta variance

#### calculateYVariance

    protected double calculateYVariance()

Calculates the variance of the y values.

Returns:
  Y variance

#### calculateErrorVariance

    protected double calculateErrorVariance()

Calculates the variance of the error term.

Uses the formula

     var(u) = u · u / (n - k)

where n and k are the row and column dimensions of the design matrix X.

Returns:
  error variance estimate
Since:
  2.2

#### calculateResiduals

    protected RealVector calculateResiduals()

Calculates the residuals of multiple linear regression in matrix notation.

     u = y - X * b

Returns:
  The residuals [n,1] matrix