Dane:
A_1 = [10 200 7 150]';
A_2 = [0.001 0.450 0.007 0.200]';
(Jak inni już wspomniano) Istnieją narzędzia, które po prostu obliczać korelację, najbardziej oczywiście corr
:
corr(A_1, A_2); %Returns 0.956766573975184 (Requires stats toolbox)
Można również użyć corrcoef
funkcji bazowej Matlab, podobnie jak to:
M = corrcoef([A_1 A_2]): %Returns [1 0.956766573975185; 0.956766573975185 1];
M(2,1); %Returns 0.956766573975184
Który jest blisko ly związane z funkcją cov
:
cov([condition(A_1) condition(A_2)]);
Jak prawie dostać się w oryginalne pytanie, można przeskalować i dostosować wektory siebie, jeśli chcesz, co daje nieco lepsze zrozumienie tego, co się dzieje . Najpierw utworzyć funkcję stanu, który odejmuje średnią i dzieli przez odchylenie standardowe:
condition = @(x) (x-mean(x))./std(x); %Function to subtract mean AND normalize standard deviation
pojawi korelacja być (a_1 * A_2)/(a_1^2) w następujący sposób:
(condition(A_1)' * condition(A_2))/sum(condition(A_1).^2); %Returns 0.956766573975185
Dzięki symetrii, to powinno również pracować
(condition(A_1)' * condition(A_2))/sum(condition(A_2).^2); %Returns 0.956766573975185
I to robi.
Wierzę, ale nie mam teraz siły, by potwierdzić, że ta sama matematyka może być użyta do obliczenia korelacji i warunków korelacji krzyżowej w kontaktach z wielowymiarowymi danymi wejściowymi, o ile zachowana zostanie ostrożność podczas obsługi wymiary i orientacje macierzy wejściowych.
Co masz na myśli –
Możesz przeprowadzić regresję liniową między tymi dwoma i sprawdzić wartość r "r". – ja72
@ ja72: Opublikuj jako odpowiedź, z przykładowym kodem. Daj temu pytaniu szansę na ocalenie. –