Trouble with Rescaled Range algorithm
Show older comments
Hello, everyone.
I'm trying to implement Rescaled Range algorithm from https://en.wikipedia.org/wiki/Rescaled_range and other sources, and using this generator https://uk.mathworks.com/matlabcentral/fileexchange/38935-fractional-brownian-motion-generator?s_tid=srchtitle to check how correct algorithm works. The problem is my algorithm doesn't work properly, Hurst estimation in the result is about source Hurst+0.5-0.9.
E.g. I set Hurst in fBm model = 0.1, alrogithm result is 0.59+. I tried to use several variations of code and still have same error
about Hurst+0.5-0.9. I ask you for help. Thank you a lot.
Here's the code of algorithm.
function [X,M,cumdev,rs,logRS,logN,H] = rsnew(x)
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
idx = size(x,1)-1;
n = idx;
rows = floor(idx/n);
c = 0;
while rows <= idx/2
X = reshape(x(1:rows*n),rows,n); % если вернусь к N, заменить x на N
M = ones(rows,n).*mean(X,2);
demeaned = X - M;
cumdev = cumsum(demeaned,2);
rangeres = zeros(rows,n);
for i = 1:rows
for j = 1:n
rangeres(i,j) = max(cumdev(i,1:j)) - min(cumdev(i,1:j));
end
end
stdev = ones(rows,n).*std(X,1,2);
rs = rangeres./stdev;
averageRS(1,c+1) = mean(mean(rs,2));
logRS(1,c+1) = log(averageRS(1,c+1));
logN(1,c+1) = log(n);
c = c+1;
n = 2^(log2(n)-1);
rows = floor(idx/n);
end
H = logRS/logN;
p = polyfit(logN,logRS,9);
f = polyval(p,logN);
figure
plot(logN,logRS,'o')
hold on
plot(logN,f)
legend('logRS','f')
xlabel('log(number of test)'),ylabel('log(R/S)')
% axis([logN(1) logN(end) -inf +inf]),drawnow
end
Answers (0)
Categories
Find more on Assembly 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!