Ниже приведен пример использования операции SetMs для изменения параметров уравнения. В запросе передаются: экземпляр открытого контейнера моделирования, параметры выполнения операции, настройки уравнения для метода «Линейная регрессия» и шаблон получения измененных данных. В результате выполнения операция возвращает модель, содержащую измененное уравнение.
Для выполнения примера уравнение должно содержать две входные и одну выходную переменные.
{
"Envelope" :
{
"Body" :
{
"SetMs" :
{
"tMs" :
{
"id" : "S71!M!S!C1"
},
"tArg" :
{
"pattern" :
{
"obInst" : "true",
"item" :
{
"key" : "3653",
"model" :
{
"transform" :
{
"formulas" : ""
}
}
}
},
"meta" :
{
"item" :
{
"k" : "3653",
"type" : "Model",
"modelMd" :
{
"transform" :
{
"formulas" :
{
"its" :
{
"it" :
[
{
"k" : "0",
"kind" : "LinearRegression",
"method" :
{
"linearRegression" :
{
"constantMode" : "ManualEstimate",
"constantValue" : "0.5",
"autoSelection" :
{
"isActive" : "true",
"criterion" : "R2",
"min" : "2",
"max" : "3"
},
"confidenceLevel" : "0.85",
"ARMA" :
{
"orderAR" :
{
"l" : "1"
}
},
"missingData" : "",
"explained" :
{
"slice" :
{
"k" : "0",
"id" : "301",
"n" : "OutputVarable",
"vis" : "true",
"variableKey" : "3655",
"stubKey" : "3394",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "3407"
},
"variant" : "301"
}
}
},
"aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
},
"level" : "None"
}
},
"explanatories" :
{
"its" :
{
"Item" :
[
{
"k" : "0",
"expression" : "@_3654:0[]",
"operands" :
{
"its" :
{
"Item" :
{
"k" : "0",
"slice" :
{
"k" : "0",
"id" : "299",
"n" : "InputVarable_1",
"vis" : "true",
"variableKey" : "3654",
"stubKey" : "3394",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "3407"
},
"variant" : "299"
}
}
},
"aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
},
"level" : "None"
}
}
}
},
"included" : "true"
},
{
"k" : "1",
"expression" : "@_3654:0[] * 8",
"operands" :
{
"its" :
{
"Item" :
{
"k" : "0",
"slice" :
{
"k" : "0",
"id" : "299",
"n" : "InputVarable_1",
"vis" : "true",
"variableKey" : "3654",
"stubKey" : "3394",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "3407"
},
"variant" : "299"
}
}
},
"aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
},
"level" : "None"
}
}
}
},
"expressionText" : "",
"aggregationAttrKey" : "0",
"inversedExpressionText" : "",
"missingData" :
{
"method" : "Casewise"
},
"applyMissingData" : "true",
"customOptions" :
{
"isPDLTerm" : "true",
"lagLengthK" : "1",
"polinomialDegreeP" : "1",
"pdlConstraint" : "None"
},
"inversion" :
{
"type" : "TS",
"dependence" : "Linear"
},
"included" : "true",
"lag" : "1"
}
]
}
} } } } ] } } } } }
},
"metaGet" :
{
"obInst" : "true",
"scenarios" : "Get",
"item" :
{
"key" : "3392",
"problem" :
{
"metamodel" :
{
"calculationChain" : "Get",
"calcChainPattern" :
{
"modelPattern" :
{
"transform" :
{
"formulaCount" : "true",
"formulas" :
{
"method" : ""
},
"equationsFormula" :
{
"method" : ""
},
"kind" : "true"
}
}
},
"visualControllerPattern" :
{
"variableRubricatorKey" : "true",
"chainWorkbookKey" : "true",
"freeVariables" : "true"
}
}
}
}
},
"execParams" :
{
"execSaveModel" : "true"
}
}
}
}
}
}
{
"Envelope" :
{
"Body" :
{
"SetMsResult" :
{
"id" :
{
"id" : "S71!M!S!C1"
},
"meta" :
{
"obInst" :
{
"obDesc" :
{
"@isShortcut" : "0",
"i" : "MODELSPACE",
"n" : "Контейнер моделирования",
"k" : "1581",
"c" : "5121",
"p" : "1580",
"h" : "0"
}
},
"dirty" : "0",
"scenarios" :
{
"nodes" :
{
"it" :
{
"@isFolder" : "0",
"k" : "1628",
"id" : "OBJ1628",
"n" : "Базов${1}${2}${3}${f1}${1}-6${3}
${f5}${last}й",
"vis" : "1",
"scenDesc" :
{
"@isShortcut" : "0",
"i" : "OBJ1628",
"n" : "Базов${1}${2}${3}${f1}${1}-6${3}
${f5}${last}й",
"k" : "1628",
"c" : "5124",
"p" : "1627",
"h" : "0"
}
}
}
},
"item" :
{
"k" : "3392",
"id" : "LINEARR_MODEL",
"n" : "LinearR",
"vis" : "1",
"type" : "Problem",
"problemMd" :
{
"metamodel" :
{
"k" : "3393",
"calculationChain" :
{
"its" :
{
"Item" :
{
"k" : "3653",
"id" : "OBJ3653",
"n" : "OutputVarable[t] = A0 + A1*InputVarable_1[t] + PDL(SA(InputVarable_1[t+1] * 8, Multiplicative), 1, 1) + [AR(1)=A2]",
"vis" : "1",
"type" : "Model",
"excluded" : "0",
"model" :
{
"transform" :
{
"formulaCount" : "1",
"formulas" :
{
"its" :
{
"it" :
[
{
"k" : "0",
"kind" : "LinearRegression",
"method" :
{
"linearRegression" :
{
"constantMode" : "ManualEstimate",
"constantValue" : "0.500000",
"confidenceLevel" : "0.850000",
"ARMA" :
{
"orderAR" :
{
"l" : "1" }, "orderMA" : "", "calcInitMode" : "Auto", "initAR" : "", "initMA" : "", "initIntercept" : "0", "estimationMethod" : "LevenbergMarquardt", "tolerance" : "0.000100", "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"
}
},
"inversionInfo" :
{
"type" : "None",
"lag" : "PrecidingValue", "previousLag" : "-1", "seasonality" : "None", "dependence" : "Linear", "K" : "3" } }, "calendarLevel" : "Year", "outputSliceKey" : "0" }
] } }, "kind" : "Simple" } } } } }, "visualController" :
{
"variableRubricatorKey" : "3394",
"chainWorkbookKey" : "3426",
"freeVariables" :
{
"its" :
{
"Item" :
{
"k" : "0",
"id" : "300",
"n" : "InputVarable_2",
"vis" : "1",
"variableKey" : "3431",
"stubKey" : "3394",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "3407"
},
"variant" : "300"
}
}
},
"aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
},
"level" : "None"
}
} } } } } } } } } } }
Функция SetMsLinearRegr изменяет метод расчёта уравнения. Входные параметры:
ms. Экземпляр открытого контейнера моделирования;
modelKey. Ключ модели, содержащей уравнение;
eq. Экземпляр открытого уравнения. Для выполнения примера уравнение должно содержать две входные и одну выходную переменные;
eqKey. Ключ уравнения.
В результате выполнения функция возвращает модель, содержащую уравнение.
Для создания шаблона извлечения изменённых данных используется функция createMetaGetPattern, описанная в разделе «Настройка параметров метода «Подбор вида зависимости»».
public static MsItem SetMsLinearRegr(MsId ms, ulong modelKey, MsModel eq, ulong eqKey)
{ // Получаем входные и выходную переменные
MsFormulaTransformVariable inp_1 = eq.transform.inputs.its.GetValue(0) as MsFormulaTransformVariable;
MsFormulaTransformVariable inp_2 = eq.transform.inputs.its.GetValue(0) as MsFormulaTransformVariable;
MsFormulaTransformVariable outp = eq.transform.outputs.its.GetValue(0) as MsFormulaTransformVariable;
// Задаем параметры выполнения операции var setMsOp = new SetMs(); setMsOp.tMs = ms; setMsOp.tArg = new SetMsArg()
{ // Задаем шаблон изменения данных
pattern = new MsMdPattern()
{
item = new MsItemPattern()
{ // Указываем ключ уравнения
key = eqKey,
model = new MsModelPattern()
{
transform = new MsFormulaTransformPattern() { formulas = new TsFormulaPattern() { } }
}
}
}, // Задаем данные, которые необходимо изменить
meta = new MsMd()
{
item = new MsItem()
{ // Указываем ключ уравнения
k = eqKey,
type = MsItemType.Model,
modelMd = new MsModel()
{
transform = new MsFormulaTransform()
{
formulas = new TsFormulas()
{
its = new TsFormula[]
{
new TsFormula()
{
kind = TsFormulaKind.LinearRegression,
method = new TsMethod()
{ // Задаём параметры расчёта метода
linearRegression = new TsLinearRegressionMethod()
{
constantMode = StatInterceptMode.ManualEstimate,
constantValue = 0.5,
confidenceLevel = 0.85,
ARMA = new SlARMA(){orderAR = new long[] {1}},
missingData = new StatMissingData(){},
// Задаём объясняемую переменную
explained = new MsFormulaTerm()
{slice = outp.slices.its.GetValue(0) as MsFormulaTransformSlice},
// Задаём объясняющие факторы
explanatories = new MsCompositeFormulaTerms()
{
simpleTerm = null,
termInfo = null,
its = new MsCompositeFormulaTerm[]
{ // Задаём первый объясняющий фактор
new MsCompositeFormulaTerm()
{
k = 0,
operands = new MsFormulaTerms()
{
its = new MsFormulaTerm[]
{
new MsFormulaTerm()
{
k = 0,
slice = inp_1.slices.its.GetValue(0) as MsFormulaTransformSlice
}
} }, expression ="@_" + inp_1.k + ":0[]", included = true }, // Задаём второй объясняющий фактор new MsCompositeFormulaTerm()
{
k = 1,
operands = new MsFormulaTerms()
{
its = new MsFormulaTerm[]
{
new MsFormulaTerm()
{
k = 0,
slice = inp_2.slices.its.GetValue(0) as MsFormulaTransformSlice
} } }, expressionText = "",
inversedExpressionText = "",
expression ="@_" + inp_2.k + ":0[] * 8",
aggregationAttrKey = 0,
missingData = new StatMissingData(){method = StatMissingDataMethod.Casewise},
applyMissingData = true,
unitInfo = null,
included = true,
lag = 1,
inversion = new TsInversion()
{
type = TsInversionType.TS,
dependence = StatDependenceType.Linear
}, // Указываем, что 2-й фактор является лаговой переменной
customOptions = new MsTermOptions()
{
isPDLTerm = true,
pdlConstraint = PDLConstraintKind.None, lagLengthK = 1, polinomialDegreeP = 1 }
}
}
}, // Задаём параметры автоподбора факторов
autoSelection = new LinearRegressionAutoSelection()
{
criterion = StatCriterionType.R2,
isActive = true, min = 2, max = 3 }
} } } } } }
} } }, // Задаём шаблон извлечения измененных данных metaGet = createMetaGetPattern(modelKey),
execParams = new MsMdExecParams() { execSaveModel = true }
}; // Создаем прокси-объект для выполнения операции
var somClient = new SomPortTypeClient();
// Задаем параметры выполнения операции
var result = somClient.SetMs(setMsOp);
return result.meta.item;
}
См. также:
Работа с контейнером моделирования | Метод «Линейная регрессия»
SOAP