# Why do I get NaN from corrcoef12?

4 views (last 30 days)
Peter Mills on 6 Apr 2017
Answered: Walter Roberson on 7 Apr 2017
Why does this give me NaN as the result?
rho = corrcoef12(invnormcdf(u),invnormcdf(v));
Here is the code for corrcoef12:
function xy = corrcoef(x,y)
%CORRCOEF Correlation coefficients.
% CORRCOEF(X) is a matrix of correlation coefficients formed
% from array X whose each row is an observation, and each
% column is a variable.
% CORRCOEF(X,Y), where X and Y are column vectors is the same as
% CORRCOEF([X Y]).
%
% If C is the covariance matrix, C = COV(X), then CORRCOEF(X) is
% the matrix whose (i,j)'th element is
%
% C(i,j)/SQRT(C(i,i)*C(j,j)).
%
% J. Little 5-5-86
% Revised 6-9-88 LS 2-13-95 BJ
% Copyright (c) 1984-98 by The MathWorks, Inc.
% \$Revision: 5.5 \$ \$Date: 1997/11/21 23:23:34 \$
switch nargin
case 1
c = cov(x);
case 2
c = cov(x,y);
otherwise
error('Not enough input arguments.');
end
d = diag(c);
xy = c./sqrt(d*d');
xy = xy(1,2);
From debugging this I can see that the problem is because: c = cov(x,y); gives NaN's however I'm not clear why cov is giving NaN's?
##### 2 CommentsShowHide 1 older comment
Peter Mills on 7 Apr 2017
Yes thanks that's the the code I'm using for invnormcdf

Walter Roberson on 7 Apr 2017
Your data contains 1.0 values. The invnormcdf formula is x = erfinv(2*p-1)*sqrt(2); which for 1.0 would be erfinv(2*1-1) which is erfinv(1) which is inf. Therefore you would be taking cov() of vectors with infinite values, and that is leading to NaN.