Ms > Интерфейсы сборки Ms > IMsLinearRegressionTransform > IMsLinearRegressionTransform.ARMA
ARMA: ISlARMA;
ARMA: Prognoz.Platform.Interop.Stat.ISlARMA;
Свойство ARMA возвращает параметры авторегрессии и скользящего среднего.
Если для модели задан порядок авторегрессии или скользящего среднего, то будут рассчитаны верхняя и нижняя динамические доверительные границы прогнозного ряда.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащего модель с идентификатором «MODEL_LINEARREGR». Данная модель должна рассчитываться методом «Линейная регрессия (оценка МНК)».
Добавьте ссылки на системные сборки: Metabase, Ms, Stat.
Sub UserProc;
Var
mb: IMetabase;
hModel: IMetabaseObjectDescriptor;
oModel: IMsModel;
oTransform: IMsFormulaTransform;
oSelector: IMsFormulaTransformSelector;
oOutputVariable: IMsFormulaTransformVariable;
oLinear: IMsLinearRegressionTransform;
ARMA: ISlARMA;
pCalc: IMsMethodCalculation;
coo: IMsFormulaTransformCoord;
AR, MR: Array[1] Of Integer;
CoefficientsAR, CoefficientsMA: ICoefficients;
Begin
mb := MetabaseClass.Active;
// Получаем модель линейной регрессии
hModel := mb.ItemByIdNamespace("MODEL_LINEARREGR", mb.GetObjectKeyById("MS"));
oModel := hModel.Edit As IMsModel;
// Получаем параметры расчета
oTransform := oModel.Transform;
oSelector := oTransform.CreateSelector;
// Получаем моделируемую переменную
oOutputVariable := oTransform.Outputs.Item(0) As IMsFormulaTransformVariable;
oSelector.Slice := oOutputVariable.Slices.Item(0);
// Настраиваем расчет линейной регрессии
oLinear := oTransform.Transform(oSelector).Method As IMsLinearRegressionTransform;
ARMA := oLinear.ARMA;
// Задаем порядок авторегрессии
AR[0] := 3;
ARMA.OrderAR := AR;
// Задаем порядок скользящего среднего
MR[0] := 2;
ARMA.OrderMA := MR;
// Задаем максимальное число итераций
ARMA.MaxIteration := 300;
// Задаем точность решения
ARMA.Tolerance := 0.5;
// Указываем, что при расчете доверительных границ не учитываем,
// что коэффициенты найдены приближенно
oLinear.CoefUncertaintyInSECalc := False;
// Задаем параметры обработки пропусков
oLinear.MissingData.Method := MissingDataMethod.LinTrend;
// Задаем параметры расчета модели
pCalc := oTransform.CreateCalculation;
pCalc.Period.IdentificationStartDate := DateTime.ComposeDay(2000, 1, 1);
pCalc.Period.IdentificationEndDate := DateTime.ComposeDay(2010, 12, 31);
pCalc.Period.ForecastStartDate := DateTime.ComposeDay(2011, 1, 1);
pCalc.Period.ForecastEndDate := DateTime.ComposeDay(2015, 12, 31);
coo := oTransform.CreateCoord(oOutputVariable);
oLinear.Identify(pCalc, coo);
// Получаем коэффициенты авторегрессии
CoefficientsAR := oLinear.ARMACoefficients(coo).CoefficientsAR;
Debug.WriteLine("Коэффициенты авторегрессии");
Debug.Write(" Значение: ");
Debug.WriteLine(CoefficientsAR.Estimate[0]);
Debug.Write(" Стандартная ошибка: ");
Debug.WriteLine(CoefficientsAR.StandardError[0]);
Debug.Write(" t-статистика: ");
Debug.WriteLine(CoefficientsAR.TStatistic[0]);
Debug.Write(" Вероятность:");
Debug.WriteLine(CoefficientsAR.Probability[0]);
// Получаем коэффициенты скользящего среднего
CoefficientsMA := oLinear.ARMACoefficients(coo).CoefficientsMA;
Debug.WriteLine("Коэффициенты скользящего среднего");
Debug.Write(" Значение: ");
Debug.WriteLine(CoefficientsMA.Estimate[0]);
Debug.Write(" Стандартная ошибка: ");
Debug.WriteLine(CoefficientsMA.StandardError[0]);
Debug.Write(" t-статистика: ");
Debug.WriteLine(CoefficientsMA.TStatistic[0]);
Debug.Write(" Вероятность:");
Debug.WriteLine(CoefficientsMA.Probability[0]);
// Сохраняем изменения в модели
(oModel As IMetabaseObject).Save;
End Sub UserProc;
После выполнения примера для модели будут определены порядки авторегрессии и скользящего среднего. Также будет изменено максимальное число итераций, точность решения, метод обработки пропусков и параметры расчета доверительных границ. В окно консоли будут выведены значения статистических характеристик, рассчитанных для коэффициентов авторегрессии и скользящего среднего.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
hModel: IMetabaseObjectDescriptor;
oModel: IMsModel;
oTransform: IMsFormulaTransform;
oSelector: IMsFormulaTransformSelector;
oOutputVariable: IMsFormulaTransformVariable;
oLinear: IMsLinearRegressionTransform;
ARMA: ISlARMA;
pCalc: IMsMethodCalculation;
coo: IMsFormulaTransformCoord;
AR, MR: Array[1] Of Integer;
CoefficientsAR, CoefficientsMA: ICoefficients;
Estimate, Probability, StandardError, TStatistic: System.Array;
Begin
mb := Params.Metabase;
// Получаем модель линейной регрессии
hModel := mb.ItemByIdNamespace["MODEL_LINEARREGR", mb.GetObjectKeyById("MS")];
oModel := hModel.Edit() As IMsModel;
// Получаем параметры расчета
oTransform := oModel.Transform;
oSelector := oTransform.CreateSelector();
// Получаем моделируемую переменную
oOutputVariable := oTransform.Outputs.Item[0] As IMsFormulaTransformVariable;
oSelector.Slice := oOutputVariable.Slices.Item[0];
// Настраиваем расчет линейной регрессии
oLinear := oTransform.Transform[oSelector].Method As IMsLinearRegressionTransform;
ARMA := oLinear.ARMA;
// Задаем порядок авторегрессии
AR[0] := 3;
ARMA.OrderAR := AR;
// Задаем порядок скользящего среднего
MR[0] := 2;
ARMA.OrderMA := MR;
// Задаем максимальное число итераций
ARMA.MaxIteration := 300;
// Задаем точность решения
ARMA.Tolerance := 0.5;
// Указываем, что при расчете доверительных границ не учитываем,
// что коэффициенты найдены приближенно
oLinear.CoefUncertaintyInSECalc := False;
// Задаем параметры обработки пропусков
oLinear.MissingData.Method := MissingDataMethod.mdmLinTrend;
// Задаем параметры расчета модели
pCalc := oTransform.CreateCalculation();
pCalc.Period.IdentificationStartDate := DateTime.Parse("2000.1.1");
pCalc.Period.IdentificationEndDate := DateTime.Parse("2010.12.31");
pCalc.Period.ForecastStartDate := DateTime.Parse("2011.1.1");
pCalc.Period.ForecastEndDate := DateTime.Parse("2015.12.31");
coo := oTransform.CreateCoord(oOutputVariable);
oLinear.Identify(pCalc, coo);
// Получаем коэффициенты авторегрессии
CoefficientsAR := oLinear.ARMACoefficients[coo].CoefficientsAR;
Estimate := CoefficientsAR.Estimate;
Probability := CoefficientsAR.Probability;
StandardError := CoefficientsAR.StandardError;
TStatistic := CoefficientsAR.TStatistic;
System.Diagnostics.Debug.WriteLine("Коэффициенты авторегрессии");
System.Diagnostics.Debug.Write(" Значение: ");
System.Diagnostics.Debug.WriteLine(Estimate[0]);
System.Diagnostics.Debug.Write(" Стандартная ошибка: ");
System.Diagnostics.Debug.WriteLine(StandardError[0]);
System.Diagnostics.Debug.Write(" t-статистика: ");
System.Diagnostics.Debug.WriteLine(TStatistic[0]);
System.Diagnostics.Debug.Write(" Вероятность:");
System.Diagnostics.Debug.WriteLine(Probability[0]);
// Получаем коэффициенты скользящего среднего
CoefficientsMA := oLinear.ARMACoefficients[coo].CoefficientsMA;
Estimate := CoefficientsMA.Estimate;
Probability := CoefficientsMA.Probability;
StandardError := CoefficientsMA.StandardError;
TStatistic := CoefficientsMA.TStatistic;
System.Diagnostics.Debug.WriteLine("Коэффициенты скользящего среднего");
System.Diagnostics.Debug.Write(" Значение: ");
System.Diagnostics.Debug.WriteLine(Estimate[0]);
System.Diagnostics.Debug.Write(" Стандартная ошибка: ");
System.Diagnostics.Debug.WriteLine(StandardError[0]);
System.Diagnostics.Debug.Write(" t-статистика: ");
System.Diagnostics.Debug.WriteLine(TStatistic[0]);
System.Diagnostics.Debug.Write(" Вероятность:");
System.Diagnostics.Debug.WriteLine(Probability[0]);
// Сохраняем изменения в модели
(oModel As IMetabaseObject).Save();
End Sub;
См. также: