определить, насколько хорошо корреляция в Matlab? - PullRequest
2 голосов
/ 07 декабря 2011

Я работаю с набором данных, и я получил определенные корреляции (используя коэффициент корреляции Пирсона). Меня попросили определить «качество корреляции», и тем самым мой супервизор хочет, чтобы он увидел, какими будут корреляции, если бы я попытался переставить все значения y моих упорядоченных пар и сравнил полученные коэффициенты корреляции. Кто-нибудь знает хороший способ сделать это? Существует ли функция Matlab, которая бы определяла, насколько хорошая корреляция по сравнению с корреляцией между случайными перестановками данных?

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

Вы можете переставлять метки одного вектора N раз и вычислять коэффициент корреляций (cc) для каждой итерации. Затем вы можете сравнить распределение этих значений с реальной корреляцией.

Примерно так:

%# random data
n = 20;
x = (1:n)';
y = x + randn(n,1)*3;

%# real correlation
cc = corr(x,y);

%# do permutations
n_iter = 100; %# number of permutations
cc_iter = zeros(n_iter,1); %# preallocate the vector
for k = 1:n_iter
    ind = randperm(n); %# vector of random permutations
    cc_iter(k) = corr(x,y(ind));
end

%# calculate statistics
cc_mean = mean(cc_iter);
cc_std = std(cc_iter);
zval = cc - cc_mean ./ cc_std;
%# probability that the real cc belongs to the same distribution as cc from permuted data
pv = 2 * normcdf(-abs(zval),cc_mean,cc_std); 

%# plot
hist(cc_iter,20)
line([cc cc],ylim,'color','r') %# real value

enter image description here

Кроме того, если вы вычислите корреляцию с [cc pv] = corr(x,y), вы получите p-значение того, как ваша корреляция отличается от отсутствия корреляции. Это значение p рассчитывается исходя из предположения, что ваш вектор распределен нормально. Однако, если вы вычисляете не корреляцию Пирсона, а корреляцию Спирмена или Кендалла (непараметрическую), эти p-значения будут получены из случайно переставленных данных:

[cc pv] = corr(x,y,'type','Spearman')
2 голосов
/ 07 декабря 2011

Во-первых, вы должны проверить, отличается ли получаемый вами коэффициент корреляции от нуля. Функция corr может сделать это (см. pval).

Во-вторых, если оно значительно отличается от нуля, то вы бы хотели решить, является ли это различие также значительным с практической точки зрения. На практике квадрат коэффициента корреляции ( коэффициент детерминации ) считается значимым, если он больше 0,5, что означает, что вариации одного из коррелированных параметров "объясняют" по меньшей мере 50% вариация другого.

В-третьих, есть случаи, когда коэффициент детерминации близок к единице, но этого недостаточно для определения «добротности корреляции». Например, если вы измеряете одну и ту же переменную двумя разными методами, вы обычно получаете очень похожие значения, поэтому коэффициент корреляции будет почти равен 1. В таких случаях вам следует применить анализ Бленд-Альтмана , который это очень легко реализовать в Matlab, и имеет свои собственные параметры "добродетели" (смещение и так называемые пределы согласия).

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