# nancov

(Not recommended) Covariance ignoring `NaN` values

`nancov` is not recommended. Use the MATLAB® function `cov` instead. With the `cov` function, you can specify whether to include or omit `NaN` values for the calculation. For more information, see Compatibility Considerations.

## Syntax

```Y = nancov(X) Y = nancov(X1,X2) Y = nancov(...,1) Y = nancov(...,'pairwise') ```

## Description

`Y = nancov(X)` is the covariance `cov` of `X`, computed after removing observations with `NaN` values.

For vectors `x`, `nancov(x)` is the sample variance of the remaining elements, once `NaN` values are removed. For matrices `X`, `nancov(X)` is the sample covariance of the remaining observations, once observations (rows) containing any `NaN` values are removed.

`Y = nancov(X1,X2)`, where `X1` and `X2` are matrices with the same number of elements, is equivalent to `nancov(X)`, where `X = [X1(:) X2(:)]`.

`nancov` removes the mean from each variable (column for matrix `X`) before calculating `Y`. If n is the number of remaining observations after removing observations with `NaN` values, `nancov` normalizes `Y` by either n – 1 or n , depending on whether n > 1 or n = 1, respectively. To specify normalization by n, use ```Y = nancov(...,1)```.

`Y = nancov(...,'pairwise')` computes `Y(i,j)` using rows with no `NaN` values in columns `i` or `j`. The result `Y` may not be a positive definite matrix.

## Examples

Generate random data for two variables (columns) with random missing values:

```X = rand(10,2); p = randperm(numel(X)); X(p(1:5)) = NaN X = 0.8147 0.1576 NaN NaN 0.1270 0.9572 0.9134 NaN 0.6324 NaN 0.0975 0.1419 0.2785 0.4218 0.5469 0.9157 0.9575 0.7922 0.9649 NaN```

Establish a correlation between a third variable and the other two variables:

```X(:,3) = sum(X,2) X = 0.8147 0.1576 0.9723 NaN NaN NaN 0.1270 0.9572 1.0842 0.9134 NaN NaN 0.6324 NaN NaN 0.0975 0.1419 0.2394 0.2785 0.4218 0.7003 0.5469 0.9157 1.4626 0.9575 0.7922 1.7497 0.9649 NaN NaN```

Compute the covariance matrix for the three variables after removing observations (rows) with `NaN` values:

```Y = nancov(X) Y = 0.1311 0.0096 0.1407 0.0096 0.1388 0.1483 0.1407 0.1483 0.2890```

## Compatibility Considerations

expand all

Not recommended starting in R2020b