Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

How to obtain trend p-values for each cell of a matrix?

Asked by Anna on 11 Apr 2013

Hello,

I am trying to output the regression p-values for each cell separately. I've successfully calculated the regression coefficients for each cell using polyfit:

for i=1:695
    for j=1:822
        summer_trend(1:2,i,j)=polyfit(year,summer(:,i,j),1);
    end
end

However, I would now like to obtain the p-values for the coefficients cell-by-cell. Normally, I would use regstats and select tstat.pval but I'm not sure how to apply this over a matrix. I've tried for example the following code but the problem I have is the functions I've found always return a structure (which is no good when I have a matrix instead of vector...):

for i=1:695
    for j=1:822
    summer_pval=regstats(summer(:,i,j),year, 'linear',{'tstat'});
    end
end

Any ideas how I could do this? Many thanks!

0 Comments

Anna

Products

No products are associated with this question.

1 Answer

Answer by Tom Lane on 12 Apr 2013

You are right that regstats returns a structure, but it contains numeric values that you can assign into a matrix. For example, something like this:

s = regstats(pop,cdate,'linear');
coefmat(1:2,1) = s.tstat.beta;
pvalmat(1:2,1) = s.tstat.pval;

2 Comments

Anna on 12 Apr 2013

Hi Tom, Thanks for your reply. However, I'm still not sure how to apply this over a matrix. I can't use my [695X822] matrix as the y input of regstats(y,x), as in your example, as that returns the error "RESPONSES must have a single column".

The loop above that I tried using on the other hand returns the error "The design matrix has more predictor variables than observations".

Would you be able to explain how this can be done cell-by-cell using a matrix (as opposed to a vector column) as the y variable? Thanks

Tom Lane on 13 Apr 2013

I had in mind this modification of your code:

for i=1:695
    for j=1:822
        s = regstats(summer(:,i,j),year);
        summer_trend(1:2,i,j) = s.tstat.beta;
        summer_pval(1:2,i,j)  = s.tstat.pval; 
    end
end
Tom Lane

Contact us