Vu:
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 calculer simplement la corrélation, plus évidemment corr
:
corr(A_1, A_2); %Returns 0.956766573975184 (Requires stats toolbox)
Vous pouvez également utiliser la fonction de Matlab base corrcoef
, comme ceci:
M = corrcoef([A_1 A_2]): %Returns [1 0.956766573975185; 0.956766573975185 1];
M(2,1); %Returns 0.956766573975184
Qui est proche ment liée à la fonction cov
:
cov([condition(A_1) condition(A_2)]);
Comme vous obtenez presque dans votre question initiale, vous pouvez redimensionner et ajuster les vecteurs vous-même si vous voulez, ce qui donne une compréhension un peu mieux ce qui se passe . Tout d'abord créer 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
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 il le fait. Je crois, mais je n'ai pas l'énergie de confirmer pour le moment, que le même calcul peut être utilisé pour calculer des termes de corrélation et de corrélation croisée quand il s'agit d'entrées multidimensionnelles, à condition de prendre soin de dimensions et orientations des réseaux d'entrée.
Que voulez-vous dire par "mieux?" –
Vous pouvez faire une régression linéaire entre les deux et vérifier la valeur au carré de 'r'. – ja72
@ ja72: Postez-le comme une réponse, avec un exemple de code s'il vous plaît. Donnez à cette question une chance d'être sauvé. –