1
$\begingroup$

I am trying to make sure I understand how TimeSeriesForecast works. I apologize in advance for the basic nature of this question. I am using Mathematica 10.

I create a TimeSeries in a stock like GE, containing O/H/L/C prices and from there estimate a vector autoregression (ARMA) model using some in-sample data. I now want to produce 1-step ahead forecasts, period by period, for the out of sample data. The code I have listed below does this and produces the results as shown.

I want to make 100% sure that the forecast produced for period n are the forecast OHLC prices for period n, and not the forecast prices produced at period n for period n+1. So below, is the first set of forecast prices the forecast for period 8325, or the forecasts produced in period 8325 for period 8326?

Whats confusing me is the with ISend = 8325, I get:

GE["Path"][[ISend + 1]]    
(* {8325, {20.4819, 20.5104, 20.1867, 20.32}} *)

i.e it seems that the TimeSeries variable GE somehow "lags" by 1 period.

Forecasting code

ISend    
(* 8325 *)

n = 1;

forecasts = 
  Flatten[Table[
    TimeSeriesForecast[eproc, 
      TimeSeriesWindow[GE, {ISend - 3 + i, ISend - 2 + i}], {n}, 
      Method -> "Covariance"]["Path"], {i, 1, 386}], 1];

Take[forecasts, 5]

(* {{8325, {19.8498, 19.8257, 19.3094, 
   19.6899}}, {8326, {20.711, 20.7849, 20.3424, 
   21.2416}}, {8327, {20.142, 20.4853, 20.1133, 
   20.2042}}, {8328, {20.1565, 20.2824, 20.009, 
   20.0737}}, {8329, {20.0761, 20.1621, 19.96, 20.0177}}} *)
$\endgroup$
  • $\begingroup$ I too am interested in the new time series functionality in version 10. Can you provide a data set so we can work with the same data ? $\endgroup$ – Steve Jul 19 '14 at 20:45
1
$\begingroup$

Since there are no data accompanying the question there can be no definitive answer; I can speculate though that what seems to be a shifted index in GE["Path"][[ISend + 1]] has to do with how the TimeSeries was constructed in the first place.

Consider the output after evaluating the following example:

ts = TimeSeries[{0.5, 0.75, 0.9}];

ts["Path"]
{{0, 0.5}, {1, 0.75}, {2, 0.9}}

Since no time specification is present in the construction of ts, the time stamps seem to automatically be set to be equal to what Range[0, Length[ts["Values"]]-1] evaluates to ie {0, 1, 2}.

The confusion is probably due to the fact that entries from #["Times"] in a TimeSeries object are not like indexes in Part. The former can be zero-based while the later cannot. Using offsets for time signatures is different than using offsets for Part.

In the present case, the rolling-window estimation can be performed with MovingMap:

(* expand the previous example a bit *)
ts = TimeSeries[{0.5, 0.75, 0.9, 0.15, 0.135, 0.155, 0.175, 0.195, 0.215,  0.465, 0.71}];

(* here, f is applied on each successively obtained sub-sample *)
MovingMap[f, ts, Quantity[5, "Events"]]["Path"]
{
    {4, f[{0.5, 0.75, 0.9, 0.15, 0.135}]}, 
    {5, f[{0.75, 0.9, 0.15, 0.135, 0.155}]}, 
    {6, f[{0.9, 0.15, 0.135, 0.155, 0.175}]}, 
    {7, f[{0.15, 0.135, 0.155, 0.175, 0.195}]}, 
    {8, f[{0.135, 0.155, 0.175, 0.195, 0.215}]}, 
    {9, f[{0.155, 0.175, 0.195, 0.215, 0.465}]}, 
    {10, f[{0.175, 0.195, 0.215, 0.465, 0.71}]}
   }

Assuming a window 5 "Events" wide, MovingMap can produce estimates for each time based on the history specified by the window (current time inclusive). Different specifications can be also accommodated (see documentation).

PS. I can't really tell about v.10 but in v.11.3, multi-valued time series (eg ts = TimeSeries[{{0.97, 0.5}, {1.22, 0.75}, {0.935, 0.465}, {1.18, 0.71}}, Automatic, ValueDimension s -> 2]) are not supported in something like TimeSeriesForecast[TimeSeriesModelFit[ts], {1}] (it produces a TimeSeriesModelFit::mvtsni message with text "The data TimeSeries[] is not scalar-valued. Multivariate support is not currently implemented.")

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.