Performs regression across variates (M.W. Patefield & D. Tandy).

### No options

### Parameters

`Y` = pointers |
Pointers each containing a set of y-variates for each of whose units a regression is to be done |
---|---|

`X` = pointers |
Pointer containing x-variates for each set of y-variates |

`SLOPE` = variates |
Variate to save the estimated slopes from each set of regressions |

`INTERCEPT` = variates |
Variate to save the estimated intercepts from each set of regressions |

### Description

Given a pointer containing a set of y-variates and another containing a set of x-variates, `VREGRESS`

performs a separate regression for the data in each unit of the variates. The pointers are specified using the `Y`

and `X`

parameters. There must be an equal number of x- and y-variates, and the variates must all be of the same length. The `SLOPE`

parameter must supply a variate to receive the regression coefficients, and the `INTERCEPT`

parameter can give a variate to save the intercepts. These variates will have the same length as the x- and y-variates.

Options: none.

Parameters: `Y`

, `X`

, `SLOPE`

, `INTERCEPT`

.

### Method

The procedure propagates missing values in any of the x-variates into the appropriate unit of the corresponding y-variate, and vice-versa. The regressions are calculated using matrix operations and variate functions in `CALCULATE`

. The vectors of means across the x- and y-variates are subtracted, and then the sums of squares of `X`

and the sums of products of `Y`

and `X`

are calculated across the variates, to obtain the estimated slope coefficients. The estimated intercepts are calculated directly from the slope coefficients and the vectors of means.

The action taken with missing values is the same as would be given by the `FIT`

directive. Units with all values of `Y`

and `X`

missing after propagation will have missing values in both `SLOPE`

and `INTERCEPT`

. Units with a single non-missing value will have a missing value in `SLOPE`

and the corresponding element of `INTERCEPT`

equal to the non-missing value of `Y`

.

It is considerably faster to use `VREGRESS`

than to use `FIT`

on each unit after re-arrangement of the data. However, there may be a slight loss of accuracy resulting from single-precision calculations on machines where double-precision is used for the calculations within `FIT`

.

### Action with `RESTRICT`

All the data variates in `Y`

and `X`

must be subject to the same restriction (if any). If this is not so a fault (`VA 1 - incompatible restrictions`

) will occur during the calculations. If `SLOPE`

or `INTERCEPT`

is restricted prior to use of `VREGRESS`

, the restriction must be the same as that on the data variates. On exit from `VREGRESS`

, the computed `SLOPE`

and `INTERCEPT`

variates will be restricted in the same way as the data variates.

### See also

Procedure: `VINTERPOLATE`

.

Functions: `VSUMS`

, `VTOTALS`

, `VMEANS`

, `VMEDIANS`

, `VMINIMA`

, `VMAXIMA`

, `VRANGE`

, `VCOVARIANCE`

, `VCORRELATION`

, `VSD`

, `VSEMEANS`

, `VSKEWNESS`

, `VKURTOSIS`

, `VVARIANCES`

, `VNOBSERVATIONS`

, `VNVALUES`

, `VNMV`

, `VPOSITIONS`

.

Commands for Regression analysis.

### Example

CAPTION 'VREGRESS example',\ !t('The data (from John Laws, IGAP, North Wyke, Devon)',\ 'consists of weights of seven lambs each taken at',\ 'four different ages.'); STYLE=meta,plain VARIATE Age[1...4],Lambwt[1...4] READ [PRINT=errors;SETNVALUES=yes] Age[1...4],Lambwt[1...4] 0 36 49 63 4.5 17 20 25 0 30 43 57 5.9 13 17 20 0 25 38 52 5.4 11 14 20 0 35 48 62 4.5 16 20 25 0 19 32 46 7.3 15 20 27 0 9 22 36 5.2 * 12 16 0 1 14 28 4.5 * 9 13 : PRINT Age[1...4],Lambwt[1...4]; FIELDWIDTH=4(7),4(10); DECIMALS=4(0),3(1) VREGRESS Y=Lambwt; X=Age; SLOPE=Rate; INTERCEPT=Constant PRINT Rate,Constant; DECIMALS=3,2 CAPTION\ !t('For each lamb, a regression is calculated of the four values in',\ 'Lambwt[1...4] on the four values in Age[1...4]. Thus, for the first',\ 'lamb, the regression is of ( 4.5, 17, 20, 25 ) on ( 0, 36, 49, 63 ) ', \ 'giving a fitted line:-'),'Lambwt = 4.69 + 0.323 Age',\ !t('For the last lamb the missing value is excluded, so the regression',\ 'is of the three values ( 4.5, 9, 13 ) on ( 0, 14, 28 ) ',\ 'giving a fitted line:-'),'Lambwt = 4.58 + 0.304 Age'