find a correlation
8 views (last 30 days)
Show older comments
I have a Matrix
X=[0.231914928 3.126057882 -1.752476846
-0.779092587 2.143243132 -1.944363312
-1.744892449 1.206497824 -2.267829067
-0.276817947 1.774687601 -1.768924258
-0.367233254 1.697905199 -1.508506912
-0.367233254 1.697905199 -1.508506912
-1.378240769 0.814907572 -1.700393377
-2.389248284 -0.060411815 -1.892279842
-1.333033116 0.860977013 -1.831972668
0.135041386 1.40613207 -1.333067858]
Y=[0.253549664
-0.231692981
0.768395971
2.988670669
-0.038625616
-0.038625616
-0.525155376
-1.011685136
0.961463336
3.181738034]
At first I want to calculate the correlation coefficient between all X columns which can be done like this
[R]=corrcoef(X)
then I want to see which pair of columns has the highest correlation together for example column 1 with 2 ? 1 with 3? 2 with 3?
then the one that has correlation more than 0.5 lets say for example columns 1 and 2 , then check their correlation with y and say which one is more correlated
2 Comments
Daniel Shub
on 5 Sep 2011
Mohammad, in general, I think your questions are great questions for Answers, but often I feel that I do not understand your questions. I think it would be easier for those of us who chose to answer questions, if you could spend a little more time composing your questions.
Accepted Answer
Grzegorz Knor
on 5 Sep 2011
For highest correlation:
maxR = max(max(triu(R,1))) % highest correlation
[row,col] = find(R==maxR,1,'first')
The greatest correlation occurs between the columns row an col.
Second question:
[r w] = max([corr(X(:,row),Y) corr(X(:,col),Y)])
w equal to 1 means that X(:,row) has a higher correlation than X(:,col). w equal to 2 mean that X(:,col) has a higher correlation than X(:,row).
6 Comments
More Answers (2)
the cyclist
on 5 Sep 2011
It wasn't perfectly clear to me if you wanted to find correlation with Y for all the columns that had r>0.5, or only the highest. This does all of them. Maybe you could tailor this to what you need.
r = corrcoef(X); % Correlation coefficiant
[i j] = find(r>0.5); % Indices of r > 0.5
indexToOffDiagonalElementsWithHighCorrelation = (i~=j); % Only use off-diagonal elements
XColumnsWithHighCorrelation = unique(i(indexToOffDiagonalElementsWithHighCorrelation))
for nx = 1:numel(XColumnsWithHighCorrelation)
rxy{nx} = corrcoef(X(:,XColumnsWithHighCorrelation(nx)),Y);
disp(rxy{nx})
end
3 Comments
Andrei Bobrov
on 5 Sep 2011
[v id]= max(triu(corrcoef([X,Y]),1))
Variant last
R = triu(corrcoef([X,Y]),1)
Rx = R(1:end-1,1:end-1)
Rx05 = Rx.*(Rx>.5)
[ix jx] = find(Rx05==max(Rx05(:)))
cYX = R([ix,jx],4)
[vXY xi]= max(cYX)
7 Comments
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!