NAG FL Interface
g02cgf (linregm_coeffs_const)
1
Purpose
g02cgf performs a multiple linear regression on a set of variables whose means, sums of squares and crossproducts of deviations from means, and Pearson productmoment correlation coefficients are given.
2
Specification
Fortran Interface
Subroutine g02cgf ( 
n, k1, k, xbar, ssp, ldssp, r, ldr, result, coef, ldcoef, con, rinv, ldrinv, c, ldc, wkz, ldwkz, ifail) 
Integer, Intent (In) 
:: 
n, k1, k, ldssp, ldr, ldcoef, ldrinv, ldc, ldwkz 
Integer, Intent (Inout) 
:: 
ifail 
Real (Kind=nag_wp), Intent (In) 
:: 
xbar(k+1), ssp(ldssp,k+1) 
Real (Kind=nag_wp), Intent (Inout) 
:: 
r(ldr,k+1), coef(ldcoef,3), rinv(ldrinv,k), c(ldc,k), wkz(ldwkz,k) 
Real (Kind=nag_wp), Intent (Out) 
:: 
result(13), con(3) 

C Header Interface
#include <nag.h>
void 
g02cgf_ (const Integer *n, const Integer *k1, const Integer *k, const double xbar[], const double ssp[], const Integer *ldssp, double r[], const Integer *ldr, double result[], double coef[], const Integer *ldcoef, double con[], double rinv[], const Integer *ldrinv, double c[], const Integer *ldc, double wkz[], const Integer *ldwkz, Integer *ifail) 

C++ Header Interface
#include <nag.h> extern "C" {
void 
g02cgf_ (const Integer &n, const Integer &k1, const Integer &k, const double xbar[], const double ssp[], const Integer &ldssp, double r[], const Integer &ldr, double result[], double coef[], const Integer &ldcoef, double con[], double rinv[], const Integer &ldrinv, double c[], const Integer &ldc, double wkz[], const Integer &ldwkz, Integer &ifail) 
}

The routine may be called by the names g02cgf or nagf_correg_linregm_coeffs_const.
3
Description
g02cgf fits a curve of the form
to the data points
such that
The routine calculates the regression coefficients,
${b}_{1},{b}_{2},\dots ,{b}_{k}$, the regression constant,
$a$, and various other statistical quantities by minimizing
The actual data values
$\left({x}_{1i},{x}_{2i},\dots ,{x}_{ki},{y}_{i}\right)$ are not provided as input to the routine. Instead, input consists of:

(i)The number of cases, $n$, on which the regression is based.

(ii)The total number of variables, dependent and independent, in the regression, $\left(k+1\right)$.

(iii)The number of independent variables in the regression, $k$.

(iv)The means of all $k+1$ variables in the regression, both the independent variables $\left({x}_{1},{x}_{2},\dots ,{x}_{k}\right)$ and the dependent variable $\left(y\right)$, which is the $\left(k+1\right)$th variable: i.e., ${\overline{x}}_{1},{\overline{x}}_{2},\dots ,{\overline{x}}_{k},\overline{y}$.

(v)The $\left(k+1\right)$ by $\left(k+1\right)$ matrix [${S}_{ij}$] of sums of squares and crossproducts of deviations from means of all the variables in the regression; the terms involving the dependent variable, $y$, appear in the $\left(k+1\right)$th row and column.

(vi)The $\left(k+1\right)$ by $\left(k+1\right)$ matrix [${R}_{ij}$] of the Pearson productmoment correlation coefficients for all the variables in the regression; the correlations involving the dependent variable, $y$, appear in the $\left(k+1\right)$th row and column.
The quantities calculated are:

(a)The inverse of the $k$ by $k$ partition of the matrix of correlation coefficients, [${R}_{ij}$], involving only the independent variables. The inverse is obtained using an accurate method which assumes that this submatrix is positive definite.

(b)The modified inverse matrix, $C=\left[{c}_{ij}\right]$, where
where ${r}_{ij}$ is the $\left(i,j\right)$th element of the inverse matrix of [${R}_{ij}$] as described in (a) above. Each element of $C$ is thus the corresponding element of the matrix of correlation coefficients multiplied by the corresponding element of the inverse of this matrix, divided by the corresponding element of the matrix of sums of squares and crossproducts of deviations from means.

(c)The regression coefficients:
where ${S}_{j\left(k+1\right)}$ is the sum of crossproducts of deviations from means for the independent variable ${x}_{j}$ and the dependent variable $y$.

(d)The sum of squares attributable to the regression, $SSR$, the sum of squares of deviations about the regression, $SSD$, and the total sum of squares, $SST$:
 $SST={S}_{\left(k+1\right)\left(k+1\right)}$, the sum of squares of deviations from the mean for the dependent variable, $y$;
 $SSR={\displaystyle \sum _{j=1}^{k}}{b}_{j}{S}_{j\left(k+1\right)}\text{; \hspace{1em}}SSD=SSTSSR$

(e)The degrees of freedom attributable to the regression, $DFR$, the degrees of freedom of deviations about the regression, $DFD$, and the total degrees of freedom, $DFT$:

(f)The mean square attributable to the regression, $MSR$, and the mean square of deviations about the regression, $MSD$:

(g)The $F$ values for the analysis of variance:

(h)The standard error estimate:

(i)The coefficient of multiple correlation, $R$, the coefficient of multiple determination, ${R}^{2}$ and the coefficient of multiple determination corrected for the degrees of freedom, ${\overline{R}}^{2}$;

(j)The standard error of the regression coefficients:

(k)The $t$ values for the regression coefficients:

(l)The regression constant, $a$, its standard error, $se\left(a\right)$, and its $t$ value, $t\left(a\right)$:
4
References
Draper N R and Smith H (1985) Applied Regression Analysis (2nd Edition) Wiley
5
Arguments

1:
$\mathbf{n}$ – Integer
Input

On entry: the number of cases $n$, used in calculating the sums of squares and crossproducts and correlation coefficients.

2:
$\mathbf{k1}$ – Integer
Input

On entry: is no longer required by g02cgf but is retained for backwards compatibility.

3:
$\mathbf{k}$ – Integer
Input

On entry: $k$, the number of independent variables in the regression.
Constraint:
$1\le {\mathbf{k}}<{\mathbf{n}}1$.

4:
$\mathbf{xbar}\left({\mathbf{k}}+1\right)$ – Real (Kind=nag_wp) array
Input

On entry: ${\mathbf{xbar}}\left(\mathit{i}\right)$ must be set to ${\overline{x}}_{\mathit{i}}$, the mean value of the $\mathit{i}$th variable, for $\mathit{i}=1,2,\dots ,k+1$; the mean of the dependent variable must be contained in ${\mathbf{xbar}}\left(k+1\right)$.

5:
$\mathbf{ssp}\left({\mathbf{ldssp}},{\mathbf{k}}+1\right)$ – Real (Kind=nag_wp) array
Input

On entry: ${\mathbf{ssp}}\left(\mathit{i},\mathit{j}\right)$ must be set to ${S}_{\mathit{i}\mathit{j}}$, the sum of crossproducts of deviations from means for the $\mathit{i}$th and $\mathit{j}$th variables, for $\mathit{i}=1,2,\dots ,k+1$ and $\mathit{j}=1,2,\dots ,k+1$; terms involving the dependent variable appear in row $k+1$ and column $k+1$.

6:
$\mathbf{ldssp}$ – Integer
Input

On entry: the first dimension of the array
ssp as declared in the (sub)program from which
g02cgf is called.
Constraint:
${\mathbf{ldssp}}\ge {\mathbf{k}}+1$.

7:
$\mathbf{r}\left({\mathbf{ldr}},{\mathbf{k}}+1\right)$ – Real (Kind=nag_wp) array
Input

On entry: ${\mathbf{r}}\left(\mathit{i},\mathit{j}\right)$ must be set to ${R}_{\mathit{i}\mathit{j}}$, the Pearson productmoment correlation coefficient for the $\mathit{i}$th and $\mathit{j}$th variables, for $\mathit{i}=1,2,\dots ,k+1$ and $\mathit{j}=1,2,\dots ,k+1$; terms involving the dependent variable appear in row $k+1$ and column $k+1$.

8:
$\mathbf{ldr}$ – Integer
Input

On entry: the first dimension of the array
r as declared in the (sub)program from which
g02cgf is called.
Constraint:
${\mathbf{ldr}}\ge {\mathbf{k}}+1$.

9:
$\mathbf{result}\left(13\right)$ – Real (Kind=nag_wp) array
Output

On exit: the following information:
${\mathbf{result}}\left(1\right)$  $SSR$, the sum of squares attributable to the regression; 
${\mathbf{result}}\left(2\right)$  $DFR$, the degrees of freedom attributable to the regression; 
${\mathbf{result}}\left(3\right)$  $MSR$, the mean square attributable to the regression; 
${\mathbf{result}}\left(4\right)$  $F$, the $F$ value for the analysis of variance; 
${\mathbf{result}}\left(5\right)$  $SSD$, the sum of squares of deviations about the regression; 
${\mathbf{result}}\left(6\right)$  $DFD$, the degrees of freedom of deviations about the regression; 
${\mathbf{result}}\left(7\right)$  $MSD$, the mean square of deviations about the regression; 
${\mathbf{result}}\left(8\right)$  $SST$, the total sum of squares; 
${\mathbf{result}}\left(9\right)$  $DFT$, the total degrees of freedom; 
${\mathbf{result}}\left(10\right)$  $s$, the standard error estimate; 
${\mathbf{result}}\left(11\right)$  $R$, the coefficient of multiple correlation; 
${\mathbf{result}}\left(12\right)$  ${R}^{2}$, the coefficient of multiple determination; 
${\mathbf{result}}\left(13\right)$  ${\overline{R}}^{2}$, the coefficient of multiple determination corrected for the degrees of freedom. 

10:
$\mathbf{coef}\left({\mathbf{ldcoef}},3\right)$ – Real (Kind=nag_wp) array
Output

On exit: for
$i=1,2,\dots ,k$, the following information:
 ${\mathbf{coef}}\left(i,1\right)$
 ${b}_{i}$, the regression coefficient for the $i$th variable.
 ${\mathbf{coef}}\left(i,2\right)$
 $se\left({b}_{i}\right)$, the standard error of the regression coefficient for the $i$th variable.
 ${\mathbf{coef}}\left(i,3\right)$
 $t\left({b}_{i}\right)$, the $t$ value of the regression coefficient for the $i$th variable.

11:
$\mathbf{ldcoef}$ – Integer
Input

On entry: the first dimension of the array
coef as declared in the (sub)program from which
g02cgf is called.
Constraint:
${\mathbf{ldcoef}}\ge {\mathbf{k}}$.

12:
$\mathbf{con}\left(3\right)$ – Real (Kind=nag_wp) array
Output

On exit: the following information:
${\mathbf{con}}\left(1\right)$  $a$, the regression constant; 
${\mathbf{con}}\left(2\right)$  $se\left(a\right)$, the standard error of the regression constant; 
${\mathbf{con}}\left(3\right)$  $t\left(a\right)$, the $t$ value for the regression constant. 

13:
$\mathbf{rinv}\left({\mathbf{ldrinv}},{\mathbf{k}}\right)$ – Real (Kind=nag_wp) array
Output

On exit: the inverse of the matrix of correlation coefficients for the independent variables; that is, the inverse of the matrix consisting of the first
$k$ rows and columns of
r.

14:
$\mathbf{ldrinv}$ – Integer
Input

On entry: the first dimension of the array
rinv as declared in the (sub)program from which
g02cgf is called.
Constraint:
${\mathbf{ldrinv}}\ge {\mathbf{k}}$.

15:
$\mathbf{c}\left({\mathbf{ldc}},{\mathbf{k}}\right)$ – Real (Kind=nag_wp) array
Output

On exit: the modified inverse matrix, where
 ${\mathbf{c}}\left(\mathit{i},\mathit{j}\right)={\mathbf{r}}\left(\mathit{i},\mathit{j}\right)\times {\mathbf{rinv}}\left(\mathit{i},\mathit{j}\right)/{\mathbf{ssp}}\left(\mathit{i},\mathit{j}\right)$, for $\mathit{i}=1,2,\dots ,k$ and $\mathit{j}=1,2,\dots ,k$.

16:
$\mathbf{ldc}$ – Integer
Input

On entry: the first dimension of the array
c as declared in the (sub)program from which
g02cgf is called.
Constraint:
${\mathbf{ldc}}\ge {\mathbf{k}}$.

17:
$\mathbf{wkz}\left({\mathbf{ldwkz}},{\mathbf{k}}\right)$ – Real (Kind=nag_wp) array
Workspace

18:
$\mathbf{ldwkz}$ – Integer
Input

On entry: the first dimension of the array
wkz as declared in the (sub)program from which
g02cgf is called.
Constraint:
${\mathbf{ldwkz}}\ge {\mathbf{k}}$.

19:
$\mathbf{ifail}$ – Integer
Input/Output

On entry:
ifail must be set to
$0$,
$1\text{or}1$. If you are unfamiliar with this argument you should refer to
Section 4 in the Introduction to the NAG Library FL Interface for details.
For environments where it might be inappropriate to halt program execution when an error is detected, the value
$1\text{or}1$ is recommended. If the output of error messages is undesirable, then the value
$1$ is recommended. Otherwise, if you are not familiar with this argument, the recommended value is
$0$.
When the value $\mathbf{1}\text{or}\mathbf{1}$ is used it is essential to test the value of ifail on exit.
On exit:
${\mathbf{ifail}}={\mathbf{0}}$ unless the routine detects an error or a warning has been flagged (see
Section 6).
6
Error Indicators and Warnings
If on entry
${\mathbf{ifail}}=0$ or
$1$, explanatory error messages are output on the current error message unit (as defined by
x04aaf).
Errors or warnings detected by the routine:
 ${\mathbf{ifail}}=1$

On entry, ${\mathbf{k}}=\u2329\mathit{\text{value}}\u232a$.
Constraint: ${\mathbf{k}}\ge 1$.
 ${\mathbf{ifail}}=3$

On entry, ${\mathbf{n}}=\u2329\mathit{\text{value}}\u232a$ and ${\mathbf{k}}=\u2329\mathit{\text{value}}\u232a$.
Constraint: ${\mathbf{n}}>{\mathbf{k}}+1$.
 ${\mathbf{ifail}}=4$

On entry, ${\mathbf{ldc}}=\u2329\mathit{\text{value}}\u232a$ and ${\mathbf{k}}=\u2329\mathit{\text{value}}\u232a$.
Constraint: ${\mathbf{ldc}}\ge {\mathbf{k}}$.
On entry, ${\mathbf{ldcoef}}=\u2329\mathit{\text{value}}\u232a$ and ${\mathbf{k}}=\u2329\mathit{\text{value}}\u232a$.
Constraint: ${\mathbf{ldcoef}}\ge {\mathbf{k}}$.
On entry, ${\mathbf{ldr}}=\u2329\mathit{\text{value}}\u232a$ and ${\mathbf{k}}=\u2329\mathit{\text{value}}\u232a$.
Constraint: ${\mathbf{ldr}}\ge {\mathbf{k}}+1$.
On entry, ${\mathbf{ldrinv}}=\u2329\mathit{\text{value}}\u232a$ and ${\mathbf{k}}=\u2329\mathit{\text{value}}\u232a$.
Constraint: ${\mathbf{ldrinv}}\ge {\mathbf{k}}$.
On entry, ${\mathbf{ldssp}}=\u2329\mathit{\text{value}}\u232a$ and ${\mathbf{k}}=\u2329\mathit{\text{value}}\u232a$.
Constraint: ${\mathbf{ldssp}}\ge {\mathbf{k}}+1$.
On entry, ${\mathbf{ldwkz}}=\u2329\mathit{\text{value}}\u232a$ and ${\mathbf{k}}=\u2329\mathit{\text{value}}\u232a$.
Constraint: ${\mathbf{ldwkz}}\ge {\mathbf{k}}$.
 ${\mathbf{ifail}}=5$

The
k by
k partition of
r which requires inversion is not positive definite.
 ${\mathbf{ifail}}=6$

The refinement following inversion has failed.
This indicates that the
$k$ by
$k$ partition of the matrix
$R$, which is to be inverted, is illconditioned. The use of
g02daf, which employs a different numerical technique, may avoid this difficulty (an extra ‘variable’ representing the constant term must be introduced for
g02daf).
 ${\mathbf{ifail}}=99$
An unexpected error has been triggered by this routine. Please
contact
NAG.
See
Section 7 in the Introduction to the NAG Library FL Interface for further information.
 ${\mathbf{ifail}}=399$
Your licence key may have expired or may not have been installed correctly.
See
Section 8 in the Introduction to the NAG Library FL Interface for further information.
 ${\mathbf{ifail}}=999$
Dynamic memory allocation failed.
See
Section 9 in the Introduction to the NAG Library FL Interface for further information.
7
Accuracy
The accuracy of
g02cgf is almost entirely dependent on the accuracy of the matrix inversion method used. As
g02cgf works with the matrix of correlation coefficients rather than that of the sums of squares and crossproducts of deviations from means all terms in the matrix being inverted are of a similar order and therefore the scope for computational error is reduced. An alternative, and potentially more numerically reliable, routine is
g02daf.
g02daf works directly with the data matrix and therefore avoids explicitly performing a matrix inversion. However,
g02daf does not handle missing values, nor does it provide the same output as this routine.
If, in calculating
$F$,
$t\left(a\right)$, or any of the
$t\left({b}_{i}\right)$
(see
Section 3), the numbers involved are such that the result would be outside the range of numbers which can be stored by the machine, then the answer is set to the largest quantity which can be stored as a real variable, by means of a call to
x02alf.
8
Parallelism and Performance
g02cgf is threaded by NAG for parallel execution in multithreaded implementations of the NAG Library.
g02cgf makes calls to BLAS and/or LAPACK routines, which may be threaded within the vendor library used by this implementation. Consult the documentation for the vendor library for further information.
Please consult the
X06 Chapter Introduction for information on how to control and interrogate the OpenMP environment used within this routine. Please also consult the
Users' Note for your implementation for any additional implementationspecific information.
The time taken by g02cgf depends on $k$.
This routine assumes that the matrix of correlation coefficients for the independent variables in the regression is positive definite; it fails if this is not the case.
This correlation matrix will in fact be positive definite whenever the correlation matrix and the sums of squares and crossproducts (of deviations from means) matrix have been formed either without regard to missing values, or by eliminating
completely any cases involving missing values, for any variable. If, however, these matrices are formed by eliminating cases with missing values from only those calculations involving the variables for which the values are missing, no such statement can be made, and the correlation matrix may or may not be positive definite. You should be aware of the possible dangers of using correlation matrices formed in this way (see the
G02 Chapter Introduction), but if they nevertheless wish to carry out regression using such matrices, this routine is capable of handling the inversion of such matrices provided they are positive definite.
If a matrix is positive definite, its subsequent reorganisation by either
g02cef or
g02cff will not affect this property, and the new matrix can safely be used in this routine. Thus correlation matrices produced by any of
g02baf,
g02bbf,
g02bgf or
g02bhf, even if subsequently modified by either
g02cef or
g02cff, can be handled by this routine.
It should be noted that in forming the sums of squares and crossproducts matrix and the correlation matrix a column of constants should not be added to the data as an additional ‘variable’ in order to obtain a constant term in the regression. This routine automatically calculates the regression constant, $a$, and any attempt to insert such a ‘dummy variable’ is likely to cause the routine to fail.
It should also be noted that the routine requires the dependent variable to be the last of the
$k+1$ variables whose statistics are provided as input to the routine. If this variable is not correctly positioned in the original data, the means, standard deviations, sums of squares and crossproducts of deviations from means, and correlation coefficients can be manipulated by using
g02cef or
g02cff to reorder the variables as necessary.
10
Example
This example reads in the means, sums of squares and crossproducts of deviations from means, and correlation coefficients for three variables. A multiple linear regression is then performed with the third and final variable as the dependent variable. Finally the results are printed.
10.1
Program Text
10.2
Program Data
10.3
Program Results