UpdatingMultipleLinearRegression interface.
The algorithm is described in:
Algorithm AS 274: Least Squares Routines to Supplement Those of Gentleman Author(s): Alan J. Miller Source: Journal of the Royal Statistical Society. Series C (Applied Statistics), Vol. 41, No. 2 (1992), pp. 458-478 Published by: Blackwell Publishing for the Royal Statistical Society Stable URL: http://www.jstor.org/stable/2347583
This method for multiple regression forms the solution to the OLS problem by updating the QR decomposition as described by Gentleman.
| Modifier and Type | Field and Description |
|---|---|
| private final double[] | d
diagonals of cross products matrix |
| private final double | epsilon
zero tolerance |
| private boolean | hasIntercept
boolean flag whether a regression constant is added |
| private final boolean[] | lindep
flags for variables with linear dependency problems |
| private long | nobs
number of observations entered |
| private final int | nvars
number of variables in regression |
| private final double[] | r
the off diagonal portion of the R matrix |
| private final double[] | rhs
the elements of the R`Y |
| private final double[] | rss
residual sum of squares for all nested regressions |
| private boolean | rss_set
has rss been called? |
| private double | sserr
sum of squared errors of largest regression |
| private double | sumsqy
summation of squared Y values |
| private double | sumy
summation of Y variable |
| private final double[] | tol
the tolerance for each of the variables |
| private boolean | tol_set
has the tolerance setting method been called |
| private final int[] | vorder
order of the regressors |
| private final double[] | work_sing
workspace for singularity method |
| private final double[] | work_tolset
scratch space for tolerance calc |
| private final double[] | x_sing
singular x values |
| Access | Constructor and Description |
|---|---|
| private | MillerUpdatingRegression()
Set the default constructor to private access to prevent inadvertent instantiation |
| public | MillerUpdatingRegression(int
number of regressors to expect, not including constant numberOfVariables, boolean include a constant automatically includeConstant, double zero tolerance, how machine zero is determined errorTolerance)This is the augmented constructor for the MillerUpdatingRegression class. |
| public | MillerUpdatingRegression(int
maximum number of potential regressors numberOfVariables, boolean include a constant automatically includeConstant)Primary constructor for the MillerUpdatingRegression. |
| Modifier and Type | Method and Description |
|---|---|
| public void | addObservation(final double[]
the array with regressor values x, final double the value of dependent variable given these regressors y)Implements org. Adds an observation to the regression model. |
| public void | addObservations(double[][]
observations on the regressors x, double[] observations on the regressand y)Implements org. Adds multiple observations to the model. |
| public void | clear()
Implements org. As the name suggests, clear wipes the internals and reorders everything in the canonical order. |
| private double[] | Returns: an array with the variance covariance of the included regressors in lower triangular formhow many of the regressors to include (either in canonical
order, or in the current reordered state) nreq)Calculates the cov matrix assuming only the first nreq variables are included in the calculation. |
| public double | Returns: the diagonal element of the hatmatrixreturns the diagonal of the hat matrix for this observation row_data)Gets the diagonal of the Hat matrix also known as the leverage matrix. |
| public long | Returns: number of observationsImplements org. Gets the number of observations added to the regression model. |
| public int[] | Returns: int[] with the current order of the regressorsGets the order of the regressors, useful if some type of reordering has been called. |
| public double[] | Returns: an array with the partial correlations of the remainder of regressors with each other and the regressand, in lower triangular formhow many of the regressors to include (either in canonical
order, or in the current reordered state) in)In the original algorithm only the partial correlations of the regressors is returned to the user. |
| public boolean | Returns: true regression has an intercept, false no interceptImplements org. A getter method which determines whether a constant is included. |
| private void | include(final double[]
observations on the regressors x, final double weight of the this observation (-1,1) wi, final double observation on the regressand yi)The include method is where the QR decomposition occurs. |
| private void | inverse(double[]
the storage for the inverse of r rinv, int how many of the regressors to include (either in canonical
order, or in the current reordered state) nreq)This internal method calculates the inverse of the upper-triangular portion of the R matrix. |
| private double[] | Returns: an array with the estimated slope coefficientshow many of the regressors to include (either in canonical
order, or in the current reordered state) nreq)The regcf method conducts the linear regression and extracts the parameter vector. |
| public RegressionResults | Returns: RegressionResults the structure holding all regression resultsImplements org. Conducts a regression on the data in the model, using all regressors. |
| public RegressionResults | Returns: RegressionResults the structure holding all regression resultsmany of the regressors to include (either in canonical
order, or in the current reordered state) numberOfRegressors)Conducts a regression on the data in the model, using a subset of regressors. |
| public RegressionResults | Returns: RegressionResults the structure holding all regression resultsarray of variables to include in regression variablesToInclude)Implements org. Conducts a regression on the data in the model, using regressors in array Calling this method will change the internal order of the regressors and care is required in interpreting the hatmatrix. |
| private int | Returns: -1 error, 0 everything okthe regressors to move list, int where the list will be placed pos1)ALGORITHM AS274 APPL. |
| private void | |
| private double | Returns: the sum of the a and b- an addend a, double - an addend b)Adds to number a and b such that the contamination due to numerical smallness of one addend does not corrupt the sum. |
| private void | ss()
Calculates the sum of squared errors for the full regression and all subsets in the following manner:
rss[] ={
ResidualSumOfSquares_allNvars,
ResidualSumOfSquares_FirstNvars-1,
ResidualSumOfSquares_FirstNvars-2,
..., ResidualSumOfSquares_FirstVariable}
|
| private void | |
| private void |
| d | back to summary |
|---|---|
| private final double[] d diagonals of cross products matrix | |
| epsilon | back to summary |
|---|---|
| private final double epsilon zero tolerance | |
| hasIntercept | back to summary |
|---|---|
| private boolean hasIntercept boolean flag whether a regression constant is added | |
| lindep | back to summary |
|---|---|
| private final boolean[] lindep flags for variables with linear dependency problems | |
| nobs | back to summary |
|---|---|
| private long nobs number of observations entered | |
| nvars | back to summary |
|---|---|
| private final int nvars number of variables in regression | |
| r | back to summary |
|---|---|
| private final double[] r the off diagonal portion of the R matrix | |
| rhs | back to summary |
|---|---|
| private final double[] rhs the elements of the R`Y | |
| rss | back to summary |
|---|---|
| private final double[] rss residual sum of squares for all nested regressions | |
| rss_set | back to summary |
|---|---|
| private boolean rss_set has rss been called? | |
| sserr | back to summary |
|---|---|
| private double sserr sum of squared errors of largest regression | |
| sumsqy | back to summary |
|---|---|
| private double sumsqy summation of squared Y values | |
| sumy | back to summary |
|---|---|
| private double sumy summation of Y variable | |
| tol | back to summary |
|---|---|
| private final double[] tol the tolerance for each of the variables | |
| tol_set | back to summary |
|---|---|
| private boolean tol_set has the tolerance setting method been called | |
| vorder | back to summary |
|---|---|
| private final int[] vorder order of the regressors | |
| work_sing | back to summary |
|---|---|
| private final double[] work_sing workspace for singularity method | |
| work_tolset | back to summary |
|---|---|
| private final double[] work_tolset scratch space for tolerance calc | |
| x_sing | back to summary |
|---|---|
| private final double[] x_sing singular x values | |
| MillerUpdatingRegression | back to summary |
|---|---|
| private MillerUpdatingRegression() Set the default constructor to private access to prevent inadvertent instantiation
| |
| MillerUpdatingRegression | back to summary |
|---|---|
| public MillerUpdatingRegression(int numberOfVariables, boolean includeConstant, double errorTolerance) throws ModelSpecificationException This is the augmented constructor for the MillerUpdatingRegression class.
| |
| MillerUpdatingRegression | back to summary |
|---|---|
| public MillerUpdatingRegression(int numberOfVariables, boolean includeConstant) throws ModelSpecificationException Primary constructor for the MillerUpdatingRegression.
| |
| addObservation | back to summary |
|---|---|
| public void addObservation(final double[] x, final double y) throws ModelSpecificationException Implements org. Adds an observation to the regression model.
| |
| addObservations | back to summary |
|---|---|
| public void addObservations(double[][] x, double[] y) throws ModelSpecificationException Implements org. Adds multiple observations to the model.
| |
| clear | back to summary |
|---|---|
| public void clear() Implements org. As the name suggests, clear wipes the internals and reorders everything in the canonical order. | |
| cov | back to summary |
|---|---|
| private double[] cov(int nreq) Calculates the cov matrix assuming only the first nreq variables are included in the calculation. The returned array contains a symmetric matrix stored in lower triangular form. The matrix will have ( nreq + 1 ) * nreq / 2 elements. For illustration
cov =
{
cov_00,
cov_10, cov_11,
cov_20, cov_21, cov22,
...
}
| |
| getDiagonalOfHatMatrix | back to summary |
|---|---|
| public double getDiagonalOfHatMatrix(double[] row_data) Gets the diagonal of the Hat matrix also known as the leverage matrix.
| |
| getN | back to summary |
|---|---|
| public long getN() Implements org. Gets the number of observations added to the regression model.
| |
| getOrderOfRegressors | back to summary |
|---|---|
| public int[] getOrderOfRegressors() Gets the order of the regressors, useful if some type of reordering has been called. Calling regress with int[]{} args will trigger a reordering.
| |
| getPartialCorrelations | back to summary |
|---|---|
| public double[] getPartialCorrelations(int in) In the original algorithm only the partial correlations of the regressors is returned to the user. In this implementation, we have
corr =
{
corrxx - lower triangular
corrxy - bottom row of the matrix
}
Replaces subroutines PCORR and COR of:
ALGORITHM AS274 APPL. STATIST. (1992) VOL.41, NO. 2
Calculate partial correlations after the variables in rows 1, 2, ..., IN have been forced into the regression. If IN = 1, and the first row of R represents a constant in the model, then the usual simple correlations are returned. If IN = 0, the value returned in array CORMAT for the correlation of variables Xi & Xj is: sum ( Xi.Xj ) / Sqrt ( sum (Xi^2) . sum (Xj^2) ) On return, array CORMAT contains the upper triangle of the matrix of partial correlations stored by rows, excluding the 1's on the diagonal. e.g. if IN = 2, the consecutive elements returned are: (3,4) (3,5) ... (3,ncol), (4,5) (4,6) ... (4,ncol), etc. Array YCORR stores the partial correlations with the Y-variable starting with YCORR(IN+1) = partial correlation with the variable in position (IN+1).
| |
| hasIntercept | back to summary |
|---|---|
| public boolean hasIntercept() Implements org. A getter method which determines whether a constant is included.
| |
| include | back to summary |
|---|---|
| private void include(final double[] x, final double wi, final double yi) The include method is where the QR decomposition occurs. This statement forms all intermediate data which will be used for all derivative measures. According to the miller paper, note that in the original implementation the x vector is overwritten. In this implementation, the include method is passed a copy of the original data vector so that there is no contamination of the data. Additionally, this method differs slightly from Gentleman's method, in that the assumption is of dense design matrices, there is some advantage in using the original gentleman algorithm on sparse matrices.
| |
| inverse | back to summary |
|---|---|
| private void inverse(double[] rinv, int nreq) This internal method calculates the inverse of the upper-triangular portion of the R matrix.
| |
| regcf | back to summary |
|---|---|
| private double[] regcf(int nreq) throws ModelSpecificationException The regcf method conducts the linear regression and extracts the parameter vector. Notice that the algorithm can do subset regression with no alteration.
| |
| regress | back to summary |
|---|---|
| public RegressionResults regress() throws ModelSpecificationException Implements org. Conducts a regression on the data in the model, using all regressors.
| |
| regress | back to summary |
|---|---|
| public RegressionResults regress(int numberOfRegressors) throws ModelSpecificationException Conducts a regression on the data in the model, using a subset of regressors.
| |
| regress | back to summary |
|---|---|
| public RegressionResults regress(int[] variablesToInclude) throws ModelSpecificationException Implements org. Conducts a regression on the data in the model, using regressors in array Calling this method will change the internal order of the regressors and care is required in interpreting the hatmatrix.
| |
| reorderRegressors | back to summary |
|---|---|
| private int reorderRegressors(int[] list, int pos1) ALGORITHM AS274 APPL. STATIST. (1992) VOL.41, NO. 2 Re-order the variables in an orthogonal reduction produced by AS75.1 so that the N variables in LIST start at position POS1, though will not necessarily be in the same order as in LIST. Any variables in VORDER before position POS1 are not moved. Auxiliary routine called: VMOVE. This internal method reorders the regressors.
| |
| singcheck | back to summary |
|---|---|
| private void singcheck() The method which checks for singularities and then eliminates the offending columns. | |
| smartAdd | back to summary |
|---|---|
| private double smartAdd(double a, double b) Adds to number a and b such that the contamination due to numerical smallness of one addend does not corrupt the sum.
| |
| ss | back to summary |
|---|---|
| private void ss() Calculates the sum of squared errors for the full regression and all subsets in the following manner:
rss[] ={
ResidualSumOfSquares_allNvars,
ResidualSumOfSquares_FirstNvars-1,
ResidualSumOfSquares_FirstNvars-2,
..., ResidualSumOfSquares_FirstVariable}
| |
| tolset | back to summary |
|---|---|
| private void tolset() This sets up tolerances for singularity testing. | |
| vmove | back to summary |
|---|---|
| private void vmove(int from, int to) ALGORITHM AS274 APPL. STATIST. (1992) VOL.41, NO. 2. Move variable from position FROM to position TO in an orthogonal reduction produced by AS75.1.
| |