StatCoefficientsByIndex(Coord: IMsFormulaTransformCoord;
Index:
Integer): ISlConstCoefficients;
StatCoefficientsByIndex[Coord: Prognoz.Platform.Interop.Ms.IMsFormulaTransformCoord;
Index:
Integer]: Prognoz.Platform.Interop.Stat.ISlConstCoefficients;
Coord. Срез моделируемой переменной, для которого осуществляется расчет;
Index. Индекс коэффициента.
Свойство StatCoefficientsByIndex возвращает значения статистических характеристик, рассчитанных для коэффициентов идентифицированного уравнения модели, по индексу коэффициента.
Для получения массива коэффициентов используйте свойство IMsNonLinearRegressionTransform.Coefficients.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором MS, содержащего модель с идентификатором MODEL_NONLINEAR, рассчитываемую методом «Нелинейная регрессия (оценка нелинейным МНК)».
Добавьте ссылки на системные сборки: Metabase, Ms, Stat.
Sub UserProc;
Var
mb: IMetabase;
MsKey: Integer;
Model: IMsModel;
Transform: IMsFormulaTransform;
NonLinear: IMsNonLinearRegressionTransform;
Calc: IMsModelCalculation;
OutputVar: IMsFormulaTransformVariable;
Coord: IMsFormulaTransformCoord;
CoefData: Array Of Double;
Coef: Array Of String;
j: Integer;
ConstCoeff: ISlConstCoefficients;
Begin
// Получаем текущий репозиторий
mb := MetabaseClass.Active;
// Получаем ключ контейнера моделирования
MsKey := mb.GetObjectKeyById("MS");
// Получаем модель
Model := mb.ItemByIdNamespace("MODEL_NONLINEAR", MsKey).Edit As IMsModel;
// Получаем параметры модели
Transform := Model.Transform;
// Получаем параметры метода расчета
NonLinear := Transform.FormulaItem(0).Method As IMsNonLinearRegressionTransform;
// Задаем значимость доверительных границ
NonLinear.ConfidenceLevel := 0.90;
// Добавляем новый коэффициент в уравнение модели
NonLinear.Expression.AsString := "(" + NonLinear.Expression.AsString + ") * A1";
// Создаем настройки для расчета модели
Calc := Model.CreateCalculation;
// Задаем периоды расчета
Calc.Period.IdentificationStartDate := DateTime.Parse("01.01.1990");
Calc.Period.IdentificationEndDate := DateTime.Parse("01.01.2010");
Calc.Period.ForecastStartDate := DateTime.Parse("01.01.2011");
Calc.Period.ForecastEndDate := DateTime.Parse("01.01.2017");
// Получаем моделируемую переменную
OutputVar := Transform.Outputs.Item(0);
// Получаем параметры моделируемой переменной, необходимые для расчёта модели
Coord := Transform.CreateCoord(OutputVar);
// Идентифицируем коэффициенты модели
NonLinear.Identify(Calc As IMsMethodCalculation, Coord);
// Получаем идентифицированные коэффициенты
CoefData := NonLinear.CoefficientsData(Coord);
// Получаем наименования коэффициентов
Coef := NonLinear.Coefficients;
// Выводим наименования, значения и статистические характеристики коэффициентов в окно консоли
Debug.WriteLine("Значения и стандартная ошибка коэффициентов");
For j := 0 To CoefData.Length - 1 Do
// Выводим наименование, значение коэффициента
Debug.Write(" " + Coef[j] + ": " + CoefData[j].ToString);
// Получаем статистические характеристики коэффициента
ConstCoeff := NonLinear.StatCoefficientsByIndex(Coord, j);
// Выводим стандартную ошибку коэффициента
Debug.WriteLine("; " + ConstCoeff.StandardError.ToString);
End For;
// Сохраняем изменения в модели
(Model As IMetabaseObject).Save;
End Sub UserProc;
В результате выполнения примера будут изменены параметры модели, в окно консоли будут выведены: значения и стандартная ошибка коэффициентов модели.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
MsKey: uinteger;
Model: IMsModel;
Transform: IMsFormulaTransform;
NonLinear: IMsNonLinearRegressionTransform;
Calc: IMsModelCalculation;
OutputVar: IMsFormulaTransformVariable;
Coord: IMsFormulaTransformCoord;
CoefData: System.Array;
Coef: System.Array;
j: Integer;
ConstCoeff: ISlConstCoefficients;
Begin
// Получаем текущий репозиторий
mb := Params.Metabase;
// Получаем ключ контейнера моделирования
MsKey := mb.GetObjectKeyById("MS");
// Получаем модель
Model := mb.ItemByIdNamespace["MODEL_NONLINEAR", MsKey].Edit() As IMsModel;
// Получаем параметры модели
Transform := Model.Transform;
// Получаем параметры метода расчета
NonLinear := Transform.FormulaItem[0].Method As IMsNonLinearRegressionTransform;
// Задаем значимость доверительных границ
NonLinear.ConfidenceLevel := 0.90;
// Добавляем новый коэффициент в уравнение модели
NonLinear.Expression.AsString := "(" + NonLinear.Expression.AsString + ") * A1";
// Создаем настройки для расчета модели
Calc := Model.CreateCalculation();
// Задаем периоды расчета
Calc.Period.IdentificationStartDate := DateTime.Parse("01.01.1990");
Calc.Period.IdentificationEndDate := DateTime.Parse("01.01.2010");
Calc.Period.ForecastStartDate := DateTime.Parse("01.01.2011");
Calc.Period.ForecastEndDate := DateTime.Parse("01.01.2017");
// Получаем моделируемую переменную
OutputVar := Transform.Outputs.Item[0];
// Получаем параметры моделируемой переменной, необходимые для расчёта модели
Coord := Transform.CreateCoord(OutputVar);
// Идентифицируем коэффициенты модели
NonLinear.Identify(Calc As IMsMethodCalculation, Coord);
// Получаем идентифицированные коэффициенты
CoefData := NonLinear.CoefficientsData[Coord];
// Получаем наименования коэффициентов
Coef := NonLinear.Coefficients;
// Выводим наименования, значения и статистические характеристики коэффициентов в окно консоли
System.Diagnostics.Debug.WriteLine("Значения и стандартная ошибка коэффициентов");
For j := 0 To CoefData.Length - 1 Do
// Выводим наименование, значение коэффициента
System.Diagnostics.Debug.Write(" " + Coef[j] + ": " + CoefData[j].ToString());
// Получаем статистические характеристики коэффициента
ConstCoeff := NonLinear.StatCoefficientsByIndex[Coord, j];
// Выводим стандартную ошибку коэффициента
System.Diagnostics.Debug.WriteLine("; " + ConstCoeff.StandardError.ToString());
End For;
// Сохраняем изменения в модели
(Model As IMetabaseObject).Save();
End Sub;
См. также: