# Replacevars

## Contents

### Purpose

Replace variables based on factor-based models.

### Synopsis

- repdata = replacevars(model,vars,data);
- repdata = replacevars(model,data);
- rm = replacevars(model,vars);
- rm = replacevars(model,vars,rmtype);

### Description

This function generates a matrix (or matrices) that can be used to replace "bad" variables from data matrices with the values that are most consistent with a given factor-based model (PCA, PLS, PCR, CLS, MCR, etc.). The outputs of this function are dependent on the inputs provided:

- If a model and a list of variables to replace are provided, then the function returns the matrix or matrices required to do the mathematical replacement operation
- If the data on which to operate is also provided, then the function returns the data with the replaced values.

NOTE: Function renamed from `replace` to avoid naming conflict with Matlab 'replace' function as of 2016b.

#### Inputs

**model**= can be one of the following:**data**= a matrix or DataSet Object in which the specified variables are to be replaced. If`vars`is omitted,`data`is searched for non-finite values (NaN or Inf) and these are replaced. When`data`is supplied, only the replaced data`repdata`is returned.

#### Optional Inputs

**vars**= an optional row vector containing the column indices of the variables to be replaced.**rmtype**= an optional string indicating the type of replacement matrix to output (only valid when next output is omitted).**matrix**= returns an entire`rm`matrix**loads**= (default) returns the pseudo-inverse of the loadings.

See below for details on these outputs.

#### Outputs

**repdata**= The data with the chosen variables replaced.**rm**= This output can be used with data to replace the variables indicated by`vars`with the values which are most consistent with the given model. This output is only available when`data`is not provided.

- If input
`rmtype`is not provided or is 'loads', then`rm`will be a structure containing three matrices which can be used to replace varibles using:

- If input

- data(:,rm.vars) = data * rm.ploads * rm.loads

- If
`rmtype`is 'matrix' then`rm`will be a matrix which can be used to replace variables using:

- If

- data = data * rm

**Note:**The 'matrix' form of`rm`will nearly always require a significantly larger amount of memory, but can be applied easier.

### Examples

A PCA model was created on a data matrix `xold` giving a model structure `model`. The loadings, a set of loadings column vectors, were extracted to a variable `loads` using

- loads = model.loads{2};.

It was found that the sensor measuring variable 9 has gone "bad" and we would like to replace it in the new data matrix `xnew`. A replacement matrix `rm` is first created using REPLACE.

- rm = replacevars(loads,9);

The new data matrix with variable 9 replaced `rxnew` is then calculated by multiplying `xnew` by `rm`.

- rxnew = xnew\*rm;