Corrélation entre deux vecteurs?
j'ai deux vecteurs:
A_1 =
10
200
7
150
A_2 =
0.001
0.450
0.0007
0.200
<!-Je voudrais savoir s'il y a une corrélation entre ces deux vecteurs.
<!-Je pourrais soustraire à chaque valeur la moyenne du vecteur et que faire:
A_1' * A_2
existe-il des meilleures façons?
4 réponses
étant donné:
A_1 = [10 200 7 150]';
A_2 = [0.001 0.450 0.007 0.200]';
(comme d'autres l'ont déjà souligné) il existe des outils pour simplement calculer la corrélation, bien évidemment corr
:
corr(A_1, A_2); %Returns 0.956766573975184 (Requires stats toolbox)
vous pouvez aussi utiliser les bases Matlab's corrcoef
fonction, comme ceci:
M = corrcoef([A_1 A_2]): %Returns [1 0.956766573975185; 0.956766573975185 1];
M(2,1); %Returns 0.956766573975184
Qui est étroitement liée à l' cov
fonction:
cov([condition(A_1) condition(A_2)]);
comme vous arrivez presque à dans votre question originale, vous pouvez mettre à l'échelle et ajuster les vecteurs vous-même si vous voulez, ce qui donne un légèrement meilleure compréhension de ce qui se passe. Créer d'abord une fonction de condition qui soustrait la moyenne, et divise par l'écart-type:
condition = @(x) (x-mean(x))./std(x); %Function to subtract mean AND normalize standard deviation
alors la corrélation semble être (A_1 * A_2) / (A_1^2), comme ceci:
(condition(A_1)' * condition(A_2)) / sum(condition(A_1).^2); %Returns 0.956766573975185
Par symétrie, cela devrait aussi fonctionner
(condition(A_1)' * condition(A_2)) / sum(condition(A_2).^2); %Returns 0.956766573975185
et c'est le cas.
je crois, mais je n'ai pas l'énergie pour confirmer maintenant, que le même calcul peut être utilisé pour calculer la corrélation et le croisement termes de corrélation lorsqu'il s'agit d'entrées multidimensionnelles, dans la mesure où l'on prend soin de gérer les dimensions et les orientations des ensembles d'entrées.
xcorr
, c'est une fonction intégrée dans MATLAB pour le cross-corrélation:
c = xcorr(A_1, A_2);
cependant, notez qu'il nécessite le Boîte À Outils Pour Le Traitement Des Signaux installé. Si non, vous pouvez regarder dans le corrcoef
commander à la place.
pour les corrélations, vous pouvez simplement utiliser la fonction corr (boîte à outils statistiques)
corr(A_1(:), A_2(:))
Notez que vous pouvez aussi utiliser
corr(A_1, A_2)
Pour effectuer une régression linéaire entre deux vecteurs x
et y
suivez ces étapes:
[p,err] = polyfit(x,y,1); % First order polynomial
y_fit = polyval(p,x,err); % Values on a line
y_dif = y - y_fit; % y value difference (residuals)
SSdif = sum(y_dif.^2); % Sum square of difference
SStot = (length(y)-1)*var(y); % Sum square of y taken from variance
rsq = 1-SSdif/SStot; % Correlation 'r' value. If 1.0 the correlelation is perfect
x=[10;200;7;150]
et y=[0.001;0.45;0.0007;0.2]
je rsq = 0.9181
.
URL de référence:http://www.mathworks.com/help/matlab/data_analysis/linear-regression.html