I have a few thousand time series of the same length, and for each I'd like to obtain its linear trend and the corresponding p-value. I use for loops and estimate the trend/p-value for each time series sequentially using the robustfit function.
The whole thing doesn't take much time. But still I wonder whether it is possible to vectorize the trend estimates. I understand I can get all linear trends at once using the backslash operator. But that doesn't give p-values.

 Réponse acceptée

Matt J
Matt J le 24 Mai 2013
Modifié(e) : Matt J le 24 Mai 2013

0 votes

I understand I can get all linear trends at once using the backslash operator. But that doesn't give p-values.
First, it might not be a good idea to use backslash straightforwardly. Polynomial fitting has certain numerically sensitive properties. POLYFIT uses a QR decomposition:
[Q,R] = qr(V,0);
ws = warning('off','all');
p = R\(Q'*y); % Same as p = V\y;
warning(ws);
if size(R,2) > size(R,1)
warning(message('MATLAB:polyfit:PolyNotUnique'))
elseif warnIfLargeConditionNumber(R)
if nargout > 2
warning(message('MATLAB:polyfit:RepeatedPoints'));
else
warning(message('MATLAB:polyfit:RepeatedPointsOrRescale'));
end
end
But anyway, once you've found a solution to the system V*x=Y, it seems to me that you could vectorize the p-values by analyzing the residuals,
R=V*x-Y; %residuals
Rmean=mean(R,2);
Rstd=std(R,0,2);
R=bsxfun(@minus,R,Rmean); %Normalize the residuals
R=bsxfun(@rdivide,R,Rstd);
pvalues=sum(R>=quantile,2);

Plus de réponses (0)

Catégories

En savoir plus sur Linear and Nonlinear Regression dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by