Ниже приведен пример использования операции GetMs для расчёта уравнения. В запросе передаются: экземпляр открытого контейнера моделирования, шаблон расчёта уравнения и параметры выполнения операции. В ответе приходит экземпляр модели, содержащей уравнение с результатами расчёта.
Для выполнения примера уравнение должно рассчитываться методом «Линейная регрессия».
В примере C# для вывода результатов используются вспомогательные процедуры: printPDL, PrintSeries описанные в данном разделе; PrintCoef, printARMA, PrintArray, PrintSeries, описанные в разделе «Расчёт уравнения».
{
"GetMs" :
{
"tMs" :
{
"id" : "IEHFOKNBPENBFOAEDMNIFBMAGBJFMILEEKEMODKJPMDBDAAN!M!S!CKILIGLNBPENBFOAEGCFPILNFBENOEAEENLANPEIMKOMICGHG"
},
"tArg" :
{
"pattern" :
{
"obInst" : "false",
"all" : "false",
"item" :
{
"key" : "89669",
"problem" :
{
"metamodel" :
{
"calculationChain" : "Get",
"calcChainPattern" :
{
"modelPattern" :
{
"transform" :
{
"outputs" : "Get",
"formulaCount" : "true",
"formulas" :
{
"method" :
{
"series" : "true"
}
},
"displayId" : "true",
"equationsFormula" :
{
"method" : ""
},
"series" : "Get",
"kind" : "true",
"displaySettings" : "true",
"additionalAttributes" : "true",
"calculationType" : "true",
"calculationDirection" : "true",
"transformVariable" :
{
"slices" : "Get",
"transformSlice" :
{
"selection" : "Get"
}
}
},
"stochastic" : "true",
"calculationPeriod" : "true",
"useModelPeriod" : "true",
"useExistingData" : "true",
"treatNullsAsZeros" : "true",
"autoName" : "true",
"generatedName" : "true",
"period" : "true",
"isExclusive" : "true",
"useAutoPeriod" : "true"
},
"entryKeys" :
{
"l" : "4"
}
}
}
}
}
},
"execParams" :
{
"k" : "0",
"modelKeys" :
{
"l" : "4"
},
"pdlIndex" : "1",
"scenarioKeys" : "",
"execMethod" : "true",
"execCoefficients" : "true",
"execEvaluateSeries" : "true",
"execPairCorrelationMatrix" : "true",
"execARMACoefficients" : "true",
"execPDLStatCoefficients" : "true",
"execStatCoefficients" : "true"
}
}
}
}
{
"GetMsResult" :
{
"id" :
{
"id" : "IEHFOKNBPENBFOAEDMNIFBMAGBJFMILEEKEMODKJPMDBDAAN!M!S!CKILIGLNBPENBFOAEGCFPILNFBENOEAEENLANPEIMKOMICGHG"
},
"meta" :
{
"item" :
{
"k" : "89669",
"id" : "MODEL_NEW",
"n" : "MODEL_NEW",
"vis" : "1",
"type" : "Problem",
"problemMd" :
{
"metamodel" :
{
"k" : "89670",
"calculationChain" :
{
"its" :
{
"Item" :
{
"k" : "4",
"id" : "OBJ4",
"n" : "MyOutputVavable|A[t] = A0 + PDL(TS(MyInputVavable[t+1] * 8, Linear), 1, 1) + [AR(1)=A1], (От родителя)-(От родителя)",
"vis" : "1",
"type" : "Model",
"excluded" : "0",
"graphMeta" : "",
"model" :
{
"transform" :
{
"outputs" :
{
"its" :
{
"Item" :
{
"k" : "1",
"id" : "VARIABLES_89670",
"n" : "Variables",
"vis" : "1",
"slices" :
{
"its" :
{
"Item" :
{
"k" : "0",
"id" : "MyOutputVavable|A",
"n" : "MyOutputVavable|A",
"vis" : "1",
"variableKey" : "1",
"stubKey" : "89671",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "89683"
},
"variant" : "2"
}
}
},
"aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
},
"level" : "Year"
}
}
},
"variableStubKey" : "89671",
"parameterID" : "",
"kind" : "Stub",
"attributeId" : "",
"attributeType" : "Series"
}
}
},
"formulaCount" : "1",
"formulas" :
{
"its" :
{
"it" :
[
{
"k" : "0",
"kind" : "LinearRegression",
"method" :
{
"linearRegression" :
{
"constantMode" : "ManualEstimate",
"constantValue" : "0.5",
"confidenceLevel" : "0.85",
"ARMA" :
{
"orderAR" :
{
"l" : "1"
},
"orderMA" : "",
"calcInitMode" : "Auto",
"initAR" : "",
"initMA" : "",
"initIntercept" : "NaN",
"estimationMethod" : "LevenbergMarquardt",
"tolerance" : "0.0001",
"maxIteration" : "500",
"coefficientsAR" :
{
"estimate" : "",
"standardError" : "",
"tStatistic" : "",
"probability" : ""
},
"coefficientsMA" :
{
"estimate" : "",
"standardError" : "",
"tStatistic" : "",
"probability" : ""
},
"diff" : "0",
"diffSeas" : "1",
"orderARSeas" : "",
"orderMASeas" : "",
"initARSeas" : "",
"initMASeas" : "",
"periodSeas" : "0",
"coefficientsARSeas" :
{
"estimate" : "",
"standardError" : "",
"tStatistic" : "",
"probability" : ""
},
"coefficientsMASeas" :
{
"estimate" : "",
"standardError" : "",
"tStatistic" : "",
"probability" : ""
},
"useARMAasInstrums" : "1",
"useAnalyticDeriv" : "1",
"useBackCast" : "1"
},
"missingData" :
{
"specifiedVector" : "",
"method" : "Casewise",
"methodParameter" : "5",
"specifiedValue" : "0",
"specifiedTerm" :
{
"k" : "4294967295"
}
},
"coefficients" :
{
"d" : "-0.08396406739747959"
},
"pairCorrelationMatrix" :
{
"data" :
{
"d" :
[
"1",
"-0.7626332420071756",
"-0.7626332420071756",
"1"
]
}
},
"armaCoefficients" :
{
"orderAR" :
{
"l" : "1"
},
"orderMA" : "",
"coefficientsAR" :
{
"estimate" :
{
"d" : "0.8682687093029638"
},
"standardError" :
{
"d" : "0.07799376856974333"
},
"tStatistic" :
{
"d" : "11.13253949931325"
},
"probability" :
{
"d" : "2.867720505506099e-10"
}
},
"coefficientsMA" :
{
"estimate" : "",
"standardError" : "",
"tStatistic" : "",
"probability" : ""
},
"orderARSeas" : "",
"orderMASeas" : "",
"coefficientsARSeas" :
{
"estimate" : "",
"standardError" : "",
"tStatistic" : "",
"probability" : ""
},
"coefficientsMASeas" :
{
"estimate" : "",
"standardError" : "",
"tStatistic" : "",
"probability" : ""
}
},
"pdlStatCoefficients" :
{
"estimatesSum" : "0",
"stdErrSum" : "0",
"tStatSum" : "0"
},
"statCoefficients" :
{
"intercept" :
{
"mode" : "ManualEstimate",
"estimate" : "0.5",
"standardError" : "NaN",
"tStatistic" : "NaN",
"probability" : "NaN"
},
"coefficients" :
{
"estimate" :
{
"d" : "-0.08396406739747959"
},
"standardError" :
{
"d" : "0.02130633695023525"
},
"tStatistic" :
{
"d" : "-3.94080256937608"
},
"probability" :
{
"d" : "0.0007483835396404626"
}
}
}
},
"name" : "0.5000 + PDL(X1, 1, 1) + [AR(1)=0.8683]",
"series" :
{
"input" :
{
"k" : "4294967295",
"lag" : "0",
"inversion" :
{
"type" : "None",
"lag" : "PrecidingValue",
"previousLag" : "-1",
"seasonality" : "None",
"dependence" : "Linear",
"K" : "3"
},
"slice" :
{
"k" : "0",
"id" : "MyOutputVavable|A",
"n" : "MyOutputVavable|A",
"vis" : "1",
"variableKey" : "1",
"stubKey" : "89671",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "89683"
},
"variant" : "2"
}
}
},
"aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
},
"level" : "Year"
},
"date" : "1899-12-30"
},
"addFactor" :
{
"k" : "4294967295"
}
},
"evaluateSeries" :
{
"its" :
{
"Item" :
{
"scenarioKey" : "4294967295",
"fact" :
{
"d" :
[
"3",
"7",
"2",
"6",
"4",
"1",
"5",
"3.42857143",
"3.28571429",
"3.14285714",
"3",
"2.85714286",
"2.71428571",
"2.57142857",
"2.42857143",
"2.28571429",
"2.14285714",
"2",
"1.85714286",
"1.71428571",
"1.57142857",
"1.42857143",
"1.28571429",
"1.14285714",
"1",
"0.85714286",
"0.71428571",
"0.57142857",
"NaN"
]
},
"modelling" :
{
"d" :
[
"NaN",
"6.796910634289292",
"1.14416876286019",
"4.975957312453287",
"4.442458519583021",
"3.514234055349136",
"0.9217015149591798",
"4.40704993968997",
"3.0549012709732",
"2.943136473929621",
"2.831371668203355",
"2.71960687115977",
"2.607842074116201",
"2.496077268389927",
"2.384312471346351",
"2.272547674302773",
"2.160782877259189",
"2.049018071532927",
"1.937253274489343",
"1.825488477445767",
"1.713723671719501",
"1.601958874675926",
"1.490194077632337",
"1.378429280588761",
"1.266664474862499",
"NaN",
"NaN",
"NaN",
"NaN"
]
},
"residuals" :
{
"d" :
[
"NaN",
"0.2030893657107082",
"0.8558312371398105",
"1.024042687546713",
"-0.4424585195830213",
"-2.514234055349136",
"4.07829848504082",
"-0.9784785096899702",
"0.2308130190268001",
"0.199720666070379",
"0.1686283317966448",
"0.1375359888402303",
"0.106443635883799",
"0.07535130161007286",
"0.04425895865364904",
"0.01316661569722655",
"-0.01792573725918922",
"-0.04901807153292737",
"-0.0801104144893432",
"-0.1112027674457667",
"-0.1422951017195007",
"-0.1733874446759258",
"-0.2044797876323372",
"-0.2355721405887614",
"-0.2666644748624989",
"NaN",
"NaN",
"NaN",
"NaN"
]
},
"input" :
{
"d" :
[
"3",
"7",
"2",
"6",
"4",
"1",
"5",
"3.42857143",
"3.28571429",
"3.14285714",
"3",
"2.85714286",
"2.71428571",
"2.57142857",
"2.42857143",
"2.28571429",
"2.14285714",
"2",
"1.85714286",
"1.71428571",
"1.57142857",
"1.42857143",
"1.28571429",
"1.14285714",
"1",
"0.85714286",
"0.71428571",
"0.57142857",
"NaN",
"NaN",
"NaN"
]
},
"factors" :
{
"its" :
{
"it" :
[
{
"termToText" : "{MyInputVavable[t+1]}",
"serie" :
{
"d" :
[
"32",
"16",
"56",
"60",
"72.8",
"85.59999999999999",
"98.40000000000001",
"111.2",
"124",
"136.8",
"149.6",
"162.4",
"175.2",
"188",
"200.8",
"213.6",
"226.4",
"239.2",
"252",
"264.8",
"277.6",
"290.4",
"303.2",
"316",
"328.8",
"NaN",
"NaN",
"NaN",
"NaN",
"NaN",
"NaN"
]
},
"transformedSerie" :
{
"d" :
[
"-28.54510344827582",
"-52.73702463054184",
"-20.92894581280785",
"-25.12086699507387",
"-20.51278817733989",
"-15.90470935960589",
"-11.29663054187189",
"-6.688551724137909",
"-2.080472906403926",
"2.527605911330056",
"7.135684729064025",
"11.74376354679805",
"16.35184236453202",
"20.95992118226602",
"25.56800000000001",
"30.17607881773398",
"34.78415763546798",
"39.39223645320195",
"44.00031527093594",
"48.60839408866994",
"53.21647290640394",
"57.82455172413788",
"62.43263054187187",
"67.0407093596059",
"71.6487881773399",
"NaN",
"NaN",
"NaN",
"NaN",
"NaN",
"NaN"
]
},
"inversion" :
{
"type" : "TS",
"lag" : "PrecidingValue",
"previousLag" : "-1",
"seasonality" : "None",
"dependence" : "Linear",
"K" : "3"
},
"entryKey" : "1"
}
]
}
}
}
},
"dates" :
{
"it" :
[
"1990A1",
"1991A1",
"1992A1",
"1993A1",
"1994A1",
"1995A1",
"1996A1",
"1997A1",
"1998A1",
"1999A1",
"2000A1",
"2001A1",
"2002A1",
"2003A1",
"2004A1",
"2005A1",
"2006A1",
"2007A1",
"2008A1",
"2009A1",
"2010A1",
"2011A1",
"2012A1",
"2013A1",
"2014A1",
"2015A1",
"2016A1",
"2017A1",
"2018A1",
"2019A1",
"2020A1"
]
}
},
"inversionInfo" :
{
"type" : "None",
"lag" : "PrecidingValue",
"previousLag" : "-1",
"seasonality" : "None",
"dependence" : "Linear",
"K" : "3"
},
"doUseR" : "0",
"supportsR" : "1"
},
"calendarLevel" : "Year",
"outputSliceKey" : "0"
}
]
}
},
"displayId" : "0",
"series" :
{
"its" : ""
},
"kind" : "Simple",
"displaySettings" :
{
"displayTermsAs" : "Derive"
},
"additionalAttributes" : "",
"calculationType" : "Serie",
"calculationDirection" : "Forward"
},
"stochastic" : "1",
"calculationPeriod" : "Forecast",
"useModelPeriod" : "1",
"useExistingData" : "0",
"treatNullsAsZeros" : "0",
"autoName" : "1",
"period" :
{
"identificationStartDate" : "1990-01-01",
"identificationEndDate" : "2018-04-24",
"forecastStartDate" : "2018-04-25",
"forecastEndDate" : "2020-01-01",
"identificationStartDateParamID" : "",
"identificationEndDateParamID" : "",
"forecastStartDateParamID" : "",
"forecastEndDateParamID" : "",
"autoPeriod" : "28672",
"identificationStartOffset" : "0",
"identificationEndOffset" : "0",
"forecastEndOffset" : "0",
"isIdentStartCorrect" : "1",
"isIdentEndCorrect" : "1",
"isForecastEndCorrect" : "1"
},
"isExclusive" : "1",
"useAutoPeriod" : "1",
"generatedName" : "MyOutputVavable|A[t] = A0 + PDL(TS(MyInputVavable[t+1] * 8, Linear), 1, 1) + [AR(1)=A1]",
"warnings" : "",
"readOnly" : "0"
}
}
}
},
"visualController" :
{
"userRPath" : "",
"isRExist" : "0"
},
"suppressEmptyFilter" :
{
"suppressEmpty" : "0",
"suppressEmptyArea" : "SerieBounds"
},
"readOnly" : "0",
"variableTestUseR" : "0",
"calculateIdentOnFact" : "0"
},
"useScenarios" : "0",
"readOnly" : "0"
}
}
}
}
}
public static MsCalculationChainEntry GetMsLinearRegr(MsId ms, ulong modelKey, ulong eqKey)
{
var getMsOp = new GetMs();
// Задаём параметры выполнения операции
getMsOp.tMs = ms;
getMsOp.tArg = new GetMsArg()
{ // Задаём шаблон извлечения данных
pattern = new MsMdPattern()
{
obInst = false,
all = false,
item = new MsItemPattern()
{ // Указываем ключ рассчитываемой модели
key = modelKey,
problem = new MsProblemPattern()
{
metamodel = new MsMetaModelPattern()
{
calculationChain = ListOperation.Get,
calcChainPattern = new MsCalculationChainPattern()
{
// Указываем ключ рассчитываемого уравнения
entryKeys = new long[] { (long)eqKey },
modelPattern = new MsModelPattern()
{
autoName = true,
calculationPeriod = true,
generatedName = true,
isExclusive = true,
period = true,
stochastic = true,
treatNullsAsZeros = true,
useAutoPeriod = true,
useExistingData = true,
useModelPeriod = true,
transform = new MsFormulaTransformPattern()
{
additionalAttributes = true,
calculationDirection = true,
calculationType = true,
displayId = true,
displaySettings = true,
formulaCount = true,
outputs = ListOperation.Get,
series = ListOperation.Get,
kind = true,
formulas = new TsFormulaPattern()
{
method = new TsMethodPattern()
{
series = true
}
},
equationsFormula = new TsFormulaPattern()
{
method = new TsMethodPattern() { }
},
transformVariable = new MsFormulaTransformVariablePattern()
{
slices = ListOperation.Get,
transformSlice = new MsFormulaTransformSlicePattern()
{
selection = ListOperation.Get
}
}
}
}
}
}
}
}
}, // Задаём параметры расчёта уравнения
execParams = new MsMdExecParams()
{
k = 0,
execMethod = true,
execEvaluateSeries = true,
scenarioKeys = new long[] { },
execPDLStatCoefficients = true,
pdlIndex = 1,
execPairCorrelationMatrix = true,
execStatCoefficients = true,
execCoefficients = true,
execARMACoefficients = true,
modelKeys = new long[] { (long)eqKey }
}
};
// Создаем прокси-объект для выполнения операции
var somClient = new SomPortTypeClient();
GetMsResult getMsResult = somClient.GetMs(getMsOp);
MsMetaModel meta = getMsResult.meta.item.problemMd.metamodel;
MsCalculationChainEntry chainEntry = meta.calculationChain.its.GetValue(0) as MsCalculationChainEntry;
// Выводим ошибки и предупреждения
MsModel eq = chainEntry.model;
if (eq.warnings != null)
{
Console.WriteLine("-- Предупреждения --");
Console.WriteLine("".PadRight(3) + printArray(eq.warnings));
}
if (eq.error == null) //Проверяем, возникли ли ошибки при расчёте уравнения
{ // Уравнение рассчитано без ошибок, получаем результаты расчёта
TsFormula formula = eq.transform.formulas.its.GetValue(0) as TsFormula;
TsLinearRegressionMethod linR = formula.method.linearRegression;
Console.WriteLine("-- Значения коэффициентов уравнения --");
Console.WriteLine("".PadRight(3) + printArray(linR.coefficients));
// Получаем значения коэффициентов уравнения и выводим в окно консоли
PrintCoef(linR.statCoefficients);
// Получаем значения коэффициентов авторегрессии, скользящего среднего и выводим в окно консоли
printARMA(linR.armaCoefficients);
Console.WriteLine("-- Матрица корреляции --");
MsPairCorrelationMatrix pm = linR.pairCorrelationMatrix;
if (pm.error != null) { Console.WriteLine("".PadRight(3) + "ошибка: " + pm.error); }
Console.WriteLine("".PadRight(3) + printArray(pm.data));
Console.WriteLine("-- Коэффициенты лаговых переменных --");
MsPDLCoefficients pdl = linR.pdlStatCoefficients;
printPDL(pdl);
// Выводим ряды, которые были рассчитаны
Console.WriteLine("-- Доступные ряды данных --");
printSeries(formula.method.series);
// Получаем рассчитанные значения и выводим в окно консоли
MsEvaluateSeriesResult seriesRes = formula.method.evaluateSeries;
printSeries(seriesRes);
}
else // При расчёте уравнения возникли ошибки
{
Console.WriteLine("-- Ошибки --");
Console.WriteLine(eq.error);
}
// Возвращаем модель, содержащую уравнение
return chainEntry;
}
// Процедура вывода значений коэффициентов для лаговых переменных
public static void printPDL(MsPDLCoefficients pdl)
{
Console.WriteLine("".PadRight(3) + " - cумма коэффициентов: " + pdl.estimatesSum);
Console.WriteLine("".PadRight(3) + " - cумма стандартных ошибок: " + pdl.stdErrSum);
Console.WriteLine("".PadRight(3) + " - cумма t-статистик: " + pdl.tStatSum);
Console.WriteLine("".PadRight(3) + " - Коэффициенты -");
PrintStatCoef(6, pdl as StatCoefficients);
}
// Процедура вывода идентификаторов рассчитанных рядов
public static void printSeries(MsMethodSeries series)
{
if (series.input != null)
{Console.WriteLine("".PadRight(3) + " - входной ряд");};
if (series.fitted != null)
{ Console.WriteLine("".PadRight(3) + " - сглаженный ряд"); };
if (series.forecast != null)
{ Console.WriteLine("".PadRight(3) + " - прогнозный ряд"); };
if (series.residuals != null)
{ Console.WriteLine("".PadRight(3) + " - ряд остатков"); };
if (series.lowerConfidenceLevel != null)
{ Console.WriteLine("".PadRight(3) + " - нижняя доверительная граница"); };
if (series.upperConfidenceLevel != null)
{ Console.WriteLine("".PadRight(3) + " - верхняя доверительная граница"); };
if (series.dynamicLowerConfidenceLevel != null)
{ Console.WriteLine("".PadRight(3) + " - нижняя динамическая доверительная граница"); };
if (series.dynamicUpperConfidenceLevel != null)
{ Console.WriteLine("".PadRight(3) + " - верхняя динамическая доверительная граница"); };
if (series.addFactor != null)
{ Console.WriteLine("".PadRight(3) + " - фактор корректировки прогноза"); };
}
См. также:
Работа с контейнером моделирования | Метод «Линейная регрессия»