IMsDiagnosticTestResults.CoefficientsNames

Синтаксис Fore

CoefficientsNames: Array;

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

CoefficientsNames: System.Array;

Описание

Свойство CoefficientsNames возвращает наименования коэффициентов.

Комментарии

Для получения значений коэффициентов используйте свойство IMsDiagnosticTestResults.ModelCoefficients.

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащего задачу моделирования с идентификатором «MODEL_RESETTEST_WEB». Задача должна быть создана из веб-приложения и содержать только модель линейной регрессии.

Добавьте ссылки на системные сборки: Metabase, Ms, Stat.

Sub DiagnosticTests;
Var
    mb: IMetabase;
    MSKey: Integer;
    Problem: IMsProblem;
    Meta: IMsMetaModel;
    ChainEnts: IMsCalculationChainEntries;
    ChainEl: IMsCalculationChainEntry;
    pModel: IMsModel;
    pTransform: IMsFormulaTransform;
    pFormula: IMsFormula;
    pRegress: IMsLinearRegressionTransform;
    pTestList: IMsDiagnosticTestList;
    Test: IMsDiagnosticTest;
    VarTrans: IMsFormulaTransformVariable;
    Settings: IMsDiagnosticTestSettings;
    Calc: IMsMethodCalculation;
    Coord: IMsFormulaTransformCoord;
    Res: IMsDiagnosticTestResults;
    Stat: ISpecificationTestStatistic;
    i: Integer;
    Coef: ICoefficients;
    CoefNames: Array Of String;
Begin
    mb := MetabaseClass.Active;
    // Получаем задачу моделирования
    MSKey := mb.GetObjectKeyById("MS");
    Problem := mb.ItemByIdNamespace("MODEL_RESETTEST_WEB", MSKey).Bind As IMsProblem;
    // Получаем внутреннюю метамодель
    Meta := Problem.MetaModel;
    // Получаем задачу линейной регрессии
    ChainEnts := Meta.CalculationChain;
    For i := 0 To ChainEnts.Count - 1 Do
        ChainEl := ChainEnts.Item(i);
        If ChainEl.Type = MsCalculationChainEntryType.Model Then
            pModel := (ChainEl As IMsCalculationChainModel).Model;
        End If;
    End For;
    // Получаем параметры расчёта модели
    pTransform := pModel.Transform;
    pFormula := pTransform.FormulaItem(0);
    pRegress := pFormula.Method As IMsLinearRegressionTransform;
    // Получаем набор диагностических тестов
    pTestList := pRegress.DiagnosticTests;
    // Находим RESET-тест Рамсея
    Test := pTestList.FindByType(MsDiagnosticTestType.RamseyResset);
    VarTrans := pTransform.Outputs.Item(0);
    // Получаем настройки теста
    Settings := Test.Settings;
    // Задаем уровень значимости
    Settings.ConfidenceLevel := 0.75;
    // Проверяем, доступен ли расчет теста с помощью пакета R
    If Settings.SupportsR
        Then
            Settings.UseR := True;
            Debug.WriteLine("При расчете теста будет использоваться подключение R");
        Else
            Debug.WriteLine("Тест не поддерживает расчет с помощью R");
    End If;
    Debug.WriteLine("");
    // Задаем периоды тестирования
    Coord := pTransform.CreateCoord(VarTrans);
    Calc := pModel.CreateCalculation As IMsMethodCalculation;
    Calc.Period.IdentificationStartDate := pTransform.Period.IdentificationStartDate;
    Calc.Period.IdentificationEndDate := pTransform.Period.IdentificationEndDate;
    Calc.Period.ForecastStartDate := pTransform.Period.ForecastStartDate;
    Calc.Period.ForecastEndDate := pTransform.Period.ForecastEndDate;
    // Выполняем тестирование
    Res := Test.Execute(Calc As IMsMethodCalculation, Coord);
    // Выводим результаты
    If Res.Error <> "" Then
        Debug.WriteLine(Res.Error);
    Else
        Stat := Res.ChiTest;
        Debug.WriteLine("-- Статистика Хи-квадрат --");
        Debug.WriteLine("     Значение: " + Stat.Statistic.ToString);
        Debug.WriteLine("     Вероятность: " + Stat.Probability.ToString);
        If Res.FTestResult Then
            Debug.WriteLine("     Гипотеза о приемлемости функциональной формы принимается");
        Else
            Debug.WriteLine("     Гипотеза о приемлемости функциональной формы отвергается");
        End If;
        Stat := Res.FTest;
        Debug.WriteLine("-- Статистика Фишера --");
        Debug.WriteLine("     Значение: " + Stat.Statistic.ToString);
        Debug.WriteLine("     Вероятность: " + Stat.Probability.ToString);
        If Res.ChiTestResult Then
            Debug.WriteLine("     Гипотеза о приемлемости функциональной формы принимается");
        Else
            Debug.WriteLine("     Гипотеза о приемлемости функциональной формы отвергается");
        End If;
        CoefNames := Res.CoefficientsNames;
        Debug.WriteLine("-- Значения коэффициентов модели --");
        Coef := Res.ModelCoefficients.Coefficients;
        For i := 0 To Coef.Estimate.Length - 1 Do
            Debug.WriteLine("   Коэффициент " + CoefNames[i]);
            Debug.WriteLine("     Значение: " + Coef.Estimate[i].ToString);
            Debug.WriteLine("     Вероятность: " + Coef.Probability[i].ToString);
        End For;
        CoefNames := Res.CoefficientsARNames;
        If CoefNames.Length <> 0 Then
            Debug.WriteLine("-- Коэффициенты авторегрессии --");
            Coef := Res.CoefficientsAR;
            For i := 0 To CoefNames.Length - 1 Do
            Debug.WriteLine("   Коэффициент " + CoefNames[i]);
            Debug.WriteLine("     Значение: " + Coef.Estimate[i].ToString);
            Debug.WriteLine("     Вероятность: " + Coef.Probability[i].ToString);
            End For;
        End If;
        CoefNames := Res.CoefficientsMANames;
        If CoefNames.Length <> 0 Then
        Debug.WriteLine("-- Коэффициенты скользящего среднего --");
        Coef := Res.CoefficientsMA;
            For i := 0 To CoefNames.Length - 1 Do
            Debug.WriteLine("   Коэффициент " + CoefNames[i]);
            Debug.WriteLine("     Значение: " + Coef.Estimate[i].ToString);
            Debug.WriteLine("     Вероятность: " + Coef.Probability[i].ToString);
            End For;
        End If;
    End If;
End Sub DiagnosticTests;

Результат выполнения примера: для модели выполнен RESET-тест Рамсея, результаты выведены в окно консоли. Расчет будет выполнен с помощью пакета R.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Stat;

Public Shared Sub Main(Params: StartParams);
Var
    mb: IMetabase;
    MSKey: uinteger;
    Problem: IMsProblem;
    Meta: IMsMetaModel;
    ChainEnts: IMsCalculationChainEntries;
    ChainEl: IMsCalculationChainEntry;
    pModel: IMsModel;
    pTransform: IMsFormulaTransform;
    pFormula: IMsFormula;
    pRegress: IMsLinearRegressionTransform;
    pTestList: IMsDiagnosticTestList;
    Test: IMsDiagnosticTest;
    VarTrans: IMsFormulaTransformVariable;
    Settings: IMsDiagnosticTestSettings;
    Calc: IMsMethodCalculation;
    Coord: IMsFormulaTransformCoord;
    Res: IMsDiagnosticTestResults;
    Stat: ISpecificationTestStatistic;
    i: Integer;
    Coef: ICoefficients;
    CoefNames: System.Array;
Begin
    mb := Params.Metabase;
    // Получаем задачу моделирования
    MSKey := mb.GetObjectKeyById("MS");
    Problem := mb.ItemByIdNamespace["MODEL_RESETTEST_WEB", MSKey].Bind() As IMsProblem;
    // Получаем внутреннюю метамодель
    Meta := Problem.MetaModel;
    // Получаем задачу линейной регрессии
    ChainEnts := Meta.CalculationChain;
    For i := 0 To ChainEnts.Count - 1 Do
        ChainEl := ChainEnts.Item[i];
        If ChainEl.Type = MsCalculationChainEntryType.mccetModel Then
            pModel := (ChainEl As IMsCalculationChainModel).Model;
        End If;
    End For;
    // Получаем параметры расчёта модели
    pTransform := pModel.Transform;
    pFormula := pTransform.FormulaItem[0];
    pRegress := pFormula.Method As IMsLinearRegressionTransform;
    // Получаем набор диагностических тестов
    pTestList := pRegress.DiagnosticTests[NullNull];
    // Находим RESET-тест Рамсея
    Test := pTestList.FindByType[MsDiagnosticTestType.mdttRamseyResset];
    VarTrans := pTransform.Outputs.Item[0];
    // Получаем настройки теста
    Settings := Test.Settings;
    // Задаем уровень значимости
    Settings.ConfidenceLevel := 0.75;
    // Проверяем, доступен ли расчет теста с помощью пакета R
    If Settings.SupportsR
        Then
            Settings.UseR := True;
            System.Diagnostics.Debug.WriteLine("При расчете теста будет использоваться подключение R");
        Else
            System.Diagnostics.Debug.WriteLine("Тест не поддерживает расчет с помощью R");
    End If;
    System.Diagnostics.Debug.WriteLine("");
    // Задаем периоды тестирования
    Coord := pTransform.CreateCoord(VarTrans);
    Calc := pModel.CreateCalculation() As IMsMethodCalculation;
    Calc.Period.IdentificationStartDate := pTransform.Period.IdentificationStartDate;
    Calc.Period.IdentificationEndDate := pTransform.Period.IdentificationEndDate;
    Calc.Period.ForecastStartDate := pTransform.Period.ForecastStartDate;
    Calc.Period.ForecastEndDate := pTransform.Period.ForecastEndDate;
    // Выполняем тестирование
    Res := Test.Execute(Calc As IMsMethodCalculation, Coord);
    // Выводим результаты
    If Res.Error <> "" Then
        System.Diagnostics.Debug.WriteLine(Res.Error);
    Else
        Stat := Res.ChiTest;
        System.Diagnostics.Debug.WriteLine("-- Статистика Хи-квадрат --");
        System.Diagnostics.Debug.WriteLine("     Значение: " + Stat.Statistic.ToString());
        System.Diagnostics.Debug.WriteLine("     Вероятность: " + Stat.Probability.ToString());
        If Res.FTestResult Then
            System.Diagnostics.Debug.WriteLine("     Гипотеза о приемлемости функциональной формы принимается");
        Else
            System.Diagnostics.Debug.WriteLine("     Гипотеза о приемлемости функциональной формы отвергается");
        End If;
        Stat := Res.FTest;
        System.Diagnostics.Debug.WriteLine("-- Статистика Фишера --");
        System.Diagnostics.Debug.WriteLine("     Значение: " + Stat.Statistic.ToString());
        System.Diagnostics.Debug.WriteLine("     Вероятность: " + Stat.Probability.ToString());
        If Res.ChiTestResult Then
            System.Diagnostics.Debug.WriteLine("     Гипотеза о приемлемости функциональной формы принимается");
        Else
            System.Diagnostics.Debug.WriteLine("     Гипотеза о приемлемости функциональной формы отвергается");
        End If;
        CoefNames := Res.CoefficientsNames;
        System.Diagnostics.Debug.WriteLine("-- Значения коэффициентов модели --");
        Coef := Res.ModelCoefficients.Coefficients;
        For i := 0 To Coef.Estimate.Length - 1 Do
            System.Diagnostics.Debug.WriteLine("   Коэффициент " + CoefNames[i]);
            System.Diagnostics.Debug.WriteLine("     Значение: " + Coef.Estimate.GetValue(i).ToString());
            System.Diagnostics.Debug.WriteLine("     Вероятность: " + Coef.Probability.GetValue(i).ToString());
        End For;
        CoefNames := Res.CoefficientsARNames;
        If CoefNames.Length <> 0 Then
            System.Diagnostics.Debug.WriteLine("-- Коэффициенты авторегрессии --");
            Coef := Res.CoefficientsAR;
            For i := 0 To CoefNames.Length - 1 Do
            System.Diagnostics.Debug.WriteLine("   Коэффициент " + CoefNames[i]);
            System.Diagnostics.Debug.WriteLine("     Значение: " + Coef.Estimate.GetValue(i).ToString());
            System.Diagnostics.Debug.WriteLine("     Вероятность: " + Coef.Probability.GetValue(i).ToString());
            End For;
        End If;
        CoefNames := Res.CoefficientsMANames;
        If CoefNames.Length <> 0 Then
        System.Diagnostics.Debug.WriteLine("-- Коэффициенты скользящего среднего --");
        Coef := Res.CoefficientsMA;
            For i := 0 To CoefNames.Length - 1 Do
            System.Diagnostics.Debug.WriteLine("   Коэффициент " + CoefNames[i]);
            System.Diagnostics.Debug.WriteLine("     Значение: " + Coef.Estimate.GetValue(i).ToString());
            System.Diagnostics.Debug.WriteLine("     Вероятность: " + Coef.Probability.GetValue(i).ToString());
            End For;
        End If;
    End If;
End Sub;

См. также:

IMsDiagnosticTestResults