Fitted: Array;
Fitted: System.Array;
Свойство Fitted возвращает сглаженный ряд.
Необходимо использовать массив значений типа Double.
Sub UserProc;
Var
Lm: SmSerialCorrelationLMTest;
d0: Double;
res: Integer;
y, y0, y1, y2: Array[9] Of Double;
Sub Print(Data: Array Of Double);
Var
i: Integer;
CI: ICultureInfo;
Begin
CI := CultureInfo.Current;
Debug.WriteLine("---Begin---");
For i := 0 To Data.Length - 1 Do
If Double.IsNan(Data[i]) Then
Debug.WriteLine("---empty---");
Else
Debug.WriteLine(i.ToString + ", " + CI.FormatDoublePrec(Data[i], 4));
End If;
End For;
Debug.WriteLine("---End---");
End Sub Print;
Begin
Lm := New SmSerialCorrelationLMTest.Create;
//значения y, y0, y1, y2
y[0] := 6209; y0[0] := 4110; y1[0] := 3415; y2[0] := 2822;
y[1] := Double.NaN; y0[1] := 4280; y1[1] := 3673; y2[1] := 3023;
y[2] := 6752; y0[2] := 4459; y1[2] := 4013; y2[2] := 3131;
y[3] := 6837; y0[3] := 4545; y1[3] := 4278; y2[3] := 3351;
y[4] := 6495; y0[4] := 4664; y1[4] := 4577; y2[4] := 3463;
y[5] := 6907; y0[5] := 4861; y1[5] := 5135; y2[5] := 3686;
y[6] := 7349; y0[6] := 5195; y1[6] := 5388; y2[6] := 3815;
y[7] := 7213; y0[7] := 5389; y1[7] := 5610; y2[7] := 3960;
y[8] := 7061; y0[8] := 5463; y1[8] := 5787; y2[8] := 4119;
Lm.Explained.Value := y;
Lm.Explanatories.Add.Value := y0;
Lm.Explanatories.Add.Value := y1;
Lm.Explanatories.Add.Value := y2;
Lm.ModelPeriod.FirstPoint := 1;
Lm.ModelPeriod.LastPoint := 9;
Lm.MissingData.Method := MissingDataMethod.SampleAverage;
Lm.ModelCoefficients.Intercept.Mode := InterceptMode.AutoEstimate;
Lm.LMOrder := 1;
res := Lm.Execute;
If res <> 0 Then
Debug.WriteLine(Lm.Errors);
Else
Debug.WriteLine("=== Тест Фишера ===");
d0 := Lm.FTest.Statistic;
Debug.WriteLine("значение: " + d0.ToString);
d0 := Lm.FTest.Probability;
Debug.WriteLine("вероятность: " + d0.ToString);
Debug.WriteLine("== Сглаженный ряд ==");
Print(Lm.Fitted);
Debug.WriteLine("== Остатки ==");
Print(Lm.Residuals);
End If;
End Sub UserProc;
После выполнения примера в окно консоли будут выведены результаты расчетов теста:
=== Тест Фишера ===
значение: 0.0476108114852778
вероятность: 0.837953928924362
== Сглаженный ряд ==
---Begin---
0, -3,4331
1, 24,3764
2, 1,1074
3, -10,4311
4, -32,9453
5, 18,3692
6, 2,5495
7, -15,4944
8, 15,9014
---End---
== Остатки ==
---Begin---
0, -178,2241
1, -41,5299
2, 122,0825
3, 296,6298
4, -165,7343
5, -30,3337
6, 179,8633
7, -28,7922
8, -153,9614
---End---
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
Lm: SmSerialCorrelationLMTest;
Explanatories: ISlSerie;
d0: double;
res, i: integer;
y, y0, y1, y2: Array[9] Of double;
v: Array;
Begin
Lm := New SmSerialCorrelationLMTest.Create();
// значения y, y0, y1, y2
y[0] := 6209; y0[0] := 4110; y1[0] := 3415; y2[0] := 2822;
y[1] := double.NaN; y0[1] := 4280; y1[1] := 3673; y2[1] := 3023;
y[2] := 6752; y0[2] := 4459; y1[2] := 4013; y2[2] := 3131;
y[3] := 6837; y0[3] := 4545; y1[3] := 4278; y2[3] := 3351;
y[4] := 6495; y0[4] := 4664; y1[4] := 4577; y2[4] := 3463;
y[5] := 6907; y0[5] := 4861; y1[5] := 5135; y2[5] := 3686;
y[6] := 7349; y0[6] := 5195; y1[6] := 5388; y2[6] := 3815;
y[7] := 7213; y0[7] := 5389; y1[7] := 5610; y2[7] := 3960;
y[8] := 7061; y0[8] := 5463; y1[8] := 5787; y2[8] := 4119;
Lm.Explained.Value := y;
Explanatories := Lm.Explanatories.Add();
Explanatories.Value := y0;
Explanatories.Value := y1;
Explanatories.Value := y2;
Lm.ModelPeriod.FirstPoint := 1;
Lm.ModelPeriod.LastPoint := 9;
Lm.MissingData.Method := MissingDataMethod.mdmSampleAverage;
Lm.ModelCoefficients.Intercept.Mode := InterceptMode.imAutoEstimate;
Lm.LMOrder := 1;
res := Lm.Execute();
If res <> 0 Then
System.Diagnostics.Debug.WriteLine(Lm.Errors);
Else
System.Diagnostics.Debug.WriteLine("=== Тест Фишера ===");
d0 := Lm.FTest.Statistic;
System.Diagnostics.Debug.WriteLine("значение: " + d0.ToString());
d0 := Lm.FTest.Probability;
System.Diagnostics.Debug.WriteLine("вероятность: " + d0.ToString());
System.Diagnostics.Debug.WriteLine("== Сглаженный ряд ==");
v := Lm.Fitted;
Print(v);
System.Diagnostics.Debug.WriteLine("== Остатки ==");
v := Lm.Residuals;
Print(v);
End If;
End Sub;
// процедура вывода данных
Public Shared Sub Print(Data: Array);
Var
i: Integer;
Begin
System.Diagnostics.Debug.WriteLine("---Begin---");
For i := 0 To Data.Length - 1 Do
If Double.IsNan(Data[i] As Double) Then
System.Diagnostics.Debug.WriteLine("---empty---");
Else
System.Diagnostics.Debug.WriteLine(i.ToString() + " " + Data[i]);
End If;
End For;
System.Diagnostics.Debug.WriteLine("---End---");
End Sub Print;
См. также: