当我运行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
这样做?这里可能出现什么问题?
答案 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说明后:
的评论“如果数组或引用参数包含文本,逻辑值或空单元格,则忽略这些值;但是,包含值为零的单元格。”
因此,当NaN和Inf加载到excel时,它们被视为字符串(文本格式)而不是数字,因此被忽略 - 这应该解释为什么它在Excel上工作。