This is machine translation

Translated by Microsoft
Mouse over text to see original. Click the button below to return to the English verison of the page.


Covariance ignoring NaNs


c = nancov(X)
c = nancov(..., 'pairwise')



Financial times series object.


Financial times series object.


nancov for financial times series objects is based on the Statistics and Machine Learning Toolbox™ function nancov. See nancov in the Statistics and Machine Learning Toolbox documentation.

c = nancov(X), if X is a financial time series object with one series and returns the sample variance of the values in X, treating NaNs as missing values. For a financial time series object containing more than one series, where each row is an observation and each series a variable, nancov(X) is the covariance matrix computing using rows of X that do not contain any NaN values. nancov(X,Y), where X and Y are financial time series objects with the same number of elements, is equivalent to nancov([X(:) Y(:)]).

nancov(X) or nancov(X,Y) normalizes by (N-1) if N >1, where N is the number of observations after removing missing values. This makes nancov the best unbiased estimate of the covariance matrix if the observations are from a normal distribution. For N = 1, cov normalizes by N.

nancov(X,1) or nancov(X,Y,1) normalizes by N and produces the second moment matrix of the observations about their mean. nancov(X,Y,0) is the same as nancov(X,Y), and nancov(X,0) is the same as nancov(X).

c = nancov(..., 'pairwise') computes c(i,j) using rows with no NaN values in columns ior j. The result may not be a positive definite matrix. c = nancov(..., 'complete') is the default, and it omits rows with any NaN values, even if they are not in column i or j. The mean is removed from each column before calculating the result.


To generate random data having nonzero covariance between column 4 and the other columns:

x = randn(30, 4);                 % uncorrelated data
x(:, 4) = sum(x, 2);              % introduce correlation
x(2, 3) = NaN;                    % introduce one missing value
f = fints((today:today+29)', x);  % create a fints object using x
c = nancov(f)                     % compute sample covariance
c =

    1.6898   -0.0005    0.3612    1.9143
   -0.0005    1.0833   -0.5513    0.6059
    0.3612   -0.5513    1.0369    0.7570
    1.9143    0.6059    0.7570    4.4895

Related Examples

See Also

| |

Introduced before R2006a

Was this topic helpful?