# Correlation Coefficient through time

14 views (last 30 days)
Daniele Ferreti on 27 Mar 2020
Answered: Peter Perkins on 14 Apr 2020
So I'm getting myelf familiar with correlation coeffiecient for a future project. I have a couple objectives I wanted to understand: corrcoef as a whole, and then corrcoef through time (meaning seeing a 'live' corrcoef as the data changes).
So far I made this that works as I wanted:
%% Random Numbers & single output corr. coeff.
rand_1 = randi([0 5],1,20); % 20 random numbers between 0 & 5
rand_2 = randi([0 5],1,20); % 20 random numbers between 0 & 5
rand_3 = randi([0 5],1,20); % 20 random numbers between 0 & 5
r_1 = corrcoef(rand_1,rand_2); % Corr. Coeff. calculation #1 between 1 & 2
R_1 = r_1(2,1) % Actual Value
r_2 = corrcoef(rand_1,rand_3); % Corr. Coeff. calculation #2 between 1 & 3
R_2 = r_2(2,1) % Actual Value
r_3 = corrcoef(rand_2,rand_3); % Corr. Coeff. calculation #3 between 2 & 3
R_3 = r_3(2,1) % Actual Value
%(If you have any input in how to make these ^^^ calculations simpler I would also really appreciate any help)
x = [1:20]; % x axis for plots
figure
subplot(3,2,[1,2])
plot(x,rand_1,'r',x,rand_2,'b') % Plotting for R_1
title(['Random 1: between 1 & 2, C.C. = ',num2str(R_1),''])
axis([1 20 -1 6])
subplot(3,2,[3,4])
plot(x,rand_1,'r',x,rand_3,'g') % Plotting for R_2
title(['Random 2: between 1 & 3, C.C. = ',num2str(R_2),''])
axis([1 20 -1 6])
subplot(3,2,[5,6])
plot(x,rand_2,'b',x,rand_3,'g') % Plotting for R_3
title(['Random 3: between 2 & 3, C.C. = ',num2str(R_3),''])
axis([1 20 -1 6])
Now I wanted to make something similar for the time series but I'm having some trouble understanding where I am going wrong and how to continue:
%% Random Numbers & Output corr. coeff. over time
L = 20; % length of random numbers sample
rand2_1 = randi([0 5],1,L); % L random numbers between 0 & 5
rand2_2 = randi([0 5],1,L); % L random numbers between 0 & 5
rand2_3 = randi([0 5],1,L); % L random numbers between 0 & 5
K = 2*L;
r2_1 = zeros(2,K); r2_2 = zeros(2,K); r2_3 = zeros(2,K); % Creating space
for t = 1:1:L % corr. coeff. #4 through time between 1 & 2
j = 2*t-1;
r2_1(1:2,j:j+1) = corrcoef(rand2_1([t t+1]),rand2_2([t t+1]));
end
I understood that depending on the size of the matrix/data given to corrcoef it would give a different size matrix as an answer (for example a 2x2 in the initial example code's case), but I have not been able to figure that out for this second part. Perhaps I'm extracting the answer wrongly from corrcoef, or perhaps my matrix manipulation is simply wrong.
Anyways, any help would be very much appreciated! Thanks

Daniele Ferreti on 30 Mar 2020
Edited: Daniele Ferreti on 30 Mar 2020
%% Random Numbers & Output corr. coeff. over time
L = 20; % length of random numbers sample
F = 0; % Min random number
G = 5; % Max random number
rand2_1 = randi([F G],1,L); % L random numbers between F & G
rand2_2 = randi([F G],1,L);
rand2_3 = randi([F G],1,L);
R2_1 = zeros(1,L)
for t = 1:1:L-2
a = corrcoef(rand2_1([t t+1 t+2]),rand2_2([t t+1 t+2])); % Corr. coeff. calculation between 1 & 2 (by couples of 3)
b = a(2,1); % Actual wanted value
R2_1(t) = b; % Compiled for plotting
end

Navya Seelam on 30 Mar 2020
Edited: Navya Seelam on 30 Mar 2020
You are trying to access rand2_1([20 21]) in the for loop when t=20 but size of rand2_1 is only 1x20
Daniele Ferreti on 3 Apr 2020
Thanks for the help! Figured the rest out on my own.

Peter Perkins on 14 Apr 2020
"%(If you have any input in how to make these ^^^ calculations simpler I would also really appreciate any help)"
Does this count as simpler?
>> rand_123 = randi([0 5],20,3);
>> R = corrcoef(rand_123);
>> r12 = R(1,2), r13 = R(1,3), r23 = R(2,3)
r12 =
-0.3379
r13 =
-0.1516
r23 =
-0.033438
Also if you have access to the Econometrics Tbx, you might check out autocorr. Or xcorr, although beware: that's writen in the jargon of signal processing, so you have to pick the right parameters to get the thing you are looking for.
There's also the corr fucntion in Stats&MachineLearnign, which does not only linear (Pearson) correlation, but rank (Spearmand and Kendal) correlations too.