ISmCurveEstimation.MissingData

Синтаксис Fore

MissingData: IMissingData;

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

MissingData: Prognoz.Platform.Interop.Stat.SIMissingData;

Описание

Свойство MissingData определяет параметры обработки пропусков.

Комментарии

По умолчанию обработка пропусков не выполняется.

Пример Fore

Добавьте ссылку на системную сборку Stat.

Sub UserProc;
Var
    trend: SmCurveEstimation;
    ar: Array[25Of Double;
    d0: Double;
    MData: IMissingData;
    status, i, s: Integer;
    Forms: IDependenceForms;
    Poly: IDependenceForm;
    Forecast: IForecast;
    Period: IStatPeriod;
Begin
    // Создаем объект для расчета метода
    trend := New SmCurveEstimation.Create;
    // Задаем значения объясняемого ряда
    ar[00] := 4110; ar[01] := 4280; ar[02] := 4459; ar[03] := 4545; ar[04] := 4664;
    ar[05] := 4861; ar[06] := 5195; ar[07] := 4664; ar[08] := 9054; ar[09] := Double.Nan;
    ar[10] := 5948; ar[11] := Double.Nan; ar[12] := 6521; ar[13] := 6788; ar[14] := 7222;
    ar[15] := 7486; ar[16] := 7832; ar[17] := 8153; ar[18] := 8468; ar[19] := Double.Nan;
    ar[20] := 9499; ar[21] := 9866; ar[22] := 10217; ar[23] := 10763; ar[24] := 10683;
    trend.Explained.Value := ar;
    // Задаем параметры объясняющего ряда
    trend.Explanatory.IsTrend := True;
    // Задаем период идентификации
    Period := trend.ModelPeriod;
    Period.FirstPoint := 10;
    Period.LastPoint := 20;
    // Задаем границы периода прогнозирования
    trend.ForecastFirstPoint := 20;
    trend.ForecastLastPoint := 30;
    // Определяем значимость доверительных границ прогнозного ряда
    trend.ForecastConfidenceLevel := 0.85;
    // Определяем тип критерия отбора лучшей формы зависимости
    trend.Criterion := DependenceCriterion.R2Adj;
    // Задаем параметры сезонной составляющей
    trend.SeasonalComponent.Mode := SeasonalityType.Additive;
    trend.SeasonalComponent.Cycle := 4;
    // Задаем степень полинома для полиномиальной формы зависимости
    trend.PolynomOrder := 4;
    // Задаем параметры метода обработки пропусков
    MData := trend.MissingData;
    MData.Method := MissingDataMethod.SampleAverage;

    // Выполняем расчет
    status := trend.Execute;
    If status <> 0 Then
        // Если расчет завершился с ошибками, то выводим их в окно консоли
        Debug.WriteLine(trend.Errors);
        Else
            // Если расчет завершился удачно, то выводим в окно консоли значения
            Debug.WriteLine("== Модельный ряд == ");
            Debug.Indent;
            For i := 0 To trend.Explained.Value.Length - 1 Do
                Debug.WriteLine(trend.Explained.Value[i]);
            End For;
            Debug.Unindent;
            Debug.WriteLine("== Исходный ряд ==");
            Debug.Indent;
            For i := 0 To trend.Explained.Value.Length - 1 Do
                Debug.WriteLine(trend.Explained.OriginalValue[i]);
            End For;
            Debug.Unindent;
            Forms := trend.DependenceForms;
            Debug.WriteLine("== Значения критерия ==");
            For i := 0 To Forms.Count - 3 Do
                s := trend.SortedModelList[i];
                d0 := Forms.Item(s).CriterionValue;
                Debug.WriteLine(Forms.Item(s).DisplayName + ": " + d0.ToString);
            End For;
            Debug.WriteLine("== Лучшая зависимость ==");
            Debug.WriteLine(trend.BestDependenceForm);
            Poly := Forms.Item(2);
            Forecast := Poly.Forecast;
            Debug.WriteLine("Зависимость " + Poly.DisplayName + " значение критерия " + Poly.CriterionValue.ToString);
            Debug.WriteLine("== Прогнозный ряд ==");
            Debug.Indent;
            For i := trend.ForecastFirstPoint To Forecast.Value.Length - 1 Do
                Debug.WriteLine(Forecast.Value[i]);
            End For;
            Debug.Unindent;
            Debug.WriteLine("== Сезонная составляющая ==");
            Debug.Indent;
            For i := Period.FirstPoint To trend.SeasonalAdjustment.Length - 1 Do
                d0 := trend.SeasonalAdjustment[i];
                Debug.WriteLine(d0.ToString);
            End For;
            Debug.Unindent;
    End If;
End Sub UserProc;

После выполнения примера в окно консоли будет выведены модельный и исходный ряды, значения критерия для зависимостей, номер лучшей зависимости, прогнозный ряд, рассчитанный в помощью полиномиальной зависимости, значения сезонной составляющей.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Stat;

Public Shared Sub UserProc();
Var
    trend: SmCurveEstimation;
    ar: Array[
25Of Double;
    d0: Double;
    MData: IMissingData;
    status, i, s: Integer;
    Forms: IDependenceForms;
    Poly: IDependenceForm;
    Forecast: IForecast;
    Period: IStatPeriod;
Begin
    
// Создаем объект для расчета метода
    trend := New SmCurveEstimation.Create();
    
// Задаем значения объясняемого ряда
    ar[00] := 4110; ar[01] := 4280; ar[02] := 4459; ar[03] := 4545; ar[04] := 4664;
    ar[
05] := 4861; ar[06] := 5195; ar[07] := 4664; ar[08] := 9054; ar[09] := Double.Nan;
    ar[
10] := 5948; ar[11] := Double.Nan; ar[12] := 6521; ar[13] := 6788; ar[14] := 7222;
    ar[
15] := 7486; ar[16] := 7832; ar[17] := 8153; ar[18] := 8468; ar[19] := Double.Nan;
    ar[
20] := 9499; ar[21] := 9866; ar[22] := 10217; ar[23] := 10763; ar[24] := 10683;
    trend.Explained.Value := ar;
    
// Задаем параметры объясняющего ряда
    trend.Explanatory.IsTrend := True;
    
// Задаем период идентификации
    Period := trend.ModelPeriod;
    Period.FirstPoint := 
10;
    Period.LastPoint := 
20;
    
// Задаем границы периода прогнозирования
    trend.ForecastFirstPoint := 20;
    trend.ForecastLastPoint := 
30;
    
// Определяем значимость доверительных границ прогнозного ряда
    trend.ForecastConfidenceLevel := 0.85;
    
// Определяем тип критерия отбора лучшей формы зависимости
    trend.Criterion := DependenceCriterion.dctR2Adj;
    
// Задаем параметры сезонной составляющей
    trend.SeasonalComponent.Mode := SeasonalityType.sstAdditive;
    trend.SeasonalComponent.Cycle := 
4;
    
// Задаем степень полинома для полиномиальной формы зависимости
    trend.PolynomOrder := 4;
    
// Задаем параметры метода обработки пропусков
    MData := trend.MissingData;
    MData.Method := MissingDataMethod.mdmSampleAverage;
    
// Выполняем расчет
    status := trend.Execute();
    
If status <> 0 Then
        
// Если расчет завершился с ошибками, то выводим их в окно консоли
        System.Diagnostics.Debug.WriteLine(trend.Errors);
        
Else
            
// Если расчет завершился удачно, то выводим в окно консоли значения
            System.Diagnostics.Debug.WriteLine("== Модельный ряд == ");
            System.Diagnostics.Debug.Indent();
            
For i := 0 To trend.Explained.Value.Length - 1 Do
                System.Diagnostics.Debug.WriteLine(trend.Explained.Value.GetValue(i));
            
End For;
            System.Diagnostics.Debug.Unindent();
            System.Diagnostics.Debug.WriteLine(
"== Исходный ряд ==");
            System.Diagnostics.Debug.Indent();
            
For i := 0 To trend.Explained.Value.Length - 1 Do
                System.Diagnostics.Debug.WriteLine(trend.Explained.OriginalValue.GetValue(i));
            
End For;
            System.Diagnostics.Debug.Unindent();
            Forms := trend.DependenceForms;
            System.Diagnostics.Debug.WriteLine(
"== Значения критерия ==");
            
For i := 0 To Forms.Count - 3 Do
                s := trend.SortedModelList.GetValue(i) 
As integer;
                d0 := Forms.Item[s].CriterionValue;
                System.Diagnostics.Debug.WriteLine(Forms.Item[s].DisplayName + 
": " + d0.ToString());
            
End For;
            System.Diagnostics.Debug.WriteLine(
"== Лучшая зависимость ==");
            System.Diagnostics.Debug.WriteLine(trend.BestDependenceForm);
            Poly := Forms.Item[
2];
            Forecast := Poly.Forecast;
            System.Diagnostics.Debug.WriteLine(
"Зависимость " + Poly.DisplayName + " значение критерия " + Poly.CriterionValue.ToString());
            System.Diagnostics.Debug.WriteLine(
"== Прогнозный ряд ==");
            System.Diagnostics.Debug.Indent();
            
For i := trend.ForecastFirstPoint To Forecast.Value.Length - 1 Do
                System.Diagnostics.Debug.WriteLine(Forecast.Value.GetValue(i));
            
End For;
            System.Diagnostics.Debug.Unindent();
            System.Diagnostics.Debug.WriteLine(
"== Сезонная составляющая ==");
            System.Diagnostics.Debug.Indent();
            
For i := Period.FirstPoint To trend.SeasonalAdjustment.Length - 1 Do
                d0 := trend.SeasonalAdjustment.GetValue(i) 
As double;
                System.Diagnostics.Debug.WriteLine(d0.ToString());
            
End For;
            System.Diagnostics.Debug.Indent();
    
End If;
End Sub UserProc;

См. также:

ISmCurveEstimation