Симулируйте стационарные процессы

Симулируйте процесс AR

В этом примере показано, как симулировать демонстрационные пути от стационарного AR (2) процесс, не задавая преддемонстрационные наблюдения.

Создайте модель

Задайте модель AR (2)

yt=0.5+0.7yt-1+0.25yt-2+εt,

где инновационный процесс является Гауссовым с отклонением 0.1.

Mdl = arima('Constant',0.5,'AR',{0.7 0.25},'Variance',.1);

Сгенерируйте один демонстрационный путь

Сгенерируйте один демонстрационный путь (с 50 наблюдениями) из заданной модели и графика.

rng(5)
Y = simulate(Mdl,50);

figure
plot(Y)
xlim([0,50])
title('Simulated AR(2) Process')

Поскольку преддемонстрационные данные не были заданы, simulate устанавливает два необходимых преддемонстрационных наблюдения, равные безусловному среднему значению процесса

μ=c(1-ϕ1-ϕ2).

Безусловное отклонение процесса

σ2=(1-ϕ2)(1+ϕ2)σε2(1-ϕ2)2-ϕ12.

Вычислите безусловное среднее значение и отклонение процесса.

c = Mdl.Constant;
phi = Mdl.AR;
sigmaEps2 = Mdl.Variance;
mu = c/(1-phi{1}-phi{2})
mu = 10.0000
sigma2 = (1-phi{2})/(1+phi{2})*sigmaEps2/((1-phi{2})^2 - phi{1}^2)
sigma2 = 0.8276

Сгенерируйте много демонстрационных путей

Сгенерируйте 1 000 демонстрационных путей, каждого с 50 наблюдениями.

Y = simulate(Mdl,50,'NumPaths',1000);

figure
subplot(2,1,1)
plot(Y,'Color',[.85,.85,.85])
title('Simulated AR(2) Process')
hold on
h = plot(mean(Y,2),'k','LineWidth',2);
legend(h,'Simulation Mean','Location','NorthWest')
hold off
subplot(2,1,2)
plot(var(Y,0,2),'r','LineWidth',2)
title('Process Variance')
hold on
plot(1:50,sigma2*ones(50,1),'k--','LineWidth',1.5)
legend('Simulation','Theoretical',...
       'Location','SouthEast')
hold off

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

Вокруг наблюдения 50, симулированное отклонение приближается к теоретическому отклонению.

Сверхдискретизируйте, чтобы уменьшать переходные эффекты

Чтобы уменьшать переходные эффекты, одна опция должна сверхдискретизировать процесс. Например, чтобы произвести 50 наблюдений, можно сгенерировать пути больше чем с 50 наблюдениями и отбросить все кроме последних 50 наблюдений как выжигание дефектов. Здесь, симулируйте пути длины 150 и отбросьте первые 100 наблюдений.

Y = simulate(Mdl,150,'NumPaths',1000);
Y = Y(101:end,:);

figure
subplot(2,1,1)
plot(Y,'Color',[.85,.85,.85])
title('Simulated AR(2) Process')
hold on
h = plot(mean(Y,2),'k','LineWidth',2);
legend(h,'Simulation Mean','Location','NorthWest')
hold off
subplot(2,1,2)
plot(var(Y,0,2),'r','LineWidth',2)
xlim([0,50])
title('Process Variance')
hold on
plot(1:50,sigma2*ones(50,1),'k--','LineWidth',1.5)
legend('Simulation','Theoretical',...
       'Location','SouthEast')
hold off

Реализация теперь похожа, чертит от стационарного стохастического процесса. Отклонение симуляции колеблется (из-за ошибки Монте-Карло) вокруг теоретического отклонения.

Симулируйте процесс MA

В этом примере показано, как симулировать демонстрационные пути от стационарного MA (12) процесс, не задавая преддемонстрационные наблюдения.

Создайте модель

Задайте модель MA (12)

yt=0.5+εt+0.8εt-1+0.2εt-12,

где инновационное распределение является Гауссовым с отклонением 0.2.

Mdl = arima('Constant',0.5,'MA',{0.8,0.2},...
    'MALags',[1,12],'Variance',0.2);

Сгенерируйте демонстрационные пути

Сгенерируйте 200 демонстрационных путей, каждого с 60 наблюдениями.

rng(5)
Y = simulate(Mdl,60,'NumPaths',200);

figure
plot(Y,'Color',[.85,.85,.85])
hold on
h = plot(mean(Y,2),'k','LineWidth',2);
legend(h,'Simulation Mean','Location','NorthWest')
title('MA(12) Process')
hold off

Для процесса MA постоянный термин является безусловным средним значением. Среднее значение симуляции приблизительно c = 0.5.

Постройте отклонение симуляции

Безусловное отклонение процесса

σ2=(1+θ12+θ122)σε2.

Вычислите безусловное отклонение.

theta = cell2mat(Mdl.MA);
sigmaEps2 = Mdl.Variance;
sigma2 = (1+sum(theta.^2))*sigmaEps2
sigma2 = 0.3360

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

figure
plot(var(Y,0,2),'Color',[.75,.75,.75],'LineWidth',1.5)
xlim([0,60])
title('Unconditional Variance')
hold on
plot(1:60,sigma2*ones(60,1),'k--','LineWidth',2)
legend('Simulation','Theoretical',...
       'Location','SouthEast')
hold off

Кажется, существует короткая электротермотренировка в начале симуляции. В это время отклонение симуляции ниже, чем ожидалось. Впоследствии, отклонение симуляции колеблется вокруг теоретического отклонения.

Сгенерируйте много демонстрационных путей

Симулируйте 10 000 путей из модели, каждого с длиной 1000. Постройте отклонение симуляции.

YM = simulate(Mdl,1000,'NumPaths',10000);
figure
plot(var(YM,0,2),'Color',[.75,.75,.75],'LineWidth',1.5)
ylim([0.3,0.36])
title('Unconditional Variance')
hold on
plot(1:1000,sigma2*ones(1000,1),'k--','LineWidth',2)
legend('Simulation','Theoretical',...
       'Location','SouthEast')
hold off

Ошибка Монте-Карло уменьшается, когда больше реализации сгенерировано. В отклонении симуляции существует намного меньше изменчивости, которое плотно колеблется вокруг теоретического отклонения.

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

|

Связанные примеры

Больше о

Для просмотра документации необходимо авторизоваться на сайте