Вручную рассчитать корреляцию Пирсона в R? - PullRequest
0 голосов
/ 20 апреля 2020

enter image description here Я пытаюсь вычислить корреляцию Пирсона между двумя векторами данных.

x = c(5,5,4,5,5,5)
y = c(0,5,0,3,5,4)
mx = mean(x)
my = mean(y)
newx = c(x-mx)
newy = c(y-my)
corr = (newx%*%t(newy)/sqrt((newx^2)%*%(sqrt(newy^2)))

Моя первая главная проблема заключается в том, что эта корреляция рассчитывается путем игнорирования 0 значений. Тем не менее, я не верю, что мои окончательные расчеты были бы возможны, если бы я их полностью опустил.

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

1 Ответ

2 голосов
/ 20 апреля 2020

У вас есть пара ошибок. Во-первых, вам не хватает закрывающей скобки. Во-вторых, числитель задом наперед. Вы хотите транспонировать первый компонент, а не второй. И вы забыли суммировать знаменатели.

c(t(newx) %*% newy) / (sqrt(sum(newx^2)) * sqrt(sum(newy^2)))
#[1] 0.5991713

cor(x, y)
#[1] 0.5991713

В качестве альтернативы вы можете использовать crossprod.

crossprod(newx, newy) / (sqrt(sum(newx^2)) * sqrt(sum(newy^2)))
          [,1]
[1,] 0.5991713
...