Есть ли коэффициент корреляции в MATLAB? - PullRequest
1 голос
/ 22 апреля 2019

Есть ли в Matlab функция, которая вычисляет коэффициент корреляции ? Вот реализация, которую я пытался сделать, но результаты не правильные.

function cr = correlation_ratio(X, Y, L)
ni = zeros(1, L);
sigmai = ni;

for i = 0:(L-1)
   Yn = Y(X == i);
   ni(1, i+1) = numel(Yn);
   m = (1/ni(1, i+1))*sum(Yn);
   sigmai(1, i+1) = (1/ni(1, i+1))*sum((Yn - m).^2);
end
n = sum(ni);
prod = ni.*sigmai;
cr = (1-(1/n)*sum(prod))^0.5;

1 Ответ

1 голос
/ 24 апреля 2019

Это уравнение на странице Википедии :

correlation ratio

где:

  • & eta; - коэффициент корреляции,
  • y x, i - значения выборки ( x - метка класса, i индекс выборки),
  • y x (с полосой сверху) - среднее значение выборочных значений для класса x ,
  • y (с чертой сверху) - среднее значение для всех выборок по всем классам, а
  • n x - количество образцов в классе x .

Вот как я интерпретировал это в коде:

function eta = correlation_ratio(X, Y)
X = X(:); % make sure we've got column vectors, simplifies things below a bit
Y = Y(:);
L = max(X);
mYx = zeros(1, L+1); % we'll write mean per class here
nx = zeros(1, L+1);  % we'll write number of samples per class here
for i = unique(X).'
   Yn = Y(X == i);
   if numel(Yn)>1
      mYx(i+1) = mean(Yn);
      nx(i+1) = numel(Yn);
   end
end
mY = mean(Y);        % mean across all samples
eta = sqrt(sum(nx .* (mYx - mY).^2) / sum((Y-mY).^2));

Петлю можно заменить на accumarray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...