Apply(Difference(times = n, lag = k), timeseries)
Unapply(Difference(times = n, lag = k), forecast)
Unapply(Difference(times = n, lag = k), forecast, origin = o)
TimeSeries data set
positive integer (optional)
TimeSeries data set, typically obtained from a forecasting method
specification of origin ; list of Matrices
The differencing transformation takes a time series T1,T2,T3,... and returns the time series T2−T1,T3−T2,....
Apply this transformation to a time series using the Apply command. Translate differenced information such as forecasts back to the original domain by using the Unapply command.
By using the lag option, one can difference a time series with a given lag. In particular, the transformation Difference⁡lag=2 transforms the time series T1,T2,T3,... into T3−T1,T4−T2,T5−T2,.... The default lag is 1.
If there are missing data points (represented in Maple by the value undefined in the time series), the differencing transformation skips over them while leaving the undefined value in place. For example, if T4 is undefined, then the result of differencing with lag=2 is
This is done so that Unapply can recover the data.
By using the times option, one can specify the transformation that consists of differencing multiple times. The default is times=1. Specifying times=2, for example, describes the transformation that takes the time series T1,T2,T3,... to T1+T3−2⁢T2,T2+T4−2⁢T3,....
Every time differencing is applied, the resulting time series has k data points fewer than the input. This is reflected in the timestamps; the first timestamp is omitted from the resulting time series. In other words, the timestamp for the difference T2−T1 is taken to be the time at which T2 occurred, because it is only at this time that both T1 and T2 are available and the first difference can be computed.
For the Unapply call, to transform T2−T1,T3−T2,... back into the original T1,T2,T3,..., Maple needs to know the value T1, which will be referred to as the origin. If the forecast is created using TimeSeriesAnalysis commands, then Unapply can generally find the time series object from which the original differences were taken, and use this object to infer the origin. Otherwise, or to override this choice, the origin can be specified explicitly using the origin=o option.
In the example above, only a single number was needed. However, if forecast contains m data sets, then a Vector of m origins is needed - one for every data set. Moreover, if lag=k, then each data set needs k independent origins; all of these are arranged in a kx_m_ Matrix. Finally, with times=n, we need such a Matrix for every differencing operation that is undone.
The most explicit way to specify the origin argument is therefore as a list of n Matrices, each of size kx_m_. However, several shortcuts are available:
A Matrix can be specified as a list or Vector of the elements needed.
A Matrix can be specified as the list or Vector of the elements of its first row; this row will be repeated k times.
A Matrix can be specified as a single number, which the k⁢x⁢m Matrix will be filled with.
Instead of a list of Matrices, you can specify a single n⁢x⁢m Matrix, each row of which will be expanded into a k⁢x⁢m by repeating it k times.
Finally, if you specify a single number, it will be used to fill all n of the k⁢x⁢m
sales_numbers ≔ 150,147,114,113,91,164,56,39,32,86
sales ≔ TimeSeries⁡sales_numbers,startdate=2010-01-01,frequency=weekly,header=Weekly Sales
sales≔Time seriesWeekly Sales10 rows of data:2010-01-01 - 2010-03-05
Here are the differences in sales from week to week.
differenced ≔ Apply⁡Difference,sales
differenced≔Time seriesWeekly Sales (differenced)9 rows of data:2010-01-08 - 2010-03-05
Reconstructing the original data (except for the first row):
original ≔ Unapply⁡Difference,differenced
original≔Time seriesWeekly Sales9 rows of data:2010-01-08 - 2010-03-05
The original data, differenced twice:
differenced_twice ≔ Apply⁡Difference,differenced
differenced_twice≔Time seriesWeekly Sales (differenced) (differenced)8 rows of data:2010-01-15 - 2010-03-05
You can do this in one step, too. The header gets a bit nicer name in this case:
differenced_twice_2 ≔ Apply⁡Difference⁡'times'=2,sales
differenced_twice_2≔Time seriesWeekly Sales (differenced twice)8 rows of data:2010-01-15 - 2010-03-05
Unapplying differencing twice leads to the original data (minus the first two rows).
original_2 ≔ Unapply⁡Difference⁡'times'=2,differenced_twice
original_2≔Time seriesWeekly Sales8 rows of data:2010-01-15 - 2010-03-05
original_3 ≔ Unapply⁡Difference⁡'times'=2,differenced_twice_2
original_3≔Time seriesWeekly Sales8 rows of data:2010-01-15 - 2010-03-05
You can also perform two operations of unapplying differencing once, to either differenced_twice or differenced_twice_2.
intermediate ≔ Unapply⁡Difference,differenced_twice
intermediate≔Time seriesWeekly Sales (differenced)8 rows of data:2010-01-15 - 2010-03-05
original_4 ≔ Unapply⁡Difference,intermediate
original_4≔Time seriesWeekly Sales8 rows of data:2010-01-15 - 2010-03-05
intermediate_2 ≔ Unapply⁡Difference,differenced_twice_2
intermediate_2≔Time seriesWeekly Sales (differenced)8 rows of data:2010-01-15 - 2010-03-05
original_5 ≔ Unapply⁡Difference,intermediate_2
original_5≔Time seriesWeekly Sales8 rows of data:2010-01-15 - 2010-03-05
If you expect a biweekly pattern, you can difference with lag = 2.
differenced_lag2 ≔ Apply⁡Difference⁡lag=2,sales
differenced_lag2≔Time seriesWeekly Sales (differenced)8 rows of data:2010-01-15 - 2010-03-05
If one of the data points were missing, you can still do the transformation and back-transformation.
sales_numbers5 ≔ undefined:sales_numbers
sales_missing ≔ TimeSeries⁡sales_numbers,startdate=2010-01-01,frequency=weekly,header=Weekly Sales
sales_missing≔Time seriesWeekly Sales10 rows of data:2010-01-01 - 2010-03-05
differenced_lag2_missing ≔ Apply⁡Difference⁡lag=2,sales_missing
differenced_lag2_missing≔Time seriesWeekly Sales (differenced)8 rows of data:2010-01-15 - 2010-03-05
Weekly Sales (differenced)
Specifying the origin option
Consider the following time series.
ts ≔ TimeSeries⁡seq⁡3..−3,−1,seq⁡3..−9,−2
ts≔Time seriesdata set 1, data set 27 rows of data:2016 - 2022
If you try to unapply a differencing operation, Maple complains that it cannot find the origin.
Error, (in TimeSeriesAnalysis:-Difference:-Unapply) origin cannot be deduced; try specifying it using the 'origin' option
With times=1 and lag=1 (the default), you need to specify a list of one 1x_2_ Matrix.
result1 ≔ Unapply⁡Difference,ts,'origin'=Matrix⁡1,2,2,3
result1≔Time seriesdata set 1, data set 27 rows of data:2016 - 2022
This can also be specified as just the list 2,3.
result2 ≔ Unapply⁡Difference,ts,'origin'=2,3
result2≔Time seriesdata set 1, data set 27 rows of data:2016 - 2022
If you set lag=3, you need to specify values for three previous data points for each data set. You can give a list with a single Matrix - or just specify the Matrix directly.
result3 ≔ Unapply⁡Difference⁡lag=3,ts,'origin'=1,2,4|3,−2,−1
result3≔Time seriesdata set 1, data set 27 rows of data:2016 - 2022
If you set lag=3 and times=2, then you need to specify all these values for both times that you unapply differencing. The two matrices need to be specified in a list, in the order in which they will be used.
result4 ≔ Unapply⁡Difference⁡lag=3,times=2,ts,'origin'=1,2,4|3,−2,−1,2,0,−3|0,0,1
result4≔Time seriesdata set 1, data set 27 rows of data:2016 - 2022
The TimeSeriesAnalysis[Difference] command was introduced in Maple 18.
For more information on Maple 18 changes, see Updates in Maple 18.
Download Help Document