Ниже приведен пример использования операции GetMs для расчёта уравнения. В запросе передаются: экземпляр открытого контейнера моделирования, шаблон расчёта уравнения и параметры выполнения операции. В ответе приходит экземпляр модели, содержащей уравнение с результатами расчёта.
Для выполнения примера уравнение должно рассчитываться методом «Подбор вида зависимости».
{
"Envelope" :
{
"Body" :
{
"GetMs" :
{
"tMs" :
{
"id" : "S21!M!S!C1"
},
"tArg" :
{
"pattern" :
{
"obInst" : "false",
"all" : "false",
"item" :
{
"key" : "3299",
"model" :
{
"transform" :
{
"formulas" :
{
"method" : ""
},
"displayId" : "true",
"equationsFormula" :
{
"method" : ""
},
"kind" : "true" } } }
},
"execParams" :
{
"k" : "0",
"scenarioKeys" : "",
"execMethod" : "true",
"execSummaryStatistics" : "true", "execCoefficients" : "true", "execEvaluateSeries" : "true", "execStatCoefficients" : "true",
"execGenerateName" : "true" } } } } } }
{
"Envelope" :
{
"Body" :
{
"GetMsResult" :
{
"id" :
{
"id" : "S21!M!S!C1"
},
"meta" :
{
"item" :
{
"k" : "3299",
"id" : "OBJ3299",
"n" : "MyOutputVavable[t] = Trend(MyOutputVavable[t])",
"vis" : "1",
"type" : "Model",
"modelMd" :
{
"transform" :
{
"formulas" :
{
"its" :
{
"it" :
[
{
"k" : "0",
"kind" : "CurveEstimation",
"method" :
{
"curveEstimation" :
{
"criterion" : "R2",
"dependenceForm" : "Linear",
"dependenceFormIncluded" :
{
"it" :
[
"Linear", "Polynomial", "Logarithmic" ] }, "polynomOrder" : "4",
"seasonalComponent" :
{
"mode" : "Additive",
"cycle" : "4"
},
"missingData" :
{
"specifiedVector" : "",
"method" : "Casewise",
"methodParameter" : "5",
"specifiedValue" : "0" }, "confidenceLevel" : "0.960000", "bestDependenceForm" : "Polynomial",
"value" : "0",
"explained" :
{
"slice" :
{
"k" : "0",
"id" : "262", "n" : "MyOutputVavable", "vis" : "1", "variableKey" : "3301",
"stubKey" : "2805",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "2818"
}, "variant" : "262" } } }, "aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295", "baseUnit" : "4294967295", "unitsDimensionKey" : "0" }, "level" : "None" },
"lag" : "",
"key" : "0",
"termToText" : "{MyOutputVavable[t]}",
"termToInnerText" : "@_3301:0[]",
"termInfo" :
{
"k" : "4294967295",
"lag" : "0",
"inversion" :
{
"type" : "None", "lag" : "PrecidingValue", "previousLag" : "-1", "seasonality" : "None",
"dependence" : "Linear",
"K" : "3"
}
},
"unitInfo" :
{
"unit" : "4294967295", "measure" : "4294967295", "baseUnit" : "4294967295", "unitsDimensionKey" : "0"
}
},
"dependenceForms" :
{
"its" :
{
"Item" :
[
{
"dependenceForm" : "Linear",
"expression" : "Y = A1*t + A0",
"statCoefficients" :
{
"intercept" :
{
"mode" : "AutoEstimate",
"estimate" : "4.286228", "standardError" : "1.196420", "tStatistic" : "3.582544", "probability" : "0.001986"
},
"coefficients" :
{
"estimate" :
{
"d" : "-0.000263"
},
"standardError" :
{
"d" : "0.076024"
},
"tStatistic" :
{
"d" : "-0.003462"
},
"probability" :
{
"d" : "0.997274"
}
}
},
"criterionValue" : "0.009932",
"summaryStatistics" :
{
"stR2" : "0.009932",
"stAdjR2" : "-0.042177",
"stR2_2" : "0.009932", "stAdjR2_2" : "-0.042177", "stSE" : "1.923269", "stSSR" : "70.280281",
"stLogL" : "-42.481382", "stDW" : "3.335450", "stDWLowerBound" : "0.999952", "stDWUpperBound" : "0.999576", "stSD" : "1.883949", "stAIC" : "4.236322",
"stSC" : "4.335800", "stFstat" : "0.190594", "stProbFstat" : "0.667344", "stME" : "-0.000000",
"stMAE" : "1.416909", "stMSE" : "3.346680", "stMaxAE" : "4.140000", "stSqMSE" : "1.829393", "stVE" : "3.346680", "stSEE" : "1.829393",
"stMD" : "2.346429", "stHQcriterion" : "4.257911", "stAvgLogL" : "NaN", "stMcFaddenRsquared" : "NaN",
"stRestrLogL" : "NaN", "stLRstatistic" : "NaN", "stLRprobability" : "NaN", "stIncludedObservations" : "21.000000", "stJstat" : "NaN", "stProbJstat" : "NaN",
"stNumOfIter" : "-1.000000", "stJBStat" : "0.508805" }, "errors" : ""
},
{
"dependenceForm" : "Polynomial",
"expression" : "Y = An*t^n + ... + A2*t^2 + A1*t + A0",
"statCoefficients" :
{
"intercept" :
{
"mode" : "AutoEstimate",
"estimate" : "3.287202",
"standardError" : "3.450475",
"tStatistic" : "0.952681",
"probability" : "0.352715"
},
"coefficients" :
{
"estimate" :
{
"d" :
[
"0.902808", "-0.185391", "0.013628", "-0.000325" ] },
"standardError" :
{
"d" :
[
"2.156958", "0.385401", "0.026031", "0.000588" ] },
"tStatistic" :
{
"d" :
[
"0.418556", "-0.481033", "0.523529", "-0.552281" ] },
"probability" :
{
"d" :
[
"0.682373", "0.638488", "0.609416", "0.590125" ] }
} }, "criterionValue" : "0.036709", "summaryStatistics" :
{
"stR2" : "0.036709",
"stAdjR2" : "-0.204114",
"stR2_2" : "0.036709",
"stAdjR2_2" : "-0.204114",
"stSE" : "2.067297",
"stSSR" : "68.379500", "stLogL" : "-42.193491", "stDW" : "3.390477", "stDWLowerBound" : "1.000000",
"stDWUpperBound" : "0.996759", "stSD" : "1.883949", "stAIC" : "4.494618", "stSC" : "4.743314", "stFstat" : "0.152430", "stProbFstat" : "0.959145",
"stME" : "0.000000", "stMAE" : "1.366514", "stMSE" : "3.256167", "stMaxAE" : "4.491751",
"stSqMSE" : "1.804485", "stVE" : "3.256167", "stSEE" : "1.804485", "stMD" : "2.346429", "stHQcriterion" : "4.548592", "stAvgLogL" : "NaN",
"stMcFaddenRsquared" : "NaN", "stRestrLogL" : "NaN", "stLRstatistic" : "NaN", "stLRprobability" : "NaN",
"stIncludedObservations" : "21.000000", "stJstat" : "NaN", "stProbJstat" : "NaN", "stNumOfIter" : "-1.000000", "stJBStat" : "0.798490" },
"errors" : ""
},
{
"dependenceForm" : "Logarithmic",
"expression" : "Y = A1*ln(t) + A0",
"statCoefficients" :
{
"intercept" :
{
"mode" : "AutoEstimate",
"estimate" : "4.248370", "standardError" : "1.461041", "tStatistic" : "2.907769", "probability" : "0.009023"
},
"coefficients" :
{
"estimate" :
{
"d" : "0.017126"
},
"standardError" :
{
"d" : "0.580102"
},
"tStatistic" :
{
"d" : "0.029522"
},
"probability" :
{
"d" : "0.976756"
}
}
},
"criterionValue" : "0.009985",
"summaryStatistics" :
{
"stR2" : "0.009985",
"stAdjR2" : "-0.042121",
"stR2_2" : "0.009985", "stAdjR2_2" : "-0.042121", "stSE" : "1.923217", "stSSR" : "70.276505",
"stLogL" : "-42.480818", "stDW" : "3.335515", "stDWLowerBound" : "0.999952", "stDWUpperBound" : "0.999576", "stSD" : "1.883949", "stAIC" : "4.236268",
"stSC" : "4.335747", "stFstat" : "0.191625", "stProbFstat" : "0.666504", "stME" : "-0.000000",
"stMAE" : "1.414749", "stMSE" : "3.346500", "stMaxAE" : "4.135903", "stSqMSE" : "1.829344", "stVE" : "3.346500", "stSEE" : "1.829344",
"stMD" : "2.346429", "stHQcriterion" : "4.257858", "stAvgLogL" : "NaN", "stMcFaddenRsquared" : "NaN",
"stRestrLogL" : "NaN", "stLRstatistic" : "NaN", "stLRprobability" : "NaN", "stIncludedObservations" : "21.000000", "stJstat" : "NaN", "stProbJstat" : "NaN",
"stNumOfIter" : "-1.000000", "stJBStat" : "0.488991" }, "errors" : ""
} ] } } }, "summaryStatistics" :
{
"stR2" : "0.036709",
"stAdjR2" : "-0.204114",
"stR2_2" : "0.036709",
"stAdjR2_2" : "-0.204114", "stSE" : "2.067297", "stSSR" : "68.379500", "stLogL" : "-42.193491", "stDW" : "3.390477", "stDWLowerBound" : "1.000000",
"stDWUpperBound" : "0.996759", "stSD" : "1.883949", "stAIC" : "4.494618", "stSC" : "4.743314",
"stFstat" : "0.152430", "stProbFstat" : "0.959145", "stME" : "0.000000", "stMAE" : "1.366514", "stMSE" : "3.256167", "stMaxAE" : "4.491751",
"stSqMSE" : "1.804485", "stVE" : "3.256167", "stSEE" : "1.804485", "stMD" : "2.346429",
"stHQcriterion" : "4.548592", "stAvgLogL" : "NaN", "stMcFaddenRsquared" : "NaN", "stRestrLogL" : "NaN", "stLRstatistic" : "NaN", "stLRprobability" : "NaN",
"stIncludedObservations" : "21.000000", "stJstat" : "NaN", "stProbJstat" : "NaN", "stNumOfIter" : "-1.000000",
"stJBStat" : "0.798490"
},
"name" : "Y = An*t^n + ... + A2*t^2 + A1*t + A0",
"evaluateSeries" :
{
"its" :
{
"Item" :
{
"scenarioKey" : "4294967295",
"fact" :
{
"d" :
[
"4.000000",
"1.200000",
"3.000000", "2.000000", "3.800000", "1.200000",
"2.800000", "2.000000", "1.100000", "5.400000", "1.000000", "-1.700000",
"7.200000", "-1.000000", "5.000000", "0.200000",
"6.600000", "-0.500000", "3.200000", "2.000000", "3.000000", "NaN",
"NaN" ] }, "modelling" :
{
"d" :
[
"4.017923",
"1.205632",
"3.146325",
"1.153890", "4.667078", "1.303446", "2.895200",
"0.725062", "4.200616", "0.908249", "2.649001", "0.674424", "4.360934",
"1.263753", "3.152750", "1.248311", "4.895684",
"1.618920", "3.156724", "0.698313", "3.557765", "NaN", "NaN"
]
},
"forecast" :
{
"d" : [ "NaN", "NaN", "NaN", "NaN",
"NaN", "NaN", "NaN", "NaN",
"NaN", "NaN", "NaN", "NaN", "NaN", "NaN",
"NaN", "NaN", "NaN", "NaN",
"NaN", "NaN", "NaN", "NaN", "NaN", "-0.772033",
"-0.583547", "-4.718728", "-3.894665", "-10.649639",
"-13.307284", "-20.740719", "-23.698199" ] }, "residuals" :
{
"d" :
[
"-0.017923",
"-0.005632", "-0.146325", "0.846110", "-0.867078", "-0.103446", "-0.095200",
"1.274938", "-3.100616", "4.491751", "-1.649001",
"-2.374424", "2.839066", "-2.263753", "1.847250", "-1.048311", "1.704316",
"-2.118920", "0.043276", "1.301687", "-0.557765",
"NaN",
"NaN"
]
},
"upperConfidenceLevel" :
{
"d" : [ "NaN", "NaN",
"NaN", "NaN", "NaN", "NaN", "NaN", "NaN",
"NaN", "NaN", "NaN", "NaN",
"NaN", "NaN", "NaN", "NaN", "NaN", "NaN",
"NaN", "NaN", "NaN", "NaN",
"NaN", "2.933926", "3.122412", "-1.012769", "-0.188705", "-6.943679",
"-9.601325", "-17.034759", "-19.992240" ]
},
"lowerConfidenceLevel" :
{
"d" :
[
"NaN",
"NaN", "NaN", "NaN", "NaN",
"NaN", "NaN", "NaN", "NaN", "NaN", "NaN",
"NaN", "NaN", "NaN", "NaN",
"NaN", "NaN", "NaN", "NaN", "NaN", "NaN",
"NaN", "NaN", "-4.477992", "-4.289507",
"-8.424688", "-7.600624", "-14.355598", "-17.013243", "-24.446678", "-27.404159"
] }, "dUpperConfidenceLevel" : "", "dLowerConfidenceLevel" : ""
}
},
"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" } },
"calendarLevel" : "Year", "outputSliceKey" : "0" } ] } },
"displayId" : "0", "kind" : "Simple" }, "warnings" : ""
} } } } } } }
Функция GetMsCurveEstimation рассчитывает указанное уравнение. Входные параметры: экземпляр контейнера моделирования; ключ рассчитываемого уравнения. В результате выполнения функция возвращает модель, содержащую рассчитанное уравнение. Результаты расчёта выводятся в окно консоли. Для вывода результатов используются вспомогательные процедуры: PrintStat, PrintCoef, PrintSeries, описанные в разделе «Расчёт уравнения».
Для выполнения примера уравнение должно рассчитываться методом «Подбор вида зависимости».
public static MsItem GetMsCurveEstimation(MsId ms, ulong eqKey)
{
var getMsOp = new GetMs();
// Задаем параметры выполнения операции
getMsOp.tMs = ms;
getMsOp.tArg = new GetMsArg()
{ // Задаем шаблон извлечения данных
pattern = new MsMdPattern()
{
obInst = false,
all = false,
item = new MsItemPattern()
{ // Указываем ключ рассчитываемого уравнения
key = eqKey,
model = new MsModelPattern()
{
transform = new MsFormulaTransformPattern()
{
kind = true,
formulas = new TsFormulaPattern()
{
method = new TsMethodPattern() { }
},
displayId = true,
equationsFormula = new TsFormulaPattern()
{
method = new TsMethodPattern() { }
}
}
}
}
}, // Задаем параметры расчёта уравнения
execParams = new MsMdExecParams()
{
k = 0,
execMethod = true,
execEvaluateSeries = true,
execGenerateName = true,
execSummaryStatistics = true,
execCoefficients = true,
execStatCoefficients = true,
scenarioKeys = new long[] { }
}
};
// Создаем прокси-объект для выполнения операции
var somClient = new SomPortTypeClient();
GetMsResult getMsResult = somClient.GetMs(getMsOp);
MsItem model = getMsResult.meta.item;
// Выводим ошибки и предупреждения
MsModel eq = model.modelMd;
if (eq.warnings.Length != 0)
{
Console.WriteLine("-- Предупреждения --");
Console.WriteLine("".PadRight(3) + printArray(eq.warnings));
}
if (eq.error == null) //Проверяем, возникли ли ошибки при расчёте уравнения
{ // Уравнение рассчитано без ошибок
// Получаем результаты расчёта
TsFormula formula = eq.transform.formulas.its.GetValue(0) as TsFormula;
TsCurveEstimationMethod curve = formula.method.curveEstimation;
// Выводим лучшую форму зависимости
Console.WriteLine("Лучшая форма зависимости: "+curve.bestDependenceForm.Value);
// Выводим данные о формах зависимости
MsDependenceForms depForms = curve.dependenceForms;
foreach (MsDependenceForm form in depForms.its)
{
Console.WriteLine("Исследуемая форма зависимости: "+ form.dependenceForm.ToString());
if (form.errors == "")
{
Console.WriteLine("Значение критерия: ".PadRight(3) + form.criterionValue);
Console.WriteLine("Уравнение: ".PadRight(3) + form.expression);
// Получаем статистические характеристики и выводим в окно консоли
StatSummaryStatistics stat = form.summaryStatistics;
PrintStat(stat);
// Получаем значения коэффициентов и выводим в окно консоли
StatModelCoefficients coef = form.statCoefficients;
PrintCoef(coef);
}
else // Выводим ошибки, возникшие при подборе зависимости
{ Console.WriteLine("".PadRight(3)+form.errors);};
};
// Получаем рассчитанные значения и выводим в окно консоли
MsEvaluateSeriesResult seriesRes = formula.method.evaluateSeries;
printSeries(seriesRes);
}
else // При расчёте уравнения возникли ошибки
{
Console.WriteLine("-- Ошибки --");
Console.WriteLine(eq.error);
}
// Возвращаем модель, содержащую уравнение
return model;
}
См. также:
GetMs: Операция | Настройка параметров метода «Подбор вида зависимости»
SOAP