Info

This question is closed. Reopen it to edit or answer.

Computing the same series two different ways produces different results

1 view (last 30 days)
I have 2 time series, one containing the nominal price of a good (price_n) and one containing the consumer price index (cpi). I am interested in getting the real return on that good.
Method 1:
Get the real price series (price_r) and then the real return (ret_r).
price_r = price_n./cpi*cpi(1);
ret_r = price_r(2:end)./price_r(1:end-1)-1;
Method 2:
Get the nominal return (ret_n), inflation (infl) and then the real return.
ret_n = price_n(2:end)./price_n(1:end-1)-1;
infl = cpi(2:end)./cpi(1:end-1)-1;
ret_r = (1+ret_n)./(1+infl)-1;
When I do the above in Excel I am getting the exact same result, when I do it in MATLAB however I don't. Method 1 produces in MATLAB the same result I get in Excel, but Method 2 gives me a series that differs from the first one by as much as +/- 0.001 at times. My first guess was that it's a rounding error, but I find it strange to have a rounding error in MATLAB when Excel can do this and especially one of this size. Can anybody point to me what am I doing wrong?
Thank you, Alex
  3 Comments
Alexandru
Alexandru on 18 Aug 2012
Thanks for your help, but never mind I found the error. I was importing both the cpi and the inflation values from a file rather than computing the inflation myself. Apparently there's a problem with those numbers...
Matt Fig
Matt Fig on 18 Aug 2012
Yes, we need some values. For instance, I use this data:
price_n = round(rand(1,15)*100000)/100; % Up to 1000
cpi = round(rand(1,15)*20000)/100; % Up to 200
price_r = price_n./cpi*cpi(1);
ret_r = price_r(2:end)./price_r(1:end-1)-1;
ret_n = price_n(2:end)./price_n(1:end-1)-1;
infl = cpi(2:end)./cpi(1:end-1)-1;
ret_R = (1+ret_n)./(1+infl)-1;
% Now find the maximum difference:
max(diff([ret_r.',ret_R'],[],2))
And the most I have found is 1e-14.

Answers (0)

Community Treasure Hunt

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

Start Hunting!