Оцените устойчивость модели в пространстве состояний Используя прокручивающийся анализ окна

Оцените устойчивость модели Используя прокручивающийся анализ окна

Этот пример показывает, как использовать прокручивающееся окно, чтобы проверять, независимы ли параметры модели timeseries от времени. Этот пример анализирует два временных рядов:

  • Timeseries 1: моделируемые данные из известной, независимой от времени модели

  • Timeseries 2: моделируемые данные из известной, изменяющейся во времени модели

Полностью задайте эту модель AR (1) для Timeseries 1:

yt=0.6yt-1+εt

где εt является Гауссовым со средним значением 0 и отклонением 1. Полностью задайте эту изменяющуюся во времени модель для Timeseries 2:

yt=0.2yt-1+εt;t=1,...,100yt=0.75yt-1+εt;t=101,...,150yt=-0.5yt-1+εt;t=151,...,200,

где εt является Гауссовым со средним значением 0 и отклонением 1.

Mdl1 = arima('AR',0.6,'Constant',0,'Variance',1);

Mdl2 = cell(3,1); % Preallocate
ARMdl2 = [0.2 0.75 -0.5];
for j = 1:3;    
    Mdl2{j} = arima('AR',ARMdl2(j),'Constant',0,'Variance',1);
end

Mdl1 является arima объекты модели. Можно получить доступ к его свойствам с помощью записи через точку. Mdl2 является массивом ячеек объектов модели arima. Вы можете вы индексация ячейки и запись через точку, чтобы получить доступ к свойствам моделей в Mdl2. Например, чтобы получить доступ к значению параметров AR третьей модели в Mdl3, введите Mdl2{3}.AR.

Моделируйте T = 200 периодов данных из Mdl1 и Mdl2. Используйте преддемонстрационный ответ 0 для обоих рядов.

rng(1); % For reproducibility
T = 200;
y1 = simulate(Mdl1,T,'Y0',0);
timeMdl2 = [100 50 50]; % Number of observations per model in Mdl2
y2 = 0;
for k = 1:numel(Mdl2);
    y2 = [y2; simulate(Mdl2{k},timeMdl2(k),'Y0',y2(end))];
end

Y = [y1 y2(2:end)];

Задайте пустые модели AR (1) для оценки Mdl1, Mdl2 и Mdl3. Оцените все три модели с помощью соответствующих наборов данных и прокручивающегося размера окна 40 периодов. Кроме того, используйте прокручивающийся шаг окна одного периода. Сохраните авторегрессивные параметры и оцененное инновационное отклонение.

ToEstMdl = arima('ARLags',1,'Constant',0);

m = 100;       % Rolling window size
N = T - m + 1; % Number of rolling windows

EstParams = cell(2,1);     % Preallocate for estimates
EstParamsMat = zeros(N,2);
EstParamsSE = cell(2,1);
EstParamsSEMat = zeros(N,2);

for j = 1:2;
    for k = 1:N;
        idxRW =  k:(m + k - 1); % In-sample indices
        [EstMdl,EstParamCov] = estimate(ToEstMdl,Y(idxRW,j),'Display','off');
        EstParamsMat(k,:) = [EstMdl.AR{1} EstMdl.Variance];
        EstParamsSEMat(k,:) = sqrt([EstParamCov(2,2) EstParamCov(3,3)]);
    end
    EstParams{j} = EstParamsMat;
    EstParamsSE{j} = EstParamsSEMat;
end

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

titleMdls = {'Mdl1','Mdl2'};

for j = 1:2;
    figure;
    subplot(2,1,1);
    Estimates = EstParams{j};
    SEs = EstParamsSE{j};
    plot(Estimates(:,1),'LineWidth',2);
    hold on;
    plot(Estimates(:,1) + 2*SEs(:,1),'r:','LineWidth',2);
    plot(Estimates(:,1) - 2*SEs(:,1),'r:','LineWidth',2);
    title(sprintf('%s - AR at Lag 1 Estimate',titleMdls{j}));
    xlabel 'Rolling window index';
    axis tight;
    hold off;
    subplot(2,1,2);
    plot(Estimates(:,2),'LineWidth',2);
    hold on;
    plot(Estimates (:,2) + 2*SEs(:,2),'r:','LineWidth',2);
    plot(Estimates(:,2) - 2*SEs(:,2),'r:','LineWidth',2);
    title(sprintf('%s - Variance Estimate',titleMdls{j}));
    xlabel 'Rolling window index';
    axis tight;
    hold off;
end

Для Mdl1 оценка AR не отличается очень от 0,6, и оценки не существенно отличаются друг от друга (попарно). Подобные результаты происходят для отклонения Mdl1. Оценка AR Mdl2 растет, и затем падает, который указывает на временную зависимость. Кроме того, на основе доверительных интервалов существует доказательство, что некоторые оценки отличаются от других. Хотя отклонение не изменилось во время симуляции, кажется, существует heteroscedasticity, возможно вызванный нестабильностью модели.

Оцените устойчивость неявно созданной модели в пространстве состояний

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

Рассмотрите эту модель в пространстве состояний:

xt=ϕxt1+εtytβzt=xt+ut,

где εt и ut являются Гауссовым процессом со средним значением 0 и отклонением 1. Создайте функциональный rwParamMap.m, который задает, как параметры в params сопоставляют с матрицами модели в пространстве состояний, значениями начального состояния и типом состояния, и сохраняют его в вашей рабочей папке.

function [A,B,C,D,Mean0,Cov0,StateType,deflateY] = rwParamMap(params,y,Z)
%rwParamMap Parameter-to-matrix mapping function for rolling window example
%using ssm and specifying an AR(1) state model
%   The state space model specified by rwParamMap contains a stationary
%   AR(1) state, the observation model includes a regression component, and
%   the variances of the innovation and disturbances are 1. The response y
%   is deflated by the regression component specified by the predictor
%   variables x.
A = params(1);
B = 1;
C = 1;
D = 1;
Mean0 = [];
Cov0 = [];
StateType = 0;
deflateY = y - params(2)*Z;
end


Программное обеспечение не поддерживает симуляцию неявных моделей, содержащих компонент регрессии. Поэтому, чтобы моделировать данные из этой модели, необходимо задать все компоненты модели до компонента регрессии. Можно сделать это явным образом, поскольку этот пример использует простую модель в пространстве состояний. В противном случае можно создать другую функцию и задать другую модель в пространстве состояний неявно (например, для изменяющихся во времени моделей в пространстве состояний).

Mdl2Sim = ssm(NaN,1,1,1,'StateType',1);

Mdl2Sim является неявно заданным объектом ssm.

Моделируйте путь с 200 периодами случайных стандартных Гауссовых данных. Затем моделируйте ответы от Mdl2Sim и раздуйте ответы с компонентом регрессии. В данном примере используйте ϕ = 0.6 и β = 2.

rng(1); % For reproducibility
T = 200;
Z = randn(T,1);
phi = 0.6;
beta = 2;
deflateY = simulate(Mdl2Sim,T,'Params',phi);
y = deflateY + Z*beta;

y является расширенным, моделируемым путем к ответу, и Z является моделируемым рядом предиктора.

Если вы задаете модель в пространстве состояний неявно и ответ, и данные о предикторе (т.е. y и Z) существуют в MATLAB® Workspace, то программное обеспечение создает ссылку из функции отображения параметра к матрице те ряды. Если данные не существуют в рабочем пространстве MATLAB, то программное обеспечение создает модель, но необходимо обеспечить данные с помощью соответствующих аргументов пары "имя-значение", когда вы, например, оцениваете модель.

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

m = 100; 
N = T - m + 1;        % Number of rolling windows

EstParams = nan(N,2); % Preallocation
EstParamSE = nan(N,2);

for j = 1:N;
    idxRW = j:(m + j - 1);
    Mdl = ssm(@(c)rwParamMap(c,y(idxRW),Z(idxRW)));
    [~,EstParams(j,:),EstParamCov] = estimate(Mdl,y(idxRW),[0.5 1]',...
        'Display','off');
    EstParamSE(j,:) = sqrt(diag(EstParamCov));
end

Постройте оценки и мудрые точкой доверительные интервалы для параметра AR и коэффициента регрессии.

figure;
subplot(2,1,1);
plot(EstParams(:,1),'LineWidth',2);
hold on;
plot(EstParams(:,1) + 2*EstParamSE(:,1),':r','LineWidth',2);
plot(EstParams(:,1) - 2*EstParamSE(:,1),':r','LineWidth',2);
title 'State AR Estimate at Lag 1';
xlabel 'Rolling window index';
axis tight;
hold off;
subplot(2,1,2);
plot(EstParams(:,2),'LineWidth',2);
hold on;
plot(EstParams(:,2) + 2*EstParamSE(:,2),':r','LineWidth',2);
plot(EstParams(:,2) - 2*EstParamSE(:,2),':r','LineWidth',2);
title 'Regression Coefficient Estimate';
xlabel 'Rolling window index';
axis tight;
hold off;

Графики показывают, что модель стабильна, поскольку оценка AR не отклоняется очень от своего среднего значения, и при этом коэффициент регрессии не оценивает.

Смотрите также

| |

Похожие темы