Parameters: IExponentialSmoothingParameters;
Свойство Parameters определяет параметры метода. Использование того или иного параметра зависит от выбранного типа тренда и сезонного эффекта.
Сезонный эффект | ||||
Нет | Аддитивная | Мультипликативная | ||
Характер
тренда |
Нет | Delta | Delta | |
Линейный (аддитивный) | Gamma | Delta
Gamma |
Delta
Gamma |
|
Экспоненциальный
(мультипликативный) |
Gamma | Delta
Gamma |
Delta
Gamma |
|
Затухающий | Gamma
Phi |
Delta
Phi |
Delta
Phi |
Параметр Alpha присутствует во всех перечисленных моделях.
Для выполнения примера добавьте ссылку на системную сборку Stat.
Sub UserProc;
Var
Method: SmExponentialSmoothing;
serie: Array Of Double;
status: Integer;
Params: IExponentialSmoothingParameters;
Seasonal: ISesonal;
Stat: Double;
Begin
Method := New SmExponentialSmoothing.Create;
serie := New Double[15];
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;
Method.Forecast.LastPoint := 40;
Seasonal := Method.SeasonalComponent;
Seasonal.Mode := SeasonalityType.Additive;
Seasonal.Cycle := 4;
Method.TrendComponent := TrendType.Linear;
Params := Method.Parameters;
Params.Alpha := 0.15;
Params.Delta := 0.2;
Params.Gamma := 0.15;
status := Method.Execute;
If status <> 0 Then
Debug.WriteLine(Method.Errors);
Else
Debug.WriteLine("=== Модельный ряд ===");
Print(Method.Fitted);
Debug.WriteLine("=== Ряд остатков ===");
Print(Method.Residuals);
Stat := Method.SummaryStatistics.DW;
Debug.WriteLine(Stat.ToString);
Debug.WriteLine("=== Среднее остатков === ");
Stat := Method.SummaryStatistics.ME;
Debug.WriteLine(Stat.ToString);
End If;
End Sub UserProc;
Sub Print(Data: Array Of Double);
Var
i: Integer;
CI: ICultureInfo;
Begin
CI := CultureInfo.Current;
Debug.WriteLine("---Begin---");
For i := 0 To Data.Length - 1 Do
If Double.IsNan(Data[i]) Then
Debug.WriteLine("---empty---");
Else
Debug.WriteLine(i.ToString + ", " + CI.FormatDoublePrec(Data[i], 4));
End If;
End For;
Debug.WriteLine("---End---");
End Sub Print;
После выполнения примера в окно консоли будут выведены модельный ряд и ряд остатков:
Выполнение модуля начато
=== Модельный ряд ===
---Begin---
0, 742,8220
1, 656,8905
2, 641,9241
3, 720,0669
4, 769,5030
5, 716,0377
6, 798,2265
7, 921,7657
8, 956,0445
9, 943,4012
10, 945,8138
11, 982,1126
12, 980,6231
13, 845,9420
14, 795,5858
---End---
=== Ряд остатков ===
---Begin---
0, -72,6220
1, -80,8224
2, 75,7243
3, 136,8437
4, 115,9580
5, 295,8087
6, 197,2232
7, 142,9765
8, 77,2802
9, -162,5427
10, -288,3104
11, -327,5653
12, -302,3851
13, -203,5291
14, -43,6247
---End---
=== Статистика Дарбина-Уотсона ===
0.340927926836332
=== Среднее остатков ===
-29.305807568271
Выполнение модуля завершено
См. также: