Matlab:为什么在使用' corrcoef'?时会出现相关性NaN?

时间:2016-02-02 11:15:32

标签: matlab

当我运行corrcoef来查找两个数据阵列之间的相关系数时,我得到了NaN。它只对一批数据执行此操作。这是download link to the data within .mat file

我运行此代码

[R(1).R,R(1).P,R(1).RL,R(1).RU] = corrcoef([data.Series1], [data.Series2], 'rows', 'pairwise');

它给了我

NaN   NaN
NaN     1

表示R,P,RL和RU。

我不认为数据中的NaN存在问题,因为我对'pairwise'函数使用corrcoef参数,告诉它忽略NaN。

我将相同的数据复制到Microsoft Excel中,它很好地计算了相关系数。这是计算相关系数的Excel file。为什么不corrcoef这样做?这里可能出现什么问题?

1 个答案:

答案 0 :(得分:3)

我必须下载此文件并将其插入以查看发生了什么。

是的,你是正确的,当使用pairwise功能处理数据时,有效地从操作中删除具有任何元素= NaN的对;

但是 - INFs呢?在您的[data.Series1]中 - 您有INF条目,这似乎导致了问题。

我将您的数据系列提取为2个向量A和B:

A = [data.Series1];
B = [data.Series2];

 >> max (A)
   ans =
   Inf

现在将Inf设置为NaN:

 A(isinf(A)) = NaN;
 [R(1).R,R(1).P,R(1).RL,R(1).RU] = corrcoef(A,B, 'rows', 'pairwise');

>> R.RL

    ans =

        1.0000   -0.0794
       -0.0794    1.0000

讨论:显然INF在MATLAB中不起作用,但问题是为什么它适用于Excel?使用CORREL时,Excel是否默认将Inf转换为NaN?因为数据肯定是以inf形式加载的。

----------编辑---------

仔细阅读excel说明后:

来自Office Support

的评论

“如果数组或引用参数包含文本,逻辑值或空单元格,则忽略这些值;但是,包含值为零的单元格。”

因此,当NaN和Inf加载到excel时,它们被视为字符串(文本格式)而不是数字,因此被忽略 - 这应该解释为什么它在Excel上工作。