InitialApproximation: IExponentialSmoothingParameters;
InitialApproximation: Prognoz.Platform.Interop.Stat.IExponentialSmoothingParameters;
The InitialApproximation property determines initial approximation of parameters.
To determine the maximum number of iterations (n) of the best trial method for searching parameters, use the IExponentialSmoothingBestTrialMethod.MaxIteration property.
To execute the example, add a link to the Stat system assembly.
Sub UserProc;
Var
Method: SmExponentialSmoothing;
serie: Array[15] Of Double;
status: Integer;
Seasonal: ISeasonal;
Auto: IExponentialSmoothingAutoSearch;
BTM: IExponentialSmoothingBestTrialMethod;
Begin
Method := New SmExponentialSmoothing.Create;
// Explained series:
serie[0] := 670.2000183; serie[1] := 576.0680563; serie[2] := 717.6484268;
serie[3] := 856.9105808; serie[4] := 885.4609516; serie[5] := 1011.846431;
serie[6] := 995.4496292; serie[7] := 1064.74221; serie[8] := 1033.324656;
serie[9] := 780.8584552; serie[10] := 657.5033113; serie[11] := 654.5472579;
serie[12] := 678.2380139; serie[13] := 642.4128544; serie[14] := 751.9611194;
Method.Serie.Value := serie;
// Forecasting series parameters:
Method.Forecast.LastPoint := 30;
// Parameters of seasonal component:
Seasonal := Method.SeasonalComponent;
Seasonal.Mode := SeasonalityType.Additive;
Seasonal.Cycle := 4;
// Trend line type:
Method.TrendComponent := TrendType.Damped;
// Parameter autoselection settings:
Auto := Method.AutoSearch;
Auto.Criterion := CriterionType.MeanError;
Auto.Mode := SearchType.Optimal;
// Parameter autoselection settings for exponential smoothing
BTM := Auto.BestTrialMethod;
// Constant in the best trial method:
BTM.MethodConstant := 0.5;
// The number of implementations in one iteration of the best trial method:
BTM.Order := 7;
// The number of iterations of the best trial method:
BTM.MaxIteration := 10;
// Initial approximations of parameters:
BTM.InitialApproximation.Alpha := 0.03;
BTM.InitialApproximation.Delta := 0.03;
BTM.InitialApproximation.Gamma := 0.02;
BTM.InitialApproximation.Phi := 0.02;
// Calculate model:
status := Method.Execute;
If status <> 0 Then
Debug.WriteLine(Method.Errors);
Else
Debug.WriteLine("=== Parameter values ===");
Debug.WriteLine("Alpha " + Method.BestModelCoefficients.Alpha.ToString);
Debug.WriteLine("Delta " + Method.BestModelCoefficients.Delta.ToString);
Debug.WriteLine("Gamma " + Method.BestModelCoefficients.Gamma.ToString);
Debug.WriteLine("Phi " + Method.BestModelCoefficients.Phi.ToString);
End If;
End Sub UserProc;
After executing the example the console window displays the following data:
=== Parameter values ===
Alpha 0,1
Delta 0,1
Gamma 0,02
Phi 0,1
The requirements and result of the Fore.NET example execution match with those in the Fore example.
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
Method: SmExponentialSmoothing;
serie: Array[15] Of double;
status: integer;
Seasonal: ISeasonal;
Auto: IExponentialSmoothingAutoSearch;
BTM: IExponentialSmoothingBestTrialMethod;
Begin
Method := New SmExponentialSmoothing.Create();
// Explained series:
serie[0] := 670.2000183; serie[1] := 576.0680563; serie[2] := 717.6484268;
serie[3] := 856.9105808; serie[4] := 885.4609516; serie[5] := 1011.846431;
serie[6] := 995.4496292; serie[7] := 1064.74221; serie[8] := 1033.324656;
serie[9] := 780.8584552; serie[10] := 657.5033113; serie[11] := 654.5472579;
serie[12] := 678.2380139; serie[13] := 642.4128544; serie[14] := 751.9611194;
Method.Serie.Value := serie;
// Forecasting series parameters:
Method.Forecast.LastPoint := 30;
// Parameters of seasonal component:
Seasonal := Method.SeasonalComponent;
Seasonal.Mode := SeasonalityType.sstAdditive;
Seasonal.Cycle := 4;
// Trend line type:
Method.TrendComponent := TrendType.tdtDamped;
// Parameter autoselection settings:
Auto := Method.AutoSearch;
Auto.Criterion := CriterionType.ctMeanError;
Auto.Mode := SearchType.stOptimal;
// Parameter autoselection settings for exponential smoothing
BTM := Auto.BestTrialMethod;
// Constant in the best trial method:
BTM.MethodConstant := 0.5;
// The number of implementations in one iteration of the best trial method:
BTM.Order := 7;
// The number of iterations of the best trial method:
BTM.MaxIteration := 10;
// Initial approximations of parameters:
BTM.InitialApproximation.Alpha := 0.03;
BTM.InitialApproximation.Delta := 0.03;
BTM.InitialApproximation.Gamma := 0.02;
BTM.InitialApproximation.Phi := 0.02;
// Calculate model:
status := Method.Execute();
If status <> 0 Then
System.Diagnostics.Debug.WriteLine(Method.Errors);
Else
System.Diagnostics.Debug.WriteLine("=== Parameter values ===");
System.Diagnostics.Debug.WriteLine("Alpha " + Method.BestModelCoefficients.Alpha.ToString());
System.Diagnostics.Debug.WriteLine("Delta " + Method.BestModelCoefficients.Delta.ToString());
System.Diagnostics.Debug.WriteLine("Gamma " + Method.BestModelCoefficients.Gamma.ToString());
System.Diagnostics.Debug.WriteLine("Phi " + Method.BestModelCoefficients.Phi.ToString());
End If;
End Sub;
See also: