The SWEEP function sweeps matrix on the pivots indicated in index-vector to produce a new matrix.
The arguments the SWEEP function are as follows:
is a numeric matrix or literal.
is a numeric vector that indicates the pivots.
The values of the index vector must be less than or equal to the number of rows or the number of columns in matrix, whichever is smaller.
For example, suppose that is partitioned into
such that is and is . Let . Then, the statement B=sweep(A,I)
becomes
The index vector can be omitted. In this case, the function sweeps the matrix on all pivots on the main diagonal 1:MIN(nrow,ncol).
The SWEEP function has sequential and reversibility properties when the submatrix swept is positive definite:
SWEEP(SWEEP(,1),2)=SWEEP(,{ 1 2 })
SWEEP(SWEEP(,),)=
See Beaton (1964) for more information about these properties.
To use the SWEEP function for regression, suppose the matrix contains
where is .
Then contains
The partitions of form the beta values, SSE, and a matrix proportional to the covariance of the beta values for the least squares estimates of in the linear model
If any pivot becomes very close to zero (less than or equal to 1E12), the row and column for that pivot are zeroed. See Goodnight (1979) for more information.
The following example uses the SWEEP function for regression:
x = { 1 1 1, 1 2 4, 1 3 9, 1 4 16, 1 5 25, 1 6 36, 1 7 49, 1 8 64 }; y = { 3.929, 5.308, 7.239, 9.638, 12.866, 17.069, 23.191, 31.443 }; n = nrow(x); /* number of observations */ k = ncol(x); /* number of variables */ xy = x||y; /* augment design matrix */ A = xy` * xy; /* form cross products */ S = sweep( A, 1:k ); beta = S[1:k,4]; /* parameter estimates */ sse = S[4,4]; /* sum of squared errors */ mse = sse / (n-k); /* mean squared error */ cov = S[1:k, 1:k] # mse; /* covariance of estimates */ print cov, beta, sse;
The SWEEP function performs most of its computations in the memory allocated for the result matrix.