How to output both rho and pvalues of the Corr function when having an iterative loop

4 views (last 30 days)
Hi, I can't seem to get around how to do this. I have 12xm matrix (a1) of which I want to calculate the linear rank correlation rho an pvalues (using Corr function and pearson correlation type) from paired columns vectors, i.e. between 6 rows in each column and the next 6 rows in that column (these are replicate measurements, designated rep1 and rep2, respectively), and I want to iterate that with a for loop for all the m columns in the matrix a1.
I have it working so that it spits out the rho values in a 1xm vector, but I don't know how to get the script to do that also for the p-values associated with each correlation.
this is the script I have:
results=zeros(1,size(a1,2));
rep1=a1(1:6,1:size(a1,2));
rep2=a1(7:12,1:size(a1,2));
for repit = 1:size(a1,2);
results(repit) = corr(rep1(:,repit),rep2(:,repit));
end
I know that [r,p] = corr(x,y) gives me both the r and p-value, but how do I build this into the iterative loop that I have going so that it does that for each each two column vectors in every columns of the a1 matrix.....?
I hope I am making this clear enough... otherwise, don't bother asking for clarifications.
Thank you.

Accepted Answer

Mischa Kim
Mischa Kim on 21 Mar 2014
Edited: Mischa Kim on 21 Mar 2014
Fly, you could use a cell array:
...
[r{repit} p{repit}] = corr(rep1(:,repit),rep2(:,repit));
...
The results from the first iteration are then accessed via r{1} and p{1}, from the second in r{2}...
If the r- and p-values are scalars, you can also just use simple numeric arrays:
[r(repit) p(repit)] = corr(rep1(:,repit),rep2(:,repit));
The advantage of cell arrays for non-scalars is that you don't need to worry about matrix dimensions.

More Answers (0)

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!