# Gscale

### Purpose

Group/block scaling for a single or multiple blocks.

### Synopsis

- [gxs,mxs,stdxs] = gscale(xin,numblocks)

- [gxs,mxs,stdxs] = gscale(xin,numblocks,center)

### Description

GSCALE scales an input matrix xin such that the columns have mean zero, and variance in each block/sub-matrix relative to the total variance in xin equal to one. The purpose is to provide equal sum-of-squares weighting to each block in xin.

Inputs are a matrix xin (class "double" or DataSet Object) and the number of sub-matrices or blocks numblocks. numblocks defines how the data should be split into blocks. Three different uses exist:

**>0**if (numblocks) is > 0, the number of sub-matrices/blocks in the data. Note that size(xin,2)/numblocks must be a whole number. If (numblocks) is not included it is assumed to be 1 (one) and the entire (xin) matrix is treated as a single block.

**=0**If (numblocks) is 0 (zero) then automatic blocking is done based on the dimensions of the (xin) matrix.

- If (xin) is a three-way array, it is unfolded (combining the first two modes as variables) and the size of the original second mode (size(xin,2)) is used as (numblocks). The output is re-folded back into the original three-way array. Note that the unfold operation is: xin = unfoldmw(xin,3);
- If (xin) is a two-way array, each variable is treated on its own and GSCALE is equivalent to autoscale (see the AUTO function).

**<0**If (numblocks) is a negative integer, then class information in the indicated set on mode 2 (the variable mode) is used to divide the blocks. E.g. if numblocks is -3, then the third class set is used to define blocks. This feature is only defined for two-way arrays.

center = A true/false flag indicating whether the xin block should be centered. A value of true or 1 (default) will both center and scale each block. A value of false or 0 will only scale each block without centering it.

Outputs are the scaled matrix (gxs), a rowvector of means (mxs), and a row vector of "block standard deviations" stdxs.

NOTE: This function is used with 'Block Variance Scaling' (blockvariance) and 'Group Scale' (gscale) preprocessing methods.

### Examples

Scale a matrix a that has two blocks augmented together:

>> a = [[1 2 3; 4 5 6; 7 8 9] [11 12 13; 14 15 16; 17 18 19]] a = 1 2 3 11 12 13 4 5 6 14 15 16 7 8 9 17 18 19 >> [gxs,mxs,stdxs] = gscale(a,2); >> gxs gxs = -0.5774 -0.5774 -0.5774 -0.5774 -0.5774 -0.5774 0 0 0 0 0 0 0.5774 0.5774 0.5774 0.5774 0.5774 0.5774 >> mxs mxs = 4 5 6 14 15 16 >> stdxs stdxs = 3 3 3 3 3 3