IMsMetaModelVisualController.AutoCorrelation

Синтаксис Fore

AutoCorrelation(EntryKey: Integer;
    Period: IMsModelPeriod;
    Var ACF: Array;
    Var PACF: Array;
    Var QStatistics: Array;
    Var Probability: Array;
    Var StandardError: Double): String;

Синтаксис Fore.NET

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, PACFQStatistics, Probablity и StandardError будут выгружены результаты расчёта; в обратном случае метод вернет текст ошибки.

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «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 = -1Or (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.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 = 0Or (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;

См. также:

IMsMetaModelVisualController