MCMCParameters: IMCMCParameters;
MCMCParameters: Prognoz.Platform.Interop.Stat.IMCMCParameters;
Свойство MCMCParameters возвращает параметры алгоритма Марковской цепи Монте Карло (Markov Chain Monte Carlo).
Для определения порядков ARCH и GARCH используйте свойства ISmMarkovSwitchingGARCH.ARCHOrder и ISmMarkovSwitchingGARCH.GARCHOrder.
Для выполнения примера добавьте ссылку на системную сборку «Stat».
Sub UserProc;
Var
SMG: ISmMarkovSwitchingGARCH;
y: Array[5] Of Double;
x: Array[10] Of Double;
M: Array[1] Of Double;
CM: Array[1, 1] Of Double;
res, i: Integer;
Begin
SMG := New SmMarkovSwitchingGARCH.Create;
// задаем значения переменных
y[0] := 5.207664; x[0] := 1.9061476;
y[1] := 5.264373; x[1] := -0.26003;
y[2] := Double.Nan; x[2] := 9.54554;
y[3] := 5.702848; x[3] := 7.9776938;
y[4] := 5.996597; x[4] := Double.Nan;
x[5] := 12.719879;
x[6] := 13.875518;
x[7] := 16.046427;
x[8] := 17.218547;
x[9] := 21.07471;
//выбор объясняемого ряда
SMG.Explained.Value := y;
// выбор объясняющего ряда
SMG.Explanatories.Clear;
SMG.Explanatories.Add.Value := x;
// период идентификации
SMG.ModelPeriod.FirstPoint := 1;
SMG.ModelPeriod.LastPoint := 5;
// прогнозирование
SMG.Forecast.LastPoint := 10;
// порядки ARCH
и GARCH
SMG.ARCHOrder := 1;
SMG.GARCHOrder := 1;
// обработка пропусков
SMG.MissingData.Method := MissingDataMethod.LinTrend;
// параметры алгоритма Марковской цепи Монте Карло
SMG.MCMCParameters.NumOfIterations := 200;
SMG.MCMCParameters.IterationsToDiscard := 100;
SMG.MCMCParameters.Period := 20;
// не использовать начальные значения по умолчанию
SMG.UseDefaultInitDistribution := False;
M[0] := 0;
CM[0, 0] := 1;
// значения среднего и ковариационной матрицы для генерации регресионных коэффициентов
SMG.RegressionCoefficients.InitMeanValues := M;
SMG.RegressionCoefficients.InitCovarianceMatrix := CM;
// значения среднего и ковариационной матрицы для генерации коэффициентов ARCH
SMG.ARCHCoefficients.InitMeanValues := M;
SMG.ARCHCoefficients.InitCovarianceMatrix := CM;
// значения среднего и ковариационной матрицы для генерации коэффициентов GARCH
SMG.GARCHCoefficients.InitMeanValues := M;
SMG.GARCHCoefficients.InitCovarianceMatrix := CM;
SMG.GARCHConst.InitMeanValue := 0;
SMG.GARCHConst.InitDispersion := 1;
SMG.GARCHConst1.InitMeanValue := 0;
SMG.GARCHConst1.InitDispersion := 1;
// параметры распределения для вероятности перехода
SMG.P00Distribution.A := 9;
SMG.P00Distribution.B := 1;
SMG.P11Distribution.A := 9;
SMG.P11Distribution.B := 1;
// расчет модели
res := SMG.Execute;
Debug.WriteLine(SMG.Errors);
Debug.WriteLine("------------------------------Модель MS-GARCH------------------------------------------");
Debug.WriteLine("***Коэффициенты***");
Debug.WriteLine("GARCH Const0: " + SMG.GARCHConst.Estimation.ToString + ", Дисперсия: " + SMG.GARCHConst.Dispersion.ToString);
Debug.WriteLine("GARCH Const1: " + SMG.GARCHConst1.Estimation.ToString + ", Дисперсия: " + SMG.GARCHConst1.Dispersion.ToString);
Debug.WriteLine("");
Debug.WriteLine("***Оценки параметров перехода из состояния 0 в 0***");
Debug.WriteLine("Оцененные значения коэффициентов модели: " + SMG.P00.Estimation.ToString);
Debug.WriteLine("Дисперсия: " + SMG.P00.Dispersion.ToString);
Debug.WriteLine("");
Debug.WriteLine("***Оценки параметров перехода из состояния 1 в 1***");
Debug.WriteLine("Оцененные значения коэффициентов модели: " + SMG.P11.Estimation.ToString);
Debug.WriteLine("Дисперсия: " + SMG.P11.Dispersion.ToString);
Debug.WriteLine("");
Debug.WriteLine("***Описательные характеристики модели***");
Debug.WriteLine("Число итераций: " + SMG.SummaryStatistics.NumOfIter.ToString);
Debug.WriteLine("");
Debug.WriteLine("***Оценки условных вероятностей***");
For i := 0 To SMG.ConditionalStateProbabilities.Length - 1 Do
Debug.WriteLine((i + 1).ToString + ": " + SMG.ConditionalStateProbabilities[i].ToString);
End For;
Debug.WriteLine("");
End Sub UserProc;
В результате выполнения примера заданы настройки:
период идентификации и параметры прогнозирования заданы вручную;
порядки авторегрессии условной гетероскедастичности и обобщенной авторегрессии условной гетероскедастичности заданы вручную;
задан метод обработки пропусков;
заданы параметры алгоритма Марковской цепи Монте Карло.
В окно консоли будут выведены оценки коэффициентов GARCH μ0 и μ1 оценки параметров перехода, описательные характеристики модели и оценки условных вероятностей.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
SMG: ISmMarkovSwitchingGARCH;
y: Array[5] Of Double;
x: Array[10] Of Double;
M: Array[1] Of Double;
CM: Array[1, 1] Of Double;
CSP: System.Array;
res, i: Integer;
Begin
SMG := New SmMarkovSwitchingGARCH.Create();
// задаем значения переменных
y[0] := 5.207664; x[0] := 1.9061476;
y[1] := 5.264373; x[1] := -0.26003;
y[2] := Double.Nan; x[2] := 9.54554;
y[3] := 5.702848; x[3] := 7.9776938;
y[4] := 5.996597; x[4] := Double.Nan;
x[5] := 12.719879;
x[6] := 13.875518;
x[7] := 16.046427;
x[8] := 17.218547;
x[9] := 21.07471;
//выбор объясняемого ряда
SMG.Explained.Value := y;
// выбор объясняющего ряда
SMG.Explanatories.Clear();
SMG.Explanatories.Add().Value := x;
// период идентификации
SMG.ModelPeriod.FirstPoint := 1;
SMG.ModelPeriod.LastPoint := 5;
// прогнозирование
SMG.Forecast.LastPoint := 10;
// порядки ARCH
и GARCH
SMG.ARCHOrder := 1;
SMG.GARCHOrder := 1;
// обработка пропусков
SMG.MissingData.Method := MissingDataMethod.mdmLinTrend;
// параметры алгоритма Марковской цепи Монте Карло
SMG.MCMCParameters.NumOfIterations := 200;
SMG.MCMCParameters.IterationsToDiscard := 100;
SMG.MCMCParameters.Period := 20;
// не использовать начальные значения по умолчанию
SMG.UseDefaultInitDistribution := False;
M[0] := 0;
CM[0, 0] := 1;
// значения среднего и ковариационной матрицы для генерации регресионных коэффициентов
SMG.RegressionCoefficients.InitMeanValues := M;
SMG.RegressionCoefficients.InitCovarianceMatrix := CM;
// значения среднего и ковариационной матрицы для генерации коэффициентов ARCH
SMG.ARCHCoefficients.InitMeanValues := M;
SMG.ARCHCoefficients.InitCovarianceMatrix := CM;
// значения среднего и ковариационной матрицы для генерации коэффициентов GARCH
SMG.GARCHCoefficients.InitMeanValues := M;
SMG.GARCHCoefficients.InitCovarianceMatrix := CM;
SMG.GARCHConst.InitMeanValue := 0;
SMG.GARCHConst.InitDispersion := 1;
SMG.GARCHConst1.InitMeanValue := 0;
SMG.GARCHConst1.InitDispersion := 1;
// параметры распределения для вероятности перехода
SMG.P00Distribution.A := 9;
SMG.P00Distribution.B := 1;
SMG.P11Distribution.A := 9;
SMG.P11Distribution.B := 1;
// расчет модели
res := SMG.Execute();
System.Diagnostics.Debug.WriteLine(SMG.Errors);
System.Diagnostics.Debug.WriteLine("------------------------------Модель MS-GARCH------------------------------------------");
System.Diagnostics.Debug.WriteLine("***Коэффициенты***");
System.Diagnostics.Debug.WriteLine("GARCH Const0: " + SMG.GARCHConst.Estimation.ToString() + ", Дисперсия: " + SMG.GARCHConst.Dispersion.ToString());
System.Diagnostics.Debug.WriteLine("GARCH Const1: " + SMG.GARCHConst1.Estimation.ToString() + ", Дисперсия: " + SMG.GARCHConst1.Dispersion.ToString());
System.Diagnostics.Debug.WriteLine("");
System.Diagnostics.Debug.WriteLine("***Оценки параметров перехода из состояния 0 в 0***");
System.Diagnostics.Debug.WriteLine("Оцененные значения коэффициентов модели: " + SMG.P00.Estimation.ToString());
System.Diagnostics.Debug.WriteLine("Дисперсия: " + SMG.P00.Dispersion.ToString());
System.Diagnostics.Debug.WriteLine("");
System.Diagnostics.Debug.WriteLine("***Оценки параметров перехода из состояния 1 в 1***");
System.Diagnostics.Debug.WriteLine("Оцененные значения коэффициентов модели: " + SMG.P11.Estimation.ToString());
System.Diagnostics.Debug.WriteLine("Дисперсия: " + SMG.P11.Dispersion.ToString());
System.Diagnostics.Debug.WriteLine("");
System.Diagnostics.Debug.WriteLine("***Описательные характеристики модели***");
System.Diagnostics.Debug.WriteLine("Число итераций: " + SMG.SummaryStatistics.NumOfIter.ToString());
System.Diagnostics.Debug.WriteLine("");
System.Diagnostics.Debug.WriteLine("***Оценки условных вероятностей***");
CSP := SMG.ConditionalStateProbabilities;
For i := 0 To CSP.Length - 1 Do
System.Diagnostics.Debug.WriteLine((i + 1).ToString() + ": " + CSP[i].ToString());
End For;
System.Diagnostics.Debug.WriteLine("");
End Sub;
См. также: