Расчет коэффициента и ковариации Пирсона в Matlab - PullRequest
7 голосов
/ 13 апреля 2011

Я хочу вычислить коэффициент корреляции Пирсона в Matlab (без использования функции corr Matlab).

Проще говоря, у меня есть два вектора A и B (каждый из них 1x100), и я пытаюсь вычислить коэффициент Пирсона следующим образом:

P = cov(x, y)/std(x, 1)std(y,1)

Я использую функции Matlab cov и std. Чего я не понимаю, так это того, что функция cov возвращает мне квадратную матрицу, подобную этой:

corrAB =
    0.8000    0.2000
    0.2000    4.8000

Но я ожидаю единственное число в качестве ковариации, поэтому я могу придумать одно число P (коэффициент Пирсона). Какой смысл я упускаю?

Ответы [ 2 ]

10 голосов
/ 13 апреля 2011

Я думаю, вы просто запутались с ковариацией и ковариационной матрицей, и математические обозначения и входные данные функции MATLAB выглядят одинаково.В математике cov(x,y) означает ковариацию двух переменных x и y.В MATLAB cov(x,y) вычисляет ковариационную матрицу из x и y.Здесь cov - это функция, а x и y - входные данные.

Для ясности позвольте мне обозначить ковариацию C.cov(x,y) MATLAB возвращает матрицу вида

C_xx    C_xy
C_yx    C_yy

Как указал RichC, вам нужны недиагонали, C_xy (обратите внимание, что C_xy=C_yx для реальных переменных x и y).Сценарий MATLAB, который выдает коэффициент Пирсона для двух переменных x и y, имеет вид:

C=cov(x,y);
p=C(2)/(std(x)*std(y));
2 голосов
/ 13 апреля 2011

Из документов:

cov (X, Y), где X и Y - матрицы с таким же количеством элементов, является эквивалентно cov ([X (:) Y (:)]).

использование:

C = cov(X,Y);
coeff = C(1,2) / sqrt(C(1,1) * C(2,2))
...