2016-02-02 5 views
1

Когда я запустил corrcoef, чтобы найти коэффициенты корреляции между двумя массивами данных, я получаю NaNs. Он делает это только для одной партии данных. Вот download link to the data within .mat file.Matlab: Почему корреляция NaN при использовании «corrcoef»?

я запускаю этот код

[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, которая говорит ему игнорировать NaNs.

Я скопировал те же данные в 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 

Теперь, установив 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? По умолчанию Excel превратил Inf в NaN при использовании CORREL? Поскольку данные, конечно же, загружались как inf.

---------- EDIT ---------

После внимательного прочтения инструкции первенствовать:

Замечания от Office Support

«Если массив или ссылочный аргумент содержит текст, логические значения или пустые ячейки, эти значения игнорируются, однако ячейки с нулевым значением включены ».

Поэтому, когда NaN и Inf загружаются в excel, они обрабатываются как строки (текстовый формат), а не номера, и поэтому игнорируются - это должно объяснить, почему это сработало в Excel.

+0

Это что-то, о чем я не знал. По-видимому, есть также Infs :) Я думаю, что на этом пути должно быть разделено ноль. Я думал, что деление на ноль было NaNs. Спасибо! Я потратил день, пытаясь выяснить, что не так с этими данными. –

+1

Не беспокойтесь, всегда проверяйте свой ввод, если выход не ожидается, иногда это могут быть очень маленькие вещи, которые заставляют вас тратить время на просмотр всего процесса. – GameOfThrows

Смежные вопросы