AutoCorrelation(EntryKey: Integer;
Period: IMsModelPeriod;
Var ACF: Array;
Var PACF: Array;
Var QStatistics: Array;
Var Probability: Array;
Var StandardError: Double): String;
AutoCorrelation
(EntryKey: integer;
Period: Prognoz.Platform.Interop.Ms.IMsModelPeriod;
var ACF: System.Array;
var PACF: System.Array;
var QStatistics: System.Array;
var Probability: System.Array;
var StandardError: double): string;
EntryKey. Параметры расчета модели;
Period. Период расчёта;
ACF. Вещественный массив со значениями автокорреляционной функции;
PACF. Вещественный массив со значениями частной автокорреляционной функции;
QStatistics. Вещественный массив со значениями q-статистики Льюнга-Бокса;
Probability. Вещественный массив со значениями вероятности q-статистики Льюнга-Бокса;
StandardError. Значение стандартной ошибки.
Метод AutoCorrelation выполняет автокорреляционный анализ переменной.
Если анализ выполнен успешно, то в параметры ACF, PACF, QStatistics, Probablity и StandardError будут выгружены результаты расчёта; в обратном случае метод вернет текст ошибки.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащего задачу моделирования с идентификатором «PROBLEM». Данная задача должна содержать внутреннюю метамодель.
Добавьте ссылки на системные сборки «Metabase», «Ms».
// Выполнение автокорреляционного анализа
Sub UserAutoCorrelation;
Var
mb: IMetabase;
MsObj: IMetabaseObjectDescriptor;
Problem: IMsProblem;
Period: IMsModelPeriod;
Meta: IMsMetaModel;
MetaVisual: IMsMetaModelVisualController;
VarKey, i: Integer;
ChainEn: IMsCalculationChainEntries;
ACF, PACF, QStatistics, Probability: Array Of Double;
StandardError: Double;
Begin
mb := MetabaseClass.Active;
// Получаем контейнер моделирования
MsObj := mb.ItemById("MS");
// Получаем задачу моделирования
Problem := mb.ItemByIdNamespace("PROBLEM", MsObj.Key).Bind As IMsProblem;
// Получаем метамодель
Meta := Problem.MetaModel;
// Получаем период расчёта
Period := (Problem.Details As IMsProblemDetails).Period;
// Получаем 1-ю свободную переменную
ChainEn := Meta.CalculationChain;
VarKey := -1; i := 0;
Repeat
If ChainEn.Item(i).Type = MsCalculationChainEntryType.Variable Then
VarKey := ChainEn.Item(i).Key;
End If;
i := i + 1;
Until (VarKey = -1) Or (i <> ChainEn.Count);
// Если переменная найдена, то выполняем автокорреляционный анализ
If VarKey <> -1 Then
MetaVisual := Meta.VisualController;
Debug.WriteLine(MetaVisual.AutoCorrelation(VarKey, Period, ACF, PACF, QStatistics, Probability, StandardError));
Debug.WriteLine("Значения автокорреляционной функции");
PrintArray(ACF);
Debug.WriteLine("Значения частной автокорреляционной функции");
PrintArray(PACF);
Debug.WriteLine("Значения q - статистики Льюнга-Бокса");
PrintArray(QStatistics);
Debug.WriteLine("Значения вероятности q - статистики Льюнга-Бокса");
PrintArray(Probability);
Debug.WriteLine("Значение стандартной ошибки автокорреляционной функции");
Debug.WriteLine(StandardError);
End If;
End Sub UserAutoCorrelation;
// Процедура вывода данных
Sub PrintArray(arr: Array Of Double);
Var i: Integer;
Begin
For i := 0 To arr.Length - 1 Do
Debug.WriteLine(arr[i]);
End For;
Debug.WriteLine("");
End Sub PrintArray;
Результат выполнения примера: если метамодель содержит переменные, то для первой переменной будет выполнен автокорреляционный анализ и результаты будут выведены в окно консоли.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Ms;
…
// Выполнение автокорреляционного анализа
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
MsObj: IMetabaseObjectDescriptor;
Problem: IMsProblem;
Period: IMsModelPeriod;
Meta: IMsMetaModel;
MetaVisual: IMsMetaModelVisualController;
VarKey: uinteger;
i: integer;
ChainEn: IMsCalculationChainEntries;
ACF, PACF, QStatistics, Probability: System.Array;
StandardError: Double;
Begin
mb := Params.Metabase;
// Получаем контейнер моделирования
MsObj := mb.ItemById["MS"];
// Получаем задачу моделирования
Problem := mb.ItemByIdNamespace["PROBLEM", MsObj.Key].Bind() As IMsProblem;
// Получаем метамодель
Meta := Problem.MetaModel;
// Получаем период расчёта
Period := (Problem.Details As IMsProblemDetails).Period;
// Получаем 1-ю свободную переменную
ChainEn := Meta.CalculationChain;
VarKey := 0; i := 0;
Repeat
If ChainEn.Item[i].Type = MsCalculationChainEntryType.mccetVariable Then
VarKey := ChainEn.Item[i].Key;
End If;
i := i + 1;
Until (VarKey = 0) Or (i <> ChainEn.Count);
// Если переменная найдена, то выполняем автокорреляционный анализ
If VarKey <> 0 Then
MetaVisual := Meta.VisualController;
System.Diagnostics.Debug.WriteLine(MetaVisual.AutoCorrelation(VarKey As integer, Period,
Var ACF, Var PACF, Var QStatistics, Var Probability, Var StandardError));
System.Diagnostics.Debug.WriteLine("Значения автокорреляционной функции");
PrintArray(ACF);
System.Diagnostics.Debug.WriteLine("Значения частной автокорреляционной функции");
PrintArray(PACF);
System.Diagnostics.Debug.WriteLine("Значения q - статистики Льюнга-Бокса");
PrintArray(QStatistics);
System.Diagnostics.Debug.WriteLine("Значения вероятности q - статистики Льюнга-Бокса");
PrintArray(Probability);
System.Diagnostics.Debug.WriteLine("Значение стандартной ошибки автокорреляционной функции");
System.Diagnostics.Debug.WriteLine(StandardError);
End If;
End Sub;
// Процедура вывода данных
Public Shared Sub PrintArray(arr: System.Array);
Var i: Integer;
Begin
For i := 0 To arr.Length - 1 Do
System.Diagnostics.Debug.WriteLine(arr[i]);
End For;
System.Diagnostics.Debug.WriteLine("");
End Sub PrintArray;
См. также: