Description Usage Arguments Value Author(s) References See Also Examples
Automatically selects parameters (lambda coefficients) for an STR decomposition of time series data.
Heuristic approach can give a better estimate compare to a standard optmisaton methods used in STR
.
If a parallel backend is registered for use before STR
call,
heuristicSTR
will use it for nfold cross validation computations.
1 2 3 4  heuristicSTR(data, predictors, confidence = NULL, lambdas = NULL,
pattern = extractPattern(predictors), nFold = 5, reltol = 0.005,
gapCV = 1, solver = c("Matrix", "cholesky"), trace = FALSE,
ratioGap = 1e+12, relCV = 0.01)

data 
Time series or a vector of length L. 
predictors 
List of predictors.

confidence 
A vector of percentiles giving the coverage of confidence intervals.
It must be greater than 0 and less than 1.
If 
lambdas 
An optional parameter. A structure which replaces lambda parameters provided with predictors. It is used as either a starting point for the optimisation of parameters or as the exact model parameters. 
pattern 
An optional parameter which has the same structure as 
nFold 
An optional parameter setting the number of folds for cross validation. 
reltol 
An optional parameter which is passed directly to 
gapCV 
An optional parameter defining the length of the sequence of skipped values in the cross validation procedure. 
solver 
A vector with two string values. The only supported combinations are: c("Matrix", "cholesky") (default), and c("Matrix", "qr"). The parameter is used to specify a particular library and method to solve the minimisation problem during STR decompositon. 
trace 
When 
ratioGap 
Ratio to define hyperparameter bounds for onedimensional search. 
relCV 
Minimum improvement required after all predictors tried. It is used to exit heuristic serach of lambda parameters. 
A structure containing input and output data.
It is an S3 class STR
, which is a list with the following components:
output – contains decomposed data. It is a list of three components:
predictors – a list of components where each component corresponds to the input predictor. Every such component is a list containing the following:
data – fit/forecast for the corresponding predictor (trend, seasonal component, flexible or seasonal predictor).
beta – beta coefficients of the fit of the coresponding predictor.
lower – optional (if requested) matrix of lower bounds of confidence intervals.
upper – optional (if requested) matrix of upper bounds of confidence intervals.
random – a list with one component data, which contains residuals of the model fit.
forecast – a list with two components:
data – fit/forecast for the model.
beta – beta coefficients of the fit.
lower – optional (if requested) matrix of lower bounds of confidence intervals.
upper – optional (if requested) matrix of upper bounds of confidence intervals.
input – input parameters and lambdas used for final calculations.
data – input data.
predictors  input predictors.
lambdas – smoothing parameters used for final calculations (same as input lambdas for STR method).
cvMSE – optional cross validated (leave one out) Mean Squared Error.
optim.CV.MSE or optim.CV.MAE – best cross validated Mean Squared Error or Mean Absolute Error (nfold) achieved during minimisation procedure.
nFold – the input nFold
parameter.
gapCV – the input gapCV
parameter.
method – contains strings "STR"
or "RSTR"
depending on used method.
Alexander Dokumentov
Dokumentov, A., and Hyndman, R.J. (2016) STR: A SeasonalTrend Decomposition Procedure Based on Regression www.monash.edu/business/econometricsandbusinessstatistics/research/publications/ebs/wp1315.pdf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132  TrendSeasonalStructure < list(segments = list(c(0,1)),
sKnots = list(c(1,0)))
WDSeasonalStructure < list(segments = list(c(0,48), c(100,148)),
sKnots = c(as.list(c(1:47,101:147)), list(c(0,48,100,148))))
TrendSeasons < rep(1, nrow(electricity))
WDSeasons < as.vector(electricity[,"WorkingDaySeasonality"])
Data < as.vector(electricity[,"Consumption"])
Times < as.vector(electricity[,"Time"])
TempM < as.vector(electricity[,"Temperature"])
TempM2 < TempM^2
TrendTimeKnots < seq(from = head(Times, 1), to = tail(Times, 1), length.out = 116)
SeasonTimeKnots < seq(from = head(Times, 1), to = tail(Times, 1), length.out = 24)
TrendData < rep(1, length(Times))
SeasonData < rep(1, length(Times))
Trend < list(name = "Trend",
data = TrendData,
times = Times,
seasons = TrendSeasons,
timeKnots = TrendTimeKnots,
seasonalStructure = TrendSeasonalStructure,
lambdas = c(1500,0,0))
WDSeason < list(name = "Dayly seas",
data = SeasonData,
times = Times,
seasons = WDSeasons,
timeKnots = SeasonTimeKnots,
seasonalStructure = WDSeasonalStructure,
lambdas = c(0.003,0,240))
StaticTempM < list(name = "Temp Mel",
data = TempM,
times = Times,
seasons = NULL,
timeKnots = NULL,
seasonalStructure = NULL,
lambdas = c(0,0,0))
StaticTempM2 < list(name = "Temp Mel^2",
data = TempM2,
times = Times,
seasons = NULL,
timeKnots = NULL,
seasonalStructure = NULL,
lambdas = c(0,0,0))
Predictors < list(Trend, WDSeason, StaticTempM, StaticTempM2)
elec.fit < heuristicSTR(data = Data,
predictors = Predictors,
gapCV = 48*7)
plot(elec.fit,
xTime = as.Date("20000111")+((Times1)/4810),
forecastPanels = NULL)
########################################
TrendSeasonalStructure < list(segments = list(c(0,1)),
sKnots = list(c(1,0)))
DailySeasonalStructure < list(segments = list(c(0,48)),
sKnots = c(as.list(1:47), list(c(48,0))))
WeeklySeasonalStructure < list(segments = list(c(0,336)),
sKnots = c(as.list(seq(4,332,4)), list(c(336,0))))
WDSeasonalStructure < list(segments = list(c(0,48), c(100,148)),
sKnots = c(as.list(c(1:47,101:147)), list(c(0,48,100,148))))
TrendSeasons < rep(1, nrow(electricity))
DailySeasons < as.vector(electricity[,"DailySeasonality"])
WeeklySeasons < as.vector(electricity[,"WeeklySeasonality"])
WDSeasons < as.vector(electricity[,"WorkingDaySeasonality"])
Data < as.vector(electricity[,"Consumption"])
Times < as.vector(electricity[,"Time"])
TempM < as.vector(electricity[,"Temperature"])
TempM2 < TempM^2
TrendTimeKnots < seq(from = head(Times, 1), to = tail(Times, 1), length.out = 116)
SeasonTimeKnots < seq(from = head(Times, 1), to = tail(Times, 1), length.out = 24)
SeasonTimeKnots2 < seq(from = head(Times, 1), to = tail(Times, 1), length.out = 12)
TrendData < rep(1, length(Times))
SeasonData < rep(1, length(Times))
Trend < list(name = "Trend",
data = TrendData,
times = Times,
seasons = TrendSeasons,
timeKnots = TrendTimeKnots,
seasonalStructure = TrendSeasonalStructure,
lambdas = c(1500,0,0))
WSeason < list(name = "Weekly seas",
data = SeasonData,
times = Times,
seasons = WeeklySeasons,
timeKnots = SeasonTimeKnots2,
seasonalStructure = WeeklySeasonalStructure,
lambdas = c(0.8,0.6,100))
WDSeason < list(name = "Dayly seas",
data = SeasonData,
times = Times,
seasons = WDSeasons,
timeKnots = SeasonTimeKnots,
seasonalStructure = WDSeasonalStructure,
lambdas = c(0.003,0,240))
TrendTempM < list(name = "Trend temp Mel",
data = TempM,
times = Times,
seasons = TrendSeasons,
timeKnots = TrendTimeKnots,
seasonalStructure = TrendSeasonalStructure,
lambdas = c(1e7,0,0))
TrendTempM2 < list(name = "Trend temp Mel^2",
data = TempM2,
times = Times,
seasons = TrendSeasons,
timeKnots = TrendTimeKnots,
seasonalStructure = TrendSeasonalStructure,
lambdas = c(0.01,0,0)) # Starting parameter is too far from the optimal value
Predictors < list(Trend, WSeason, WDSeason, TrendTempM, TrendTempM2)
elec.fit < heuristicSTR(data = Data,
predictors = Predictors,
gapCV = 48*7)
plot(elec.fit,
xTime = as.Date("20000111")+((Times1)/4810),
forecastPanels = NULL)
plotBeta(elec.fit, predictorN = 4)
plotBeta(elec.fit, predictorN = 5)

Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.