MATLAB Answers

0

Bootstrap wind data to account for autocorrelation and obtain new slope

Asked by mashtine on 26 Aug 2015
Latest activity Answered by Cloud Blend on 27 Mar 2017
Hi there,
I have a sample dataset (12783x2) containing the time and wind speed values overs 35 years (6 hour intervals). I have noted that there is a large amount of autocorrelation in the wind data and thus I would like to use bootstrapping re-sampling to perform a new regression on the data with time to find a new slope that describes the long term trend in the wind speeds.
I have been trying a few options with bootstrap but cannot get my polyfit function to output a new slope for the resampled dataset. Instead I get multiple slopes and intercepts.
bootstrp(1000,@polyfit,test(:,1),test(:,2),1);
I know I am writing this code incorrectly. Any idea how I can just get one new slope of the bootstrapped data?
I will also like to perform the wblft() function on the data as well to see if the resampled data with bootstrp has a similar distribution to the original.

  0 Comments

Sign in to comment.

1 Answer

Answer by Cloud Blend on 27 Mar 2017

Because 1000 is your first argument, bootstrp is iterating on your data 1000 times, and returning 1000 slopes and 1000 intercepts. You could simply take the mean
mean(bootstrp(1000,@polyfit,test(:,1),test(:,2),1),1);
If your resamples are sparse enough, that may help with your autocorrelation problem. You may want to compute autocorrelation for a number of different time lags and decide what is best using a high p value or a rho that is close to zero:
maxSamples = 1000; %prevents very large correlations from taking too much memory
maxSkip = 1461; %1 year
rhos = NaN(1, maxSkip);
ps = NaN(1, maxSkip);
for frameSkip = 1:maxSkip
sampleTotal = size(test,1)-frameSkip;
sampleInterval = floor(sampleTotal / maxSamples);
bufferSize = min(maxSamples, sampleTotal);
buffer = NaN(bufferSize,2);
sourceCounter = 1;
for destCounter = 1:bufferSize
buffer(destCounter,1) = test(sourceCounter, 2);
buffer(destCounter,2) = test(sourceCounter + frameSkip, 2);
sourceCounter = sourceCounter + sampleInterval;
end
[rho, p] = corr(buffer);
rhos(frameSkip) = rho(2);
ps(frameSkip) = p(2);
end

  0 Comments

Sign in to comment.