Корреляция Пирсона без использования нулевого элемента в Matlab - PullRequest
0 голосов
/ 27 октября 2011

У меня есть 2 примера вектора в Matlab:

A = [5,3,3,0,4,1,5,0,2,5,5,0,5,3,4,0,1,4,4,0,4,2]; B = [1,0,0,0,1,0,4,0,0,0,0,4,4,0,1,0,0,0,0,0,0,0];

Когда я пытаюсь вычислить корреляцию Пирсона ручным методом и сделать это с помощью Excel, у меня тот же результат ( 0,667 )

1 0,667 0,667 1

Но когда я попробовал в MatLab с простым кодом:

pearson = corr(A',B');

, он возвращает результат с другим счетом ( 0,2139 ).

1 0,2139 0,2139 1

Возможно, это происходит потому, что для его вычисления используется нулевой счет (0).Это происходит потому, что пропущенное значение будет заменено на ноль (0) в matlab.

В корреляции Пирсона, которая использует только совместно оцененное значение для его вычисления.(см. жирный шрифт)

A = [ 5 , 3,3,0, 4 , 1, 5 , 0,2, 5,5,0, * * 5 тысяча тридцать один * +1032 *, 3 *, 4 * 1 033 , 0,1,4,4,0,4,2];B = [ 1 , 0,0,0, 1 , 0, 4 , 0,0,0,0,4, 4 , 0, 1 , 0,0,0,0,0,0,0];

или это можно сделать простым:

A = [ 5 * 1 050 *, 4 * * тысяча пятьдесят-две, * 1 053 * 5 , 5 , 4 * 1 058 *];B = [ 1 , 1 , 4 , 4 , 1 ];

Кто-нибудь знает, как сделать простой код для этого?Я попробовал это в процедурном коде: сначала сделайте функцию corated, average_corated, затем, наконец, вычислите сходство.это стоит слишком много времени.

Спасибо, прежде чем:)

Ответы [ 2 ]

3 голосов
/ 27 октября 2011

Вы должны получить индекс для того, где хорошие данные находятся в первую очередь:

goodData = A~=0 & B~=0; %# true wherever there's data for both A and B

pearson = corr(A(goodData),B(goodData));
0 голосов
/ 27 октября 2011

Я думаю, что это один вкладыш: pearson = corr(A(B ~= 0)', B(B ~= 0)')

B ~= 0 создает двоичную матрицу размером size(B), которая равна 1, если соответствующая запись в B не равна нулю, и 0 в противном случае. Вы также можете индексировать в матрицу, используя двоичные матрицы одинакового размера, так что это всегда должно работать, если size(A) == size(B).

...