ARMA: ISlARMAGARCH;
ARMA: Prognoz.Platform.Interop.Stat.ISlARMAGARCH;
Свойство ARMA возвращает параметры авторегрессии и скользящего среднего.
По умолчанию порядки авторегрессии и скользящего среднего не заданы.
Для выполнения примера добавьте ссылку на системную сборку «Stat».
Sub UserProc;
Var
GARCH: ISmGARCH;
RegrCoef, GARCHCoef: ICoefficients;
x: Array[10] Of Double;
y1, y2: Array[15] Of Double;
Res, i, j: Integer;
d: Double;
str: String;
// Процедура вывода данных
Sub Print(Data: Array Of Double);
Var
i: Integer;
Begin
Debug.Indent;
For i := 0 To Data.Length - 1 Do
If Double.IsNan(Data[i]) Then
Debug.WriteLine("----empty---");
Else
Debug.WriteLine(i.ToString + " " + Data[i].ToString);
End If;
End For;
Debug.Unindent;
End Sub Print;
Begin
GARCH := New SmGARCH.Create;
// Задаем значения переменных
x[0] := 100; y1[0] := 120; y2[0] := 122;
x[1] := 111; y1[1] := 125; y2[1] := 127;
x[2] := 123; y1[2] := 124; y2[2] := 130;
x[3] := 113; y1[3] := 130; y2[3] := 135;
x[4] := 119; y1[4] := 133; y2[4] := 140;
x[5] := 121; y1[5] := Double.Nan; y2[5] := 149;
x[6] := 125; y1[6] := 139; y2[6] := 150;
x[7] := 131; y1[7] := 140; y2[7] := 155;
x[8] := 131; y1[8] := Double.Nan; y2[8] := 155;
x[9] := 131; y1[9] := 140; y2[9] := Double.Nan;
y1[10] := 129; y2[10] := 149;
y1[11] := 139; y2[11] := 150;
y1[12] := 140; y2[12] := 155;
y1[13] := 134; y2[13] := 145;
y1[14] := 140; y2[14] := 165;
// Задаем объясняемую переменную
GARCH.Explained.Value := x;
// Задаем объясняющие переменные
GARCH.Explanatories.Clear;
GARCH.Explanatories.Add.Value := y1;
GARCH.Explanatories.Add.Value := y2;
// Задаем параметры периодов идентификации и прогноза
GARCH.ModelPeriod.FirstPoint := 1;
GARCH.ModelPeriod.LastPoint := 10;
// Использование начальных значений по умолчанию
GARCH.UseDefaultInitValues := True;
// Задаем параметры авторегрессии и скользящего среднего
GARCH.ARMA.ParseAR("0");
GARCH.ARMA.ParseMA("0");
// Задаем параметры прогнозного ряда
GARCH.Forecast.LastPoint := 15;
// Задаем режим определения константы
GARCH.Intercept.Mode := InterceptMode.AutoEstimate;
// Задаем метод обработки пропусков
GARCH.MissingData.Method := MissingDataMethod.LinTrend;
// Определяем условие стационарности
GARCH.StationarityCondition := False;
// Задаем максимальное число итераций для расчета метода
GARCH.MaxIteration := 100;
// Задаем точность вычислений
GARCH.Tolerance := 0.0001;
// Задаем порядок авторегрессии условной гетероскедастичности
GARCH.ARCHOrder := 1;
// Задаем порядок обобщенной авторегрессии условной гетероскедастичности
GARCH.GARCHOrder := 1;
// Задаем порядок асимметрии
GARCH.AssymetryOrder := 2;
// Задаем тип модели GARCH
GARCH.GARCHSpec := GARCHSpecType.GARCH;
// Выполняем расчет метода и выводим результаты
res := GARCH.Execute;
If res <> 0 Then
Debug.WriteLine(GARCH.Errors);
Else
d := GARCH.LikelihoodFunctionValue;
Debug.WriteLine("Оптимальное значение функции правдоподобия: " + d.ToString);
d := GARCH.SummaryStatistics.SE;
Debug.WriteLine("Стандартная ошибка: " + d.ToString);
Debug.WriteLine("== Сглаженный ряд ==");
Print(GARCH.Fitted);
Debug.WriteLine("== Ряд остатков ==");
Print(GARCH.Residuals);
Debug.WriteLine("== Дисперсия остатков ==");
Print(GARCH.ResidualsDispersion);
Debug.WriteLine("== Прогноз дисперсии остатков ==");
Print(GARCH.ResidualsDispersionForecast);
Debug.WriteLine("== Оценка регрессионных коэффициентов ==");
RegrCoef := GARCH.RegressionCoefficients.Coefficients;
Debug.Indent;
Debug.WriteLine("Оцененные значения коэффициентов модели: ");
For i := 0 To RegrCoef.Estimate.Length - 1 Do
Debug.WriteLine(RegrCoef.Estimate[i]);
End For;
Debug.WriteLine("Вероятностные коэффициенты: ");
For i := 0 To RegrCoef.Estimate.Length - 1 Do
Debug.WriteLine(RegrCoef.Probability[i]);
End For;
Debug.Unindent;
Debug.WriteLine("== Оценка коэффициентов обобщенной авторегрессии условной гетероскедастичности ==");
GARCHCoef := GARCH.GARCHCoefficients.Coefficients;
Debug.Indent;
Debug.WriteLine("Оцененные значения коэффициентов модели: ");
For i := 0 To GARCHCoef.Estimate.Length - 1 Do
Debug.WriteLine(GARCHCoef.Estimate[i]);
End For;
Debug.WriteLine("Вероятностные коэффициенты: ");
For i := 0 To GARCHCoef.Estimate.Length - 1 Do
Debug.WriteLine(GARCHCoef.Probability[i]);
End For;
Debug.Unindent;
End If;
End Sub UserProc;
После выполнения примера в окно консоли будут выполнены результаты расчёта GARCH-модели.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Stat;
…
// Процедура вывода данных
Public Shared Sub Print(Data: System.Array);
Var
i: Integer;
Begin
System.Diagnostics.Debug.Indent();
For i := 0 To Data.Length - 1 Do
If Double.IsNan(Data.GetValue(i) As double) Then
System.Diagnostics.Debug.WriteLine("---empty---");
Else
System.Diagnostics.Debug.WriteLine(i.ToString() + " " + Data.GetValue(i));
End If;
End For;
System.Diagnostics.Debug.Unindent();
End Sub Print;
Public Shared Sub Main(Params: StartParams);
Var
GARCH: ISmGARCH;
RegrCoef, GARCHCoef: ICoefficients;
x: Array[10] Of Double;
y1, y2: Array[15] Of Double;
Res, i, j: Integer;
d: Double;
Begin
GARCH := New SmGARCH.Create();
// Задаем значения переменных
x[0] := 100; y1[0] := 120; y2[0] := 122;
x[1] := 111; y1[1] := 125; y2[1] := 127;
x[2] := 123; y1[2] := 124; y2[2] := 130;
x[3] := 113; y1[3] := 130; y2[3] := 135;
x[4] := 119; y1[4] := 133; y2[4] := 140;
x[5] := 121; y1[5] := Double.Nan; y2[5] := 149;
x[6] := 125; y1[6] := 139; y2[6] := 150;
x[7] := 131; y1[7] := 140; y2[7] := 155;
x[8] := 131; y1[8] := Double.Nan; y2[8] := 155;
x[9] := 131; y1[9] := 140; y2[9] := Double.Nan;
y1[10] := 129; y2[10] := 149;
y1[11] := 139; y2[11] := 150;
y1[12] := 140; y2[12] := 155;
y1[13] := 134; y2[13] := 145;
y1[14] := 140; y2[14] := 165;
// Задаем объясняемую переменную
GARCH.Explained.Value := x;
// Задаем объясняемую переменные
GARCH.Explanatories.Clear();
GARCH.Explanatories.Add().Value := y1;
GARCH.Explanatories.Add().Value := y2;
// Задаем параметры периодов идентификации прогноза
GARCH.ModelPeriod.FirstPoint := 1;
GARCH.ModelPeriod.LastPoint := 10;
// Использование начальных значений по умолчанию
GARCH.UseDefaultInitValues := True;
// Задаем параметры авторегрессии и скользящего среднего
GARCH.ARMA.ParseAR("0", True);
GARCH.ARMA.ParseMA("0", True);
// Задаем параметры прогнозного ряда
GARCH.Forecast.LastPoint := 15;
// Задаем режим определения константы
GARCH.Intercept.Mode := InterceptMode.imAutoEstimate;
// Задаем метод обработки пропусков
GARCH.MissingData.Method := MissingDataMethod.mdmSampleAverage;
// Определяем условие стационарности
GARCH.StationarityCondition := False;
// Задаем максимальное число итераций для расчета метода
GARCH.MaxIteration := 100;
// Задаем точность вычислений
GARCH.Tolerance := 0.0001;
// Задаем порядок авторегрессии условной гетероскедастичности
GARCH.ARCHOrder := 1;
// Задаем порядок обобщенной авторегрессии условной гетероскедастичности
GARCH.GARCHOrder := 1;
// Выполняем расчет метода и выводим результаты
res := GARCH.Execute();
If res <> 0 Then
System.Diagnostics.Debug.WriteLine(GARCH.Errors);
Else
d := GARCH.LikelihoodFunctionValue;
System.Diagnostics.Debug.WriteLine("Оптимальное значение функции правдоподобия: " + d.ToString());
d := GARCH.SummaryStatistics.SE;
System.Diagnostics.Debug.WriteLine("Стандартная ошибка: " + d.ToString());
System.Diagnostics.Debug.WriteLine("== Сглаженный ряд ==");
Print(GARCH.Fitted);
System.Diagnostics.Debug.WriteLine("== Ряд остатков ==");
Print(GARCH.Residuals);
System.Diagnostics.Debug.WriteLine("== Дисперсия остатков ==");
Print(GARCH.ResidualsDispersion);
System.Diagnostics.Debug.WriteLine("== Прогноз дисперсии остатков ==");
Print(GARCH.ResidualsDispersionForecast);
System.Diagnostics.Debug.WriteLine("== Оценка регрессионных коэффициентов ==");
RegrCoef := GARCH.RegressionCoefficients.Coefficients;
System.Diagnostics.Debug.Indent();
System.Diagnostics.Debug.WriteLine("Оцененные значения коэффициентов модели: ");
For i := 0 To RegrCoef.Estimate.Length - 1 Do
d := RegrCoef.Estimate.GetValue(i) As double;
System.Diagnostics.Debug.WriteLine(i.ToString() + ", " + d.ToString());
End For;
System.Diagnostics.Debug.WriteLine("Вероятностные коэффициенты: ");
For i := 0 To RegrCoef.Estimate.Length - 1 Do
d := RegrCoef.Probability.GetValue(i) As double;
System.Diagnostics.Debug.WriteLine(i.ToString() + ", " + d.ToString());
End For;
System.Diagnostics.Debug.Unindent();
System.Diagnostics.Debug.WriteLine("== Оценка коэффициентов обобщенной авторегрессии условной гетероскедастичности ==");
GARCHCoef := GARCH.GARCHCoefficients.Coefficients;
System.Diagnostics.Debug.Indent();
System.Diagnostics.Debug.WriteLine("Оцененные значения коэффициентов модели: ");
For i := 0 To GARCHCoef.Estimate.Length - 1 Do
d := GARCHCoef.Estimate.GetValue(i) As double;
System.Diagnostics.Debug.WriteLine(i.ToString() + ", " + d.ToString());
End For;
System.Diagnostics.Debug.WriteLine("Вероятностные коэффициенты: ");
For i := 0 To GARCHCoef.Estimate.Length - 1 Do
d := GARCHCoef.Probability.GetValue(i) As double;
System.Diagnostics.Debug.WriteLine(i.ToString() + ", " + d.ToString());
End For;
System.Diagnostics.Debug.Unindent();
End If;
End Sub;
См. также: