Data:
A_1 = [10 200 7 150]';
A_2 = [0.001 0.450 0.007 0.200]';
(Come altri hanno già fatto notare) Ci sono strumenti per calcolare semplicemente la correlazione, il più evidente corr
:
corr(A_1, A_2); %Returns 0.956766573975184 (Requires stats toolbox)
è anche possibile utilizzare la funzione di base di Matlab corrcoef
, come this:
M = corrcoef([A_1 A_2]): %Returns [1 0.956766573975185; 0.956766573975185 1];
M(2,1); %Returns 0.956766573975184
Quale è vicino LY in relazione alla funzione cov
:
cov([condition(A_1) condition(A_2)]);
Come quasi arriva a nella tua domanda iniziale, è possibile scalare e regolare i vettori da soli se si vuole, che dà un po 'migliore comprensione di ciò che sta accadendo . Innanzitutto creare una funzione condizione che sottrae la media, e divide per la deviazione standard:
condition = @(x) (x-mean(x))./std(x); %Function to subtract mean AND normalize standard deviation
Appare quindi la correlazione di essere (A_1 * A_2)/(A_1^2), in questo modo:
(condition(A_1)' * condition(A_2))/sum(condition(A_1).^2); %Returns 0.956766573975185
Per simmetria, questo dovrebbe funzionare anche
(condition(A_1)' * condition(A_2))/sum(condition(A_2).^2); %Returns 0.956766573975185
E lo fa.
Credo, ma non ho l'energia per confermare in questo momento, che la stessa matematica può essere usata per calcolare i termini di correlazione e di correlazione incrociata quando si tratta di input multi-dimensiotnal, a patto che si prenda cura quando si maneggia il dimensioni e orientamenti degli array di input.
Cosa intendi con "migliore?" –
È possibile eseguire una regressione lineare tra i due e controllare il valore quadrato 'r'. – ja72
@ ja72: pubblicalo come risposta, con il codice di esempio per favore. Dai a questa domanda qualche possibilità di essere salvato. –