RandomEffectsMethod: PooledModelRandomEffectsMethodType;
RandomEffectsMethod: Prognoz.Platform.Interop.Stat.PooledModelRandomEffectsMethodType;
Свойство RandomEffectsMethod определяет метод расчета случайных эффектов.
Значение RandomEffectsMethod учитывается, если рассчитывается модель со случайными эффектами, т.е. ISmPooledModel.CrossSection = PooledModelCrossSectionType.RandomEffect.
Добавьте ссылку на системную сборку Stat.
Sub UserProc;
Var
PooledModel: ISmPooledModel;
yY: Array[6, 2] Of Double;
X1x, x2x: Array[7, 2] Of Double;
Coefficients: ICoefficients;
i, j, Status, MPLastPoint, ForecastValue: Integer;
StandardError, Estimate, d1, d2: Array Of Double;
Begin
PooledModel := New SmPooledModel.Create;
// Объясняемые значения
yY[0, 0] := 20; yY[0, 1] := 17;
yY[1, 0] := 7; yY[1, 1] := Double.Nan;
yY[2, 0] := -50; YY[2, 1] := 21;
yY[3, 0] := 20; yY[3, 1] := 17;
yY[4, 0] := 25; yY[4, 1] := 7;
yY[5, 0] := -50; YY[5, 1] := 0.1;
PooledModel.Explained.Value := YY;
// Объясняющие значения
x1x[0, 0] := 4; x1x[0, 1] := -1.5;
x1x[1, 0] := 0.5; x1x[1, 1] := 5;
x1x[2, 0] := -2; x1x[2, 1] := 2.5;
x1x[3, 0] := 130; x1x[3, 1] := 131;
x1x[4, 0] := 141; x1x[4, 1] := Double.Nan;
x1x[5, 0] := 150; x1x[5, 1] := 151;
x1x[6, 0] := 160; x1x[6, 1] := 161;
PooledModel.Explanatories.Add.Value := x1x;
// Веса
x2x[0, 0] := 3; x2x[0, 1] := 0.5;
x2x[1, 0] := 6; x2x[1, 1] := 1;
x2x[2, 0] := 0.75; x2x[2, 1] := 2;
x2x[3, 0] := 230; x2x[3, 1] := 231;
x2x[4, 0] := 240; x2x[4, 1] := 241;
x2x[5, 0] := 250; x2x[5, 1] := 251;
x2x[6, 0] := 260; x2x[6, 1] := 261;
PooledModel.Weights := x2x;
// Период идентификации
PooledModel.ModelPeriod.FirstPoint := 2;
PooledModel.ModelPeriod.LastPoint := 5;
// Последняя точка прогноза
PooledModel.Forecast.LastPoint := 7;
// Тип модели
PooledModel.CrossSection := PooledModelCrossSectionType.RandomEffect;
// Метод для расчета случайных эффектов
PooledModel.RandomEffectsMethod := PooledModelRandomEffectsMethodType.SwamyArora;
// Обработка пропусков
PooledModel.MissingData.Method := MissingDataMethod.SampleAverage;
// Расчет и полученные коэффициенты
Status := PooledModel.Execute;
Debug.WriteLine(PooledModel.Errors);
If Status = 0 Then
Debug.WriteLine("Идиосинкразическое стандартное отклонение:");
Debug.WriteLine(" " + PooledModel.IdiosyncraticSD.ToString);
Debug.WriteLine("Стандартное отклонение групповых ошибок:");
Debug.WriteLine(" " + PooledModel.CrossSectionSD.ToString);
Coefficients := PooledModel.ModelCoefficients.Coefficients;
j := Coefficients.Estimate.Length;
Debug.WriteLine("Значения коэффициентов:");
For i := 0 To j - 1 Do
Estimate := Coefficients.Estimate;
StandardError := Coefficients.StandardError;
Debug.WriteLine(" " + (i + 1).ToString + ": " + Estimate[i].ToString + ", " + StandardError[i].ToString);
End For;
Debug.WriteLine("Модельные ряды");
For i := 0 To PooledModel.Fitted.GetUpperBound(1) Do
d1 := PooledModel.Fitted;
d2 := PooledModel.Fitted;
Debug.WriteLine(" " + d1[i, 0].ToString + " " + d2[i, 1].ToString);
End For;
Debug.WriteLine("Результаты прогнозирования");
MPLastPoint := PooledModel.ModelPeriod.LastPoint;
ForecastValue := PooledModel.Forecast.Value.GetUpperBound(1);
For i := MPLastPoint + 1 To ForecastValue Do
d1 := PooledModel.Forecast.Value;
d2 := PooledModel.Forecast.Value;
Debug.WriteLine(" " + d1[i, 0].ToString + " " + d2[i, 1].ToString);
End For;
Debug.WriteLine("Ряд остатков");
For i := 0 To PooledModel.Residuals.GetUpperBound(1) Do
d1 := PooledModel.Residuals;
d2 := PooledModel.Residuals;
Debug.WriteLine(" " + d1[i,0].ToString + " " + d2[i,1].ToString);
End For;
End If;
End Sub UserProc;
Результат выполнения примера: рассчитана модель регрессии на панельных данных со случайными эффектами, результаты расчета выведены в окно консоли.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
PooledModel: ISmPooledModel;
yY: Array[2, 6] Of Double;
X1x, x2x: Array[2, 7] Of Double;
Coefficients: ICoefficients;
i, j, Status, MPLastPoint, ForecastValue: Integer;
StandardError, Estimate, d1, d2: System.Array;
Begin
PooledModel := New SmPooledModel.Create();
// Объясняемые значения
yY[0, 0] := 20; yY[1, 0] := 17;
yY[0, 1] := 7; yY[1, 1] := Double.Nan;
yY[0, 2] := -50; YY[1, 2] := 21;
yY[0, 3] := 20; yY[1, 3] := 17;
yY[0, 4] := 25; yY[1, 4] := 7;
yY[0, 5] := -50; YY[1, 5] := 0.1;
PooledModel.Explained.Value := YY;
// Объясняющие значения
x1x[0, 0] := 4; x1x[1, 0] := -1.5;
x1x[0, 1] := 0.5; x1x[1, 1] := 5;
x1x[0, 2] := -2; x1x[1, 2] := 2.5;
x1x[0, 3] := 130; x1x[1, 3] := 131;
x1x[0, 4] := 141; x1x[1, 4] := Double.Nan;
x1x[0, 5] := 150; x1x[1, 5] := 151;
x1x[0, 6] := 160; x1x[1, 6] := 161;
PooledModel.Explanatories.Add().Value := x1x;
// Веса
x2x[0, 0] := 3; x2x[1, 0] := 0.5;
x2x[0, 1] := 6; x2x[1, 1] := 1;
x2x[0, 2] := 0.75; x2x[1, 2] := 2;
x2x[0, 3] := 230; x2x[1, 3] := 231;
x2x[0, 4] := 240; x2x[1, 4] := 241;
x2x[0, 5] := 250; x2x[1, 5] := 251;
x2x[0, 6] := 260; x2x[1, 6] := 261;
PooledModel.Weights := x2x;
// Период идентификации
PooledModel.ModelPeriod.FirstPoint := 2;
PooledModel.ModelPeriod.LastPoint := 5;
// Последняя точка прогноза
PooledModel.Forecast.LastPoint := 7;
// Тип модели
PooledModel.CrossSection := PooledModelCrossSectionType.pmcstRandomEffect;
// Метод для расчета случайных эффектов
PooledModel.RandomEffectsMethod := PooledModelRandomEffectsMethodType.pmremSwamyArora;
// Обработка пропусков
PooledModel.MissingData.Method := MissingDataMethod.mdmSampleAverage;
// Расчет и полученные коэффициенты
Status := PooledModel.Execute();
System.Diagnostics.Debug.WriteLine(PooledModel.Errors);
If Status = 0 Then
System.Diagnostics.Debug.WriteLine("Идиосинкразическое стандартное отклонение:");
System.Diagnostics.Debug.WriteLine(" " + PooledModel.IdiosyncraticSD.ToString());
System.Diagnostics.Debug.WriteLine("Стандартное отклонение групповых ошибок:");
System.Diagnostics.Debug.WriteLine(" " + PooledModel.CrossSectionSD.ToString());
Coefficients := PooledModel.ModelCoefficients.Coefficients;
j := Coefficients.Estimate.Length;
System.Diagnostics.Debug.WriteLine("Значения коэффициентов:");
For i := 0 To j - 1 Do
Estimate := Coefficients.Estimate;
StandardError := Coefficients.StandardError;
System.Diagnostics.Debug.WriteLine(" " + (i + 1).ToString() + ": " + Estimate[i].ToString() + ", " + StandardError[i].ToString());
End For;
System.Diagnostics.Debug.WriteLine("Модельные ряды");
For i := 0 To PooledModel.Fitted.GetUpperBound(1) Do
d1 := PooledModel.Fitted;
d2 := PooledModel.Fitted;
System.Diagnostics.Debug.WriteLine(" " + d1[0, i].ToString() + " " + d2[1, i].ToString());
End For;
System.Diagnostics.Debug.WriteLine("Результаты прогнозирования");
MPLastPoint := PooledModel.ModelPeriod.LastPoint;
ForecastValue := PooledModel.Forecast.Value.GetUpperBound(1);
For i := MPLastPoint + 1 To ForecastValue Do
d1 := PooledModel.Forecast.Value;
d2 := PooledModel.Forecast.Value;
System.Diagnostics.Debug.WriteLine(" " + d1[0, i].ToString() + " " + d2[1, i].ToString());
End For;
System.Diagnostics.Debug.WriteLine("Ряд остатков");
For i := 0 To PooledModel.Residuals.GetUpperBound(1) Do
d1 := PooledModel.Residuals;
d2 := PooledModel.Residuals;
System.Diagnostics.Debug.WriteLine(" " + d1[0,i].ToString() + " " + d2[1,i].ToString());
End For;
End If;
End Sub;
См. также: