В примере используется метод оценки коэффициентов модели, описание которого приведено в разделе «Библиотека методов и моделей». Для данного метода будут заданы порядки сезонной авторегрессии и скользящего среднего. Подобные настройки использует модель ARIMA в контейнере моделирования.
Для выполнения примера добавьте ссылку на системную сборку Stat.
Sub UserProc;
Var
lr: ISmLinearRegress;
Y, X: array[43] Of double;
ARMA: ISlARMA;
Inits: Array[2] Of Double;
res: Integer;
CoefficientsAR, CoefficientsMA, CoefficientsX: ICoefficients;
ModelCoefficients: IModelCoefficients;
Sub Print(Arr: array Of Double);
Var
i: Integer;
Begin
For i := 0 To Arr.Length - 1 Do
Debug.WriteLine(" " + Arr[i].ToString);
End For;
End Sub Print;
Begin
lr := New SmLinearRegress.Create;
// значения объясняемого ряда
Y[00] := 6209; Y[15] := 8516; Y[30] := 14242;
Y[01] := 6385; Y[16] := 8941; Y[31] := 14704;
Y[02] := 6752; Y[17] := 9064; Y[32] := 13802;
Y[03] := 6837; Y[18] := 9380; Y[33] := 14197;
Y[04] := 6495; Y[19] := 9746; Y[34] := 15010;
Y[05] := 6907; Y[20] := 9907; Y[35] := 15589;
Y[06] := 7349; Y[21] := 10333; Y[36] := 15932;
Y[07] := 7213; Y[22] := 10863; Y[37] := 16631;
Y[08] := 7061; Y[23] := 11693; Y[38] := 17394;
Y[09] := 7180; Y[24] := 12242; Y[39] := 17758;
Y[10] := 7132; Y[25] := 12227; Y[40] := 17308;
Y[11] := 7137; Y[26] := 12910; Y[41] := 16444;
Y[12] := 7473; Y[27] := 13049; Y[42] := 16413;
Y[13] := 7722; Y[28] := 13384;
Y[14] := 8088; Y[29] := 14036;
// значения объясняющего ряда
X[00] := 4110; X[15] := 7486; X[30] := 11781;
X[01] := 4280; X[16] := 7832; X[31] := 11681;
X[02] := 4459; X[17] := 8153; X[32] := 11903;
X[03] := 4545; X[18] := 8468; X[33] := 11900;
X[04] := 4664; X[19] := 9054; X[34] := 11986;
X[05] := 4861; X[20] := 9499; X[35] := 12206;
X[06] := 5195; X[21] := 9866; X[36] := 12734;
X[07] := 5389; X[22] := 10217; X[37] := 12990;
X[08] := 5463; X[23] := 10763; X[38] := 13516;
X[09] := 5610; X[24] := 10683; X[39] := 13866;
X[10] := 5948; X[25] := 10494; X[40] := 14141;
X[11] := 6218; X[26] := 10938; X[41] := 14141;
X[12] := 6521; X[27] := 11198; X[42] := 14237;
X[13] := 6788; X[28] := 11546;
X[14] := 7222; X[29] := 11865;
// период идентификации
lr.ModelPeriod.FirstPoint := 1;
lr.ModelPeriod.LastPoint := 20;
lr.Forecast.LastPoint := 40;
lr.MissingData.Method := MissingDataMethod.Casewise;
lr.Explained.Value := Y;
// в модели будет использоваться экзогенная переменная
lr.Explanatories.Clear;
lr.Explanatories.Add.Value := X;
ModelCoefficients := lr.ModelCoefficients;
// в модели будет использоваться константа
ModelCoefficients.Intercept.Mode := InterceptMode.AutoEstimate;
ARMA := lr.ARMA;
// порядок сезонной авторегрессии
ARMA.ParseARSeas("3");
// порядок сезонного скользящего среднего
ARMA.ParseMASeas("1");
// метод определения начальных приближений
ARMA.CalcInitMode := ARMAInitType.Auto;
// начальные приближения сезонной/несезонной авторегрессии и
// сезонного/несезонного скользящего среднего
Inits[0] := 0.0025;
Inits[1] := 0.0025;
ARMA.InitAR := Inits;
ARMA.InitMA := Inits;
ARMA.InitARSeas := Inits;
ARMA.InitMASeas := Inits;
// сезонная/несезонная разность
ARMA.DiffSeas := 0;
ARMA.Diff := 2;
// период сезонности
ARMA.PeriodSeas := 4;
// метод оптимизации
ARMA.EstimationMethod := ARMAEstimationMethodType.GaussNewton;
//число итераций для метода оптимизации
ARMA.MaxIteration := 50;
// расчет модели
res := lr.Execute;
Debug.WriteLine(lr.Errors);
If (res = 0) Then
// коэффициенты авторегрессии
Debug.WriteLine("----Оценки коэффициентов сезонной авторегрессии----");
CoefficientsAR := ARMA.CoefficientsARSeas;
Debug.WriteLine(" Значение:");
Print(CoefficientsAR.Estimate);
Debug.WriteLine(" Стандартная ошибка:");
Print(CoefficientsAR.StandardError);
Debug.WriteLine(" t-статистика:");
Print(CoefficientsAR.TStatistic);
Debug.WriteLine(" Вероятность:");
Print(CoefficientsAR.Probability);
// коэффициенты скользящего среднего
Debug.WriteLine("----Оценки коэффициентов сезонного скользящего среднего----");
CoefficientsMA := ARMA.CoefficientsMASeas;
Debug.WriteLine(" Значение:");
Print(CoefficientsMA.Estimate);
Debug.WriteLine(" Стандартная ошибка:");
Print(CoefficientsMA.StandardError);
Debug.WriteLine(" t-статистика:");
Print(CoefficientsMA.TStatistic);
Debug.WriteLine(" Вероятность:");
Print(CoefficientsMA.Probability);
// коэффициенты экзогенной переменной
Debug.WriteLine("----Оценки коэффициентов X----");
CoefficientsX := ModelCoefficients.Coefficients;
Debug.WriteLine(" Значение:");
Print(CoefficientsX.Estimate);
Debug.WriteLine(" Стандартная ошибка:");
Print(CoefficientsX.StandardError);
Debug.WriteLine(" t-статистика:");
Print(CoefficientsX.TStatistic);
Debug.WriteLine(" Вероятность:");
Print(CoefficientsX.Probability);
// значения объясняемого ряда
Debug.WriteLine("----Объясняемый ряд----");
Print(lr.Explained.Value);
// значения модельного ряда
Debug.WriteLine("----Модельный ряд----");
Print(lr.Fitted);
// значения прогнозного ряда
Debug.WriteLine("----Прогнозный ряд----");
Print(lr.Forecast.Value);
End If;
End Sub UserProc;
После выполнения примера будет создана модель линейной регрессии, определены ее параметры:
объясняемая и объясняющая переменные;
порядки сезонной авторегрессии и сезонного скользящего среднего;
начальные приближения сезонной/несезонной авторегрессии и сезонного/несезонного скользящего среднего;
разность, сезонная разность, период сезонности;
в качестве метода оптимизации использован квазиньютоновский метод.
В окно консоли будут выведены значения коэффициентов сезонной авторегрессии, сезонного скользящего среднего, объясняющей переменной и значения объясняемого, модельного, прогнозного рядов:
Нет ошибок
----Оценки коэффициентов сезонной авторегрессии----
Значение:
0.43490707409749907
Стандартная ошибка:
0.2734980430624076
t-статистика:
1.5901652137169431
Вероятность:
0.14010396559499899
----Оценки коэффициентов сезонного скользящего среднего----
Значение:
0.18484173929552522
Стандартная ошибка:
0.34372507506364647
t-статистика:
0.53776041582447442
Вероятность:
0.60145259222766068
----Оценки коэффициентов X----
Значение:
-0.085392355517884433
Стандартная ошибка:
0.11621187624989106
t-статистика:
-0.73479887145324774
Вероятность:
0.47783497431661037
----Объясняемый ряд----
6209
6385
6752
6837
6495
6907
7349
7213
7061
7180
7132
7137
7473
7722
8088
8516
8941
9064
9380
9746
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
----Модельный ряд----
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
6387.2302929023381
6378.7277682049989
6285.405571028482
6543.5292131985507
6861.3182832802295
7059.6741634377986
7314.8511042611171
7739.3388404068264
8162.9940757614158
8608.6490097510541
9219.4043335455754
9757.2216352950072
10331.513511943327
10825.774150882695
11287.576127818098
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
----Прогнозный ряд----
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
1.#QNAN
11657.541261930295
11865.3597446065
11923.511224107375
11776.073777507245
11412.930110495705
10868.682212136939
10101.372242464256
9081.4270870175988
7787.15982313526
6189.5716843245982
4292.6298840343716
2108.3657950774118
-382.94251526214703
-3182.4330708414723
-6295.9308590365545
-9742.5548279478699
-13567.998489133301
-17793.461768225756
-22464.005707318353
-27609.781335809264
См. также: