Симулируйте демонстрационные пути переключающей Маркова модели динамической регрессии
дополнительные опции использования заданы одним или несколькими аргументами пары "имя-значение". Например, Y
= simulate(Mdl
,numObs
,Name,Value
)'NumPaths',1000,'Y0',Y0
симулирует 1000
демонстрационные пути и инициализируют динамический компонент каждой подмодели при помощи преддемонстрационных данных об ответе Y0
.
[
также возвращает симулированные инновационные пути Y
,E
,StatePaths
] = simulate(___)E
и симулированные пути состояния StatePaths
, использование любой из комбинаций входных аргументов в предыдущих синтаксисах.
Симулируйте путь к ответу из переключающей Маркова модели динамической регрессии с двумя состояниями для 1D процесса ответа. Этот пример использует произвольные значения параметров.
Создайте полностью заданную модель
Создайте модель дискретной цепи Маркова с двумя состояниями, которая описывает механизм переключения режима. Пометьте режимы.
P = [0.9 0.1; 0.3 0.7]; mc = dtmc(P,'StateNames',["Expansion" "Recession"]);
mc
полностью заданный dtmc
объект.
Для каждого режима используйте arima, чтобы создать модель AR, которая описывает процесс ответа в режиме. Сохраните подмодели в векторе.
mdl1 = arima('Constant',5,'AR',[0.3 0.2],... 'Variance',2); mdl2 = arima('Constant',-5,'AR',0.1,... 'Variance',1); mdl = [mdl1; mdl2];
mdl1
и mdl2
полностью заданный arima
объекты.
Создайте переключающую Маркова модель динамической регрессии из переключающегося механизма mc
и вектор из подмоделей mdl
.
Mdl = msVAR(mc,mdl);
Mdl
полностью заданный msVAR
объект.
Симулируйте путь к ответу
Сгенерируйте один случайный путь к ответу длины 50 из модели.
rng(1); % For reproducibility
y = simulate(Mdl,50);
y
50 на 1 вектор из одного пути к ответу.
Постройте путь к ответу.
figure plot(y) xlabel("Time") ylabel("Response")
Полагайте, что модель в Симулирует Путь к Ответу.
Создайте переключающую Маркова модель динамической регрессии.
P = [0.9 0.1; 0.3 0.7]; mc = dtmc(P,'StateNames',["Expansion" "Recession"]); mdl1 = arima('Constant',5,'AR',[0.3 0.2],... 'Variance',2); mdl2 = arima('Constant',-5,'AR',0.1,... 'Variance',1); mdl = [mdl1; mdl2]; Mdl = msVAR(mc,mdl);
Симулируйте 3 ответа, инновации и пути индекса состояния 5 наблюдений из модели.
rng('default') % For reproducibility [Y,E,SP] = simulate(Mdl,5,'NumPaths',3)
Y = 5×3
-5.7605 10.9496 11.4633
-5.7002 8.5772 -3.1268
4.2446 10.7774 -5.6161
-3.1665 -2.2920 -5.2677
-3.8995 -4.7403 -6.3141
E = 5×3
-0.2050 0.9496 1.4633
-0.1241 -1.7076 0.7269
2.1068 1.0143 -0.3034
1.4090 1.6302 0.2939
1.4172 0.4889 -0.7873
SP = 5×3
2 1 1
2 1 2
1 1 2
2 2 2
2 2 2
Y
E
, и SP
5 3 матрицы. Столбцы представляют отдельные, независимые контуры.
Симулируйте один путь ответов, инноваций и состояний в горизонт симуляции длины 50. Затем постройте каждый путь отдельно.
[y,e,sp] = simulate(Mdl,50); figure subplot(3,1,1) plot(y) ylabel('Response') grid on subplot(3,1,2) plot(e) ylabel('Innovation') grid on subplot(3,1,3) plot(sp,'m') ylabel('State') yticks([1 2]) yticklabels(Mdl.StateNames)
Считайте переключающую Маркова модель динамической регрессии с двумя состояниями послевоенных США действительным темпом роста GDP. Модели представили оценки параметра в [1].
Создайте модель дискретной цепи Маркова, которая описывает механизм переключения режима. Пометьте режимы.
P = [0.92 0.08; 0.26 0.74]; mc = dtmc(P,'StateNames',["Expansion" "Recession"]);
Создайте отдельные модели AR (0) (постоянный только) для этих двух режимов.
sigma = 3.34; % Homoscedastic models across states mdl1 = arima('Constant',4.62,'Variance',sigma^2); mdl2 = arima('Constant',-0.48,'Variance',sigma^2); mdl = [mdl1 mdl2];
Создайте переключающую Маркова модель динамической регрессии, которая описывает поведение темпа роста GDP США.
Mdl = msVAR(mc,mdl);
Mdl
полностью заданный msVAR
объект.
Сгенерируйте один случайный путь 100 ответов, соответствующих инноваций и состояний из модели.
rng(1) % For reproducibility
[y,e,sp] = simulate(Mdl,100);
y
100 1 вектор из уровней GDP и e
100 1 вектор из соответствующих инноваций. sp
100 1 вектор из индексов состояния.
Полагайте, что переключающая Маркова модель в Симулирует Уровни GDP США и Экономические состояния, но принимает, что подмодели являются AR (1) вместо этого. Считайте подбирать модель к наблюдениям в период 1960:Q1–2004:Q2.
Создайте шаблон модели для оценки. Задайте AR (1) подмодели.
mc = dtmc(NaN(2),'StateNames',["Expansion" "Recession"]); ar1 = arima(1,0,0); Mdl = msVAR(mc,[ar1; ar1]);
Поскольку подмодели являются AR (1), каждый требует, чтобы одно преддемонстрационное наблюдение инициализировало свой динамический компонент для оценки.
Создайте модель, содержащую начальные значения параметров для процедуры оценки.
mc0 = dtmc(0.5*ones(2),'StateNames',["Expansion" "Recession"]); submdl01 = arima('Constant',1,'Variance',1,'AR',0.001); submdl02 = arima('Constant',-1,'Variance',1,'AR',0.001); Mdl0 = msVAR(mc0,[submdl01; submdl02]);
Загрузите данные. Преобразуйте целый набор к ряду годового показателя.
load Data_GDP
qrate = diff(Data)./Data(1:(end - 1));
arate = 100*((1 + qrate).^4 - 1);
Идентифицируйте периоды расчета предварительной выборки и оценки с помощью дат, сопоставленных с рядом годового показателя. Поскольку преобразование применяет первое различие, необходимо исключить первую дату наблюдения из исходной выборки.
dates = datetime(dates(2:end),'ConvertFrom','datenum',... 'Format','yyyy:QQQ','Locale','en_US'); estPrd = datetime(["1960:Q2" "2004:Q2"],'InputFormat','yyyy:QQQ',... 'Format','yyyy:QQQ','Locale','en_US'); idxEst = isbetween(dates,estPrd(1),estPrd(2)); idxPre = dates < estPrd(1);
Подбирайте модель к выборочным данным оценки. Задайте преддемонстрационное наблюдение.
y0 = arate(idxPre);
EstMdl = estimate(Mdl,Mdl0,arate(idxEst),'Y0',y0);
Симулируйте путь к ответу от подобранной модели за период оценки. Задайте преддемонстрационное наблюдение.
rng(1) % For reproducibility numObs = sum(idxEst); aratesim = simulate(EstMdl,numObs,'Y0',y0);
Постройте наблюдения и симулированный путь годовых показателей, и идентифицируйте периоды рецессии при помощи recessionplot
.
figure; plot(dates(idxEst),[arate(idxEst) aratesim]) recessionplot xlabel("Time") ylabel("Annualized GDP Rate") legend("Observed","Simulated");
Оцените точность оценки с помощью симулированных данных из известного генерирующего данные процесса (DGP). Этот пример использует произвольные значения параметров.
Создайте модель для DGP
Создайте полностью заданную, модель дискретной цепи Маркова с двумя состояниями для переключающегося механизма.
P = [0.7 0.3; 0.1 0.9]; mc = dtmc(P);
Для каждого состояния создайте полностью заданную модель AR (1) для процесса ответа.
% Constants C1 = 5; C2 = -2; % Autoregression coefficients AR1 = 0.4; AR2 = 0.2; % Variances V1 = 4; V2 = 2; % AR Submodels dgp1 = arima('Constant',C1,'AR',AR1,'Variance',V1); dgp2 = arima('Constant',C2,'AR',AR2,'Variance',V2);
Создайте полностью заданную переключающую Маркова модель динамической регрессии для DGP.
DGP = msVAR(mc,[dgp1,dgp2]);
Симулируйте пути к ответу от DGP
Сгенерируйте 10 случайных путей к ответу длины 1000 от DGP.
rng(1); % For reproducibility N = 10; n = 1000; Data = simulate(DGP,n,'Numpaths',N);
Data
1000 10 матрица симулированных откликов.
Создайте модель для оценки
Создайте частично заданную переключающую Маркова модель динамической регрессии, которая имеет ту же структуру как генерирующий данные процесс, но задайте неизвестный переход матричные и неизвестные коэффициенты подмодели.
PEst = NaN(2); mcEst = dtmc(PEst); mdl = arima(1,0,0); Mdl = msVAR(mcEst,[mdl; mdl]);
Создайте модель, содержащую начальную стоимость
Создайте полностью заданную переключающую Маркова модель динамической регрессии, которая имеет ту же структуру как Mdl
, но установленный все допускающие оценку параметры на начальные значения.
P0 = 0.5*ones(2); mc0 = dtmc(P0); mdl01 = arima('Constant',1,'AR',0.5,'Variance',2); mdl02 = arima('Constant',-1,'AR',0.5,'Variance',1); Mdl0 = msVAR(mc0,[mdl01,mdl02]);
Оцените модели
Подбирайте модель к каждому симулированному пути. Для каждого пути постройте логарифмическую правдоподобность в каждой итерации алгоритма EM.
c1 = zeros(N,1); c2 = zeros(N,1); v1 = zeros(N,1); v2 = zeros(N,1); ar1 = zeros(N,1); ar2 = zeros(N,1); PStack = zeros(2,2,N); figure hold on for i = 1:N EstModel = estimate(Mdl,Mdl0,Data(:,i),'IterationPlot',true); c1(i) = EstModel.Submodels(1).Constant; c2(i) = EstModel.Submodels(2).Constant; v1(i) = EstModel.Submodels(1).Covariance; v2(i) = EstModel.Submodels(2).Covariance; ar1(i) = EstModel.Submodels(1).AR{1}; ar2(i) = EstModel.Submodels(2).AR{1}; PStack(:,:,i) = EstModel.Switch.P; end hold off
Оцените точность
Вычислите среднее значение Монте-Карло каждого предполагаемого параметра.
c1Mean = mean(c1); c2Mean = mean(c2); v1Mean = mean(v1); v2Mean = mean(v2); ar1Mean = mean(ar1); ar2Mean = mean(ar2); PMean = mean(PStack,3);
Сравните параметры населения с соответствующими оценками Монте-Карло.
DGPvsEstimate = [...
C1 c1Mean
C2 c2Mean
V1 v1Mean
V2 v2Mean
AR1 ar1Mean
AR2 ar2Mean]
DGPvsEstimate = 6×2
5.0000 5.0260
-2.0000 -1.9615
4.0000 3.9710
2.0000 1.9903
0.4000 0.4061
0.2000 0.2017
P
P = 2×2
0.7000 0.3000
0.1000 0.9000
PEstimate = PMean
PEstimate = 2×2
0.7065 0.2935
0.1023 0.8977
Сгенерируйте случайные пути из переключающей Маркова модели динамической регрессии с тремя состояниями для 2D процесса ответа VARX. Этот пример использует произвольные значения параметров для DGP.
Создайте полностью заданную модель для DGP
Создайте модель дискретной цепи Маркова с тремя состояниями для переключающегося механизма.
P = [10 1 1; 1 10 1; 1 1 10]; mc = dtmc(P);
mc
полностью заданный dtmc
объект. dtmc
нормирует строки P
так, чтобы они суммировали к 1
.
Для каждого режима используйте varm
создать модель VAR, которая описывает процесс ответа в режиме. Задайте все значения параметров.
% Constants C1 = [1;-1]; C2 = [2;-2]; C3 = [3;-3]; % Autoregression coefficients AR1 = {}; AR2 = {[0.5 0.1; 0.5 0.5]}; AR3 = {[0.25 0; 0 0] [0 0; 0.25 0]}; % Regression coefficients Beta1 = [1;-1]; Beta2 = [2 2;-2 -2]; Beta3 = [3 3 3;-3 -3 -3]; % Innovations covariances Sigma1 = [1 -0.1; -0.1 1]; Sigma2 = [2 -0.2; -0.2 2]; Sigma3 = [3 -0.3; -0.3 3]; % VARX submodels mdl1 = varm('Constant',C1,'AR',AR1,'Beta',Beta1,'Covariance',Sigma1); mdl2 = varm('Constant',C2,'AR',AR2,'Beta',Beta2,'Covariance',Sigma2); mdl3 = varm('Constant',C3,'AR',AR3,'Beta',Beta3,'Covariance',Sigma3); mdl = [mdl1; mdl2; mdl3];
mdl
содержит три, полностью задал varm
объекты модели.
Для DGP создайте полностью заданную переключающую Маркова модель динамической регрессии из переключающегося механизма mc
и подмодели mdl
.
Mdl = msVAR(mc,mdl);
Mdl
полностью заданный msVAR
модель.
Симулируйте данные, игнорирующие компонент регрессии
Если вы не снабжаете внешними данными, simulate
игнорирует компоненты регрессии в подмоделях. Симулируйте 3 отдельных, независимых контура ответов, инноваций, и утвердите индексы длины 5 из модели.
rng(1); % For reproducibility [Y,E,SP] = simulate(Mdl,5,'NumPaths',3)
Y = Y(:,:,1) = 5.2387 1.5297 4.4290 4.2738 1.1668 -1.2905 -0.9654 -0.2028 -0.2701 0.8993 Y(:,:,2) = 2.7737 -2.5383 -0.8651 -1.1046 -0.0511 0.3696 0.5826 -0.8926 2.4022 -0.6912 Y(:,:,3) = 3.5443 0.8768 4.9748 -0.7956 5.7213 0.8073 4.2473 0.5805 2.7972 -1.3340
E = E(:,:,1) = 1.2387 1.5297 -0.3434 2.8896 0.1668 -0.2905 -1.9654 0.7972 -1.2701 1.8993 E(:,:,2) = 1.7737 -1.5383 -1.8651 -0.1046 -1.0511 1.3696 -0.4174 0.1074 1.4022 0.3088 E(:,:,3) = -0.4557 0.8768 1.1150 -1.0061 1.3134 0.7176 -0.6941 -0.6838 1.7972 -0.3340
SP = 5×3
2 1 2
2 1 2
1 1 2
1 1 2
1 1 1
Y
и E
5 2 3 массивами симулированных откликов и инноваций, соответственно. Строки соответствуют моментам времени, столбцы соответствуют переменным в системе, и страницы соответствуют путям. SP
5 3 матрица, столбцы которой соответствуют путям.
Симулируйте один путь ответов, инноваций и состояний в горизонт симуляции длины 50. Затем постройте каждый путь отдельно.
rng0 = rng; % Store settings to reproduce state sequence. [Y,E,SP] = simulate(Mdl,50); figure subplot(3,1,1) plot(Y) ylabel("Response") grid on legend(["y_1" "y_2"]) subplot(3,1,2) plot(E) ylabel("Innovation") grid on legend(["e_1" "e_2"]) subplot(3,1,3) plot(SP,'m') ylabel("State") yticks([1 2 3])
Симулируйте данные включая компонент регрессии
Симулируйте внешние данные для этих трех регрессоров путем генерации 50 случайных наблюдений от 3-D стандартного Распределения Гаусса.
X = randn(50,3);
Сгенерируйте один случайный ответ, инновации, и утвердите путь длины 50. Задайте симулированные внешние данные для компонентов регрессии подмодели. Постройте график результатов.
rng(rng0); % Reproduce state sequence in previous simulation. [Y,E,SP] = simulate(Mdl,50,'X',X); figure subplot(3,1,1) plot(Y) ylabel("Response") grid on legend(["y_1" "y_2"]) subplot(3,1,2) plot(E) ylabel("Innovation") grid on legend(["e_1" "e_2"]) subplot(3,1,3) plot(SP,'m') ylabel("State") yticks([1 2 3])
Полагайте, что модель в Симулирует Пути из Модели с Подмоделями VARX.
Создайте полностью заданную модель
Создайте переключающую Маркова модель, исключая компонент регрессии.
P = [10 1 1; 1 10 1; 1 1 10]; mc = dtmc(P); C1 = [1;-1]; C2 = [2;-2]; C3 = [3;-3]; AR1 = {}; AR2 = {[0.5 0.1; 0.5 0.5]}; AR3 = {[0.25 0; 0 0] [0 0; 0.25 0]}; Sigma1 = [1 -0.1; -0.1 1]; Sigma2 = [2 -0.2; -0.2 2]; Sigma3 = [3 -0.3; -0.3 3]; mdl1 = varm('Constant',C1,'AR',AR1,'Covariance',Sigma1); mdl2 = varm('Constant',C2,'AR',AR2,'Covariance',Sigma2); mdl3 = varm('Constant',C3,'AR',AR3,'Covariance',Sigma3); mdl = [mdl1; mdl2; mdl3]; Mdl = msVAR(mc,mdl);
Симулируйте разнообразные пути
Сгенерируйте 1 000 случайных путей ответов для 50 временных шагов. Запустите все симуляции в первом состоянии.
rng(10); % For reproducibility S0 = [1 0 0]; Y = simulate(Mdl,50,'S0',S0,'NumPaths',1000);
Y
50 2 1 000 массивов путей к симулированному отклику.
Вычислите распределение Монте-Карло
Для каждой переменной и пути, вычислите среднее значение процесса.
mus = mean(Y,1);
Для каждой переменной постройте распределение Монте-Карло среднего значения процесса.
figure h1 = histogram(mus(1,1,:),'Normalization',"probability",... 'BinWidth',0.1); hold on h2 = histogram(mus(1,2,:),'Normalization',"probability",... 'BinWidth',0.1); legend(["y_1" "y_2"]) title('Process Means') hold off
Для каждой переменной и пути, вычислите стандартное отклонение процесса.
sigmas = std(Y,0,1);
Для каждой переменной постройте распределение Монте-Карло стандартного отклонения процесса.
figure h1 = histogram(sigmas(1,1,:),'Normalization',"probability",... 'BinWidth',0.05); hold on h2 = histogram(sigmas(1,2,:),'Normalization',"probability",... 'BinWidth',0.05); legend(["y_1" "y_2"]) title('Process Standard Deviations') hold off
numObs
— Количество наблюдений, чтобы сгенерироватьКоличество наблюдений, чтобы сгенерировать для каждого демонстрационного пути в виде положительного целого числа.
Типы данных: double
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'NumPaths',1000,'Y0',Y0
симулирует 1000
демонстрационные пути и инициализируют динамический компонент каждой подмодели при помощи преддемонстрационных данных об ответе Y0
.'NumPaths'
— Количество демонстрационных путей, чтобы сгенерировать
(значение по умолчанию) | положительное целое числоКоличество демонстрационных путей, чтобы сгенерировать в виде разделенной запятой пары, состоящей из 'NumPaths'
и положительное целое число.
Пример: 'NumPaths',1000
Типы данных: double
'Y0'
— Преддемонстрационные данные об ответеПреддемонстрационные данные об ответе в виде разделенной запятой пары, состоящей из 'Y0'
и числовая матрица или массив.
Использовать те же преддемонстрационные данные для каждого numPaths
путь, задайте numPreSampleObs
- numSeries
матрица, где numPaths
значение NumPaths
, numPreSampleObs
количество преддемонстрационных наблюдений и numSeries
количество переменных отклика.
Использовать различные преддемонстрационные данные для каждого пути:
Для одномерных подмоделей ARX задайте numPreSampleObs
- numPaths
матрица.
Для многомерных подмоделей VARX задайте numPreSampleObs
- numSeries
- numPaths
массив.
Количество преддемонстрационных наблюдений numPreSampleObs
должно быть достаточным, чтобы инициализировать условия AR всех подмоделей. Если numPreSampleObs
превышает порядок AR любого состояния, simulate
использует последние наблюдения.
Каждый раз simulate
состояния переключателей, это обновляет Y0
использование последних симулированных наблюдений.
По умолчанию, simulate
определяет Y0
подмоделью начального состояния (см. S0
):
Если начальная подмодель является стационарным процессом AR без компонентов регрессии, simulate
преддемонстрационные наблюдения наборов к безусловному среднему значению.
В противном случае, simulate
обнуляет преддемонстрационные наблюдения.
Типы данных: double
'S0'
— Вероятности начального состоянияВероятности начального состояния в виде разделенной запятой пары, состоящей из 'S0'
и неотрицательный числовой вектор из длины numStates
.
simulate
нормирует S0
произвести распределение.
simulate
выбирает начальное состояние каждого пути от S0
наугад. Чтобы начать с определенного начального состояния, задайте распределение с вероятностной мерой 1
в том состоянии.
По умолчанию, simulate
наборы S0
к установившемуся распределению, вычисленному asymptotics
.
Пример: 'S0',[0.2 0.2 0.6]
Пример: 'S0',[0 1]
задает состояние 2 как начальное состояние.
Типы данных: double
'X'
— Данные о предиктореДанные о предикторе раньше оценивали компоненты регрессии во всех подмоделях Mdl
В виде разделенной запятой пары, состоящей из 'X'
и числовая матрица или вектор ячейки из числовых матриц.
Чтобы использовать подмножество тех же предикторов в каждом состоянии, задайте X
как матрица с numPreds
столбцы и по крайней мере numObs
'Строки' . Столбцы соответствуют отличным переменным предикторам. Подмодели используют первоначальные столбцы связанной матрицы, в порядке, до количества предикторов подмодели. Количество столбцов в Beta
свойство Mdl. SubModels (
определяет количество внешних переменных в компоненте регрессии подмодели j
)
. Если количество строк превышает j
numObs
то simulate
использует последние наблюдения.
Чтобы использовать различные предикторы в каждом состоянии, задайте вектор ячейки из таких матриц с длиной numStates
.
По умолчанию, simulate
игнорирует компоненты регрессии в Mdl
.
Типы данных: double
Y
— Пути к симулированному откликуПути к симулированному отклику, возвращенные как числовая матрица или массив. Y
представляет продолжение преддемонстрационных ответов в Y0
.
Для одномерных подмоделей ARX, Y
numObs
- numPaths
матрица. Для многомерных подмоделей VARX, Y
numObs
- numSeries
- numPaths
массив.
E
— Симулированные инновационные путиСимулированные инновационные пути, возвращенные как числовая матрица или массив.
Для одномерных подмоделей ARX, E
numObs
- numPaths
матрица. Для многомерных подмоделей VARX, E
numObs
- numSeries
- numPaths
массив.
StatePaths
— Симулированные пути состоянияСимулированные пути состояния, возвращенные как numObs
- numPaths
числовая матрица.
[1] Chauvet, M. и Дж. Д. Гамильтон. "Датируя Поворотные моменты Делового цикла". В Нелинейном Анализе Деловых циклов (Вклады в Экономический анализ, Объем 276). C. Милас, П. Ротмен, и Д. ван Дейк, редакторы). Амстердам: Emerald Group Publishing Limited, 2006.
[2] Гамильтон, J. D. "Анализ Временных рядов Согласно Изменениям в Режиме". Журнал Эконометрики. Издание 45, 1990, стр 39–70.
[3] Гамильтон, Джеймс. D. Анализ Временных Рядов. Принстон, NJ: Издательство Принстонского университета, 1994.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.