2016-02-02 88 views
1

當我運行corrcoef找到兩個數據數組之間的相關係數時,我得到了NaNs。它只爲一批數據做到這一點。這是一個download link to the data within .mat fileMatlab:爲什麼在使用'corrcoef'時關聯NaN?

我運行此代碼

[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。

我不認爲數據中的NaNs是問題,因爲我使用'pairwise'參數corrcoef函數,它告訴它忽略NaN。

我將相同的數據複製到Microsoft Excel中,並計算出相關係數就好了。這裏是計算相關係數的Excel file。爲什麼corrcoef沒有?這裏可能會出現什麼問題?

回答

3

我不得不下載此文件並將其插入以查看發生了什麼。

是的你是對的,當用pairwise功能處理數據時,與任何元素= NaN的對都被有效地從操作中移除;

但是 - INFs呢?在你的[data.Series1]中 - 你有INF條目,這似乎是造成這個問題。

我提取數據串聯成2個矢量A和B:

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

>> max (A) 
    ans = 
    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上工作。

+0

哇,這是我沒有意識到的東西。顯然,也有Infs :)我認爲一路上必須除以零。我以爲零分是NaN。謝謝!我花了一天的時間試圖弄清楚這些數據有什麼問題。 –

+1

不用擔心,如果輸出不是預期的,請務必檢查您的輸入,有時可能會導致您浪費時間查看整個過程。 – GameOfThrows