Backcast: Boolean;
The Backcast property indicates whether to use backcast on estimating moving average coefficients.
By default backcast is used.
Sub Main;
Var
Method: SmLinearRegress;
Factors: ISlSeries;
status: Integer;
Serie, Factor: Array Of Double;
AutoRegression: Array Of Integer;
MovingAverage: ISlMovingAverage;
Sub Print(Data: Array Of Double);
Var
i: Integer;
d: Double;
Begin
Debug.WriteLine("---Begin---");
For i := 0 To Data.Length - 1 Do
If Double.IsNan(Data[i]) Then
Debug.WriteLine(i.ToString + ", ---empty---");
Else
d := Data[i];
Debug.WriteLine(i.ToString + ", " + d.ToString);
End If;
End For;
Debug.WriteLine("---End---");
End Sub Print;
Begin
Method := New SmLinearRegress.Create;
Serie := New Double[20];
Serie[00] := 6209;
Serie[01] := 6385;
Serie[02] := 6752;
Serie[03] := 6837;
Serie[04] := 6495;
Serie[05] := 6907;
Serie[06] := 7349;
Serie[07] := 7213;
Serie[08] := 7061;
Serie[09] := 7180;
Serie[10] := 7132;
Serie[11] := 7137;
Serie[12] := 7473;
Serie[13] := 7722;
Serie[14] := 8088;
Serie[15] := 8516;
Serie[16] := 8941;
Serie[17] := 9064;
Serie[18] := 9380;
Serie[19] := 9746;
Method.Explained.Value := Serie;
Factor := New Double[30];
Factor[00] := 4110;
Factor[01] := 4280;
Factor[02] := 4459;
Factor[03] := 4545;
Factor[04] := 4664;
Factor[05] := 4861;
Factor[06] := 5195;
Factor[07] := 5389;
Factor[08] := 5463;
Factor[09] := 5610;
Factor[10] := 5948;
Factor[11] := 6218;
Factor[12] := 6521;
Factor[13] := 6788;
Factor[14] := 7222;
Factor[15] := 7486;
Factor[16] := 7832;
Factor[17] := 8153;
Factor[18] := 8468;
Factor[19] := 9054;
Factor[20] := 9907;
Factor[21] := 10333;
Factor[22] := 10863;
Factor[23] := 11693;
Factor[24] := 12242;
Factor[25] := 12227;
Factor[26] := 12910;
Factor[27] := 13049;
Factor[28] := 13384;
Factor[29] := 14036;
Factors := Method.Explanatories;
Factors.Add.Value := Factor;
AutoRegression := New Integer[1];
AutoRegression[0] := 1;
Method.AutoRegressionOrder := AutoRegression;
MovingAverage := Method.MovingAverage;
MovingAverage.Order := 3;
MovingAverage.Epsilon := 0.5;
MovingAverage.Backcast := False;
MovingAverage.MaxIteration := 125;
Method.ModelPeriod.LastPoint := 20;
Method.Forecast.LastPoint := 30;
status := Method.Execute;
If status <> 0 Then
Debug.WriteLine(Method.Errors);
Else
Debug.WriteLine("=== Moving average coefficients===");
Print(MovingAverage.Coefficients.Estimate);
Debug.WriteLine("=== Modeling series ===");
Print(Method.Fitted);
End If;
End Sub Main;
After executing the example the console window displays the following result:
Module execution started
=== Moving average coefficients===
---Begin---
0, 0.78455897594941071
1, 0.025847960527559839
2, 0.86636257956345453
---End---
=== Modeling series ===
---Begin---
0, ---empty---
1, ---empty---
2, 6489.5899112585475
3, 6882.7982991546951
4, 6973.8683617464467
5, 6607.4452863772858
6, 7048.8672368220059
7, 7522.4315622991089
8, 7376.7194621523076
9, 7213.8647619882358
10, 7341.3628496166866
11, 7289.935049564875
12, 7295.2921120702722
13, 7655.2867124329559
14, 7922.0684252017318
15, 8314.2054005967984
16, 8772.76995105879
17, 9228.1202640175416
18, 9359.9040016503095
19, 9698.4703519914056
---End---
Module execution finished
See also: