Я получаю удивительные результаты при использовании функции "оценка" из класса arima в Matlab. Хотя я нашел ресурсы, касающиеся моделей ARIMAX или ARMAX, я не смог найти ничего, что упоминало бы о типах несоответствий, которые я получаю; Я бы ожидал, что arima (1,1,1), подходящая для серии Y, даст те же оценки, что и arima (1,0,1) для первой разности серии (т. Е. Соответствует «diff (Y)» ). Написание уравнений для обеих моделей показывает, что обе эквивалентны при использовании изменения переменной Yarmax = diff (Yarimax).
Однако ниже приведен код теста и результаты. Как видите, у этих несоответствий есть два аспекта: 1. Когда мы начинаем с моделируемых разностных серий (ARMAX), а затем объединяем эти серии для создания серии ARIMAX, есть небольшие различия, которые меня беспокоят (больше для воспроизводимости, чем для оценка, так как различия небольшие). Эти различия могут быть связаны с тем, что серия ARIMAX должна отбросить еще одно наблюдение X, тем не менее, я был бы признателен за предоставление правильных параметров для предоставления функций Matlab для получения тех же результатов. 2. Если начать с интегрированного ряда (ARIMAX) и затем провести его первое дифференцирование для оценки модели ARMAX, оценка ARIMAX будет «повсеместной» с точки зрения его компонентов AR и MA ...
% parameters
cst = 0;
phi1 = 0.4;
theta1 = -0.95;
sigmaE2 = 1;
beta = [3 -2 5];
T = 1000;
X = rand(T, 3)+[0,10,2];
Y0 = 20;
E0 = 0;
% simulate and estimate ARMAX
mdlArmaxUnknown = arima( 1,0,1 );
mdlArmax = arima('AR',phi1,'D',0,'MA',theta1,'Constant',cst,'Beta',beta,'Variance',sigmaE2);
armaxMaxPQ = max( [ mdlArmaxUnknown.P, mdlArmaxUnknown.Q ] ) + 1;
rng(1); Yarmax = mdlArmax.simulate(T,'Y0',0,'X',X,'V0',sigmaE2,'E0',E0);
armaxEst = mdlArmaxUnknown.estimate( Yarmax( armaxMaxPQ:end ), 'Y0', 0, 'X', X, 'display', 'off' );
armaxSummary = armaxEst.summarize();
% take the simulated ARMAX model and compound it, then estimate it as
% an ARIMAX model
mdlArimaxUnknown = arima( 1,1,1 );
arimaxMaxPQ = max( [ mdlArimaxUnknown.P, mdlArimaxUnknown.Q ] ) + 1;
Yarimax = cumsum( [ Y0; Yarmax ] );
arimaxEst = mdlArimaxUnknown.estimate( Yarimax( arimaxMaxPQ:end ), 'Y0', Y0([1;1]), 'X', X, 'display', 'off' );
arimaxSummary = arimaxEst.summarize();
% compare ARMAX and ARIMAX
results = table( armaxSummary.Table.Value, arimaxSummary.Table.Value, 'RowNames', arimaxSummary.Table.Properties.RowNames, 'VariableNames', {'armax','arimax'} );
disp(results);
% Now do the reverse: start with ARIMAX series, differentiate to get
% ARMAX, and compare estimations
mdlArimax = arima('AR',phi1,'D',1,'MA',theta1,'Constant',cst,'Beta',beta,'Variance',sigmaE2);
rng(1); Yarimax = mdlArimax.simulate(T,'Y0',Y0([1;1]),'X',X,'V0',sigmaE2,'E0',E0);
arimaxEst = mdlArmaxUnknown.estimate( Yarimax( arimaxMaxPQ:end ), 'Y0', Y0([1;1]), 'X', X, 'display', 'off' );
arimaxSummary = arimaxEst.summarize();
%ARMAX
Yarmax = diff( Yarimax );
armaxEst = mdlArmaxUnknown.estimate( Yarmax( armaxMaxPQ:end ), 'Y0', 0, 'X', X, 'display', 'off' );
armaxSummary = armaxEst.summarize();
results = table( armaxSummary.Table.Value, arimaxSummary.Table.Value, 'RowNames', arimaxSummary.Table.Properties.RowNames, 'VariableNames', {'armax','arimax'} );
disp(results);
Достойные, но несовершенные результаты для первого теста:
armax arimax
________ ________
Constant -0.21152 0.10106
AR{1} 0.37322 0.35694
MA{1} -0.88944 -0.72669
Beta(1) 3.12 3.1908
Beta(2) -2.0455 -2.0918
Beta(3) 5.1264 5.1049
Variance 1.0618 1.3021
«Дикие» результаты для второго теста:
armax arimax
________ ________
Constant -0.22134 -4.3607
AR{1} 0.36867 0.99999
MA{1} -0.84813 -0.12774
Beta(1) 3.1323 3.2114
Beta(2) -2.0536 -2.0788
Beta(3) 5.1406 5.1568
Variance 1.1138 2.2961
Таким образом, вопрос охватывает оба этих случая: Я ищу для правильного использования параметров и функций Matlab (то есть из набора инструментов "econ"), которые позволяют мне использовать любую серию в первую очередь (разностную или интегрированную) и получать после этого правильные и численно эквивалентные оценки в любом случае. Спасибо!