Симуляция Монте-Карло модели вектора исправления ошибок (VEC)
использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Для примера, Y
= simulate(Mdl
,numobs
,Name,Value
)'NumPaths',1000,'X',X
задает симуляцию 1000 путей и X
как экзогенные данные предиктора для регрессионного компонента.
Рассмотрите модель VEC для следующих семи макроэкономических рядов, а затем подгоните модель к данным.
Валовой внутренний продукт (ВВП)
Неявный дефлятор цен ВВП
Выплаченная компенсация работникам
Нерезультатное рабочее время всех лиц
Эффективная ставка федеральных средств
Расходы на личное потребление
Валовые частные внутренние инвестиции
Предположим, что подходят коинтегрирующий ранг 4 и один краткосрочный срок, то есть рассмотрим модель VEC (1).
Загрузите Data_USEconVECModel
набор данных.
load Data_USEconVECModel
Для получения дополнительной информации о наборе данных и переменных введите Description
в командной строке.
Определите, нужно ли предварительно обработать данные, построив график ряда на отдельных графиках.
figure; subplot(2,2,1) plot(FRED.Time,FRED.GDP); title('Gross Domestic Product'); ylabel('Index'); xlabel('Date'); subplot(2,2,2) plot(FRED.Time,FRED.GDPDEF); title('GDP Deflator'); ylabel('Index'); xlabel('Date'); subplot(2,2,3) plot(FRED.Time,FRED.COE); title('Paid Compensation of Employees'); ylabel('Billions of $'); xlabel('Date'); subplot(2,2,4) plot(FRED.Time,FRED.HOANBS); title('Nonfarm Business Sector Hours'); ylabel('Index'); xlabel('Date');
figure; subplot(2,2,1) plot(FRED.Time,FRED.FEDFUNDS); title('Federal Funds Rate'); ylabel('Percent'); xlabel('Date'); subplot(2,2,2) plot(FRED.Time,FRED.PCEC); title('Consumption Expenditures'); ylabel('Billions of $'); xlabel('Date'); subplot(2,2,3) plot(FRED.Time,FRED.GPDI); title('Gross Private Domestic Investment'); ylabel('Billions of $'); xlabel('Date');
Стабилизируйте все ряды, кроме ставки федеральных фондов, используя преобразование журнала. Масштабируйте полученную серию на 100 так, чтобы все серии находились в одной шкале.
FRED.GDP = 100*log(FRED.GDP); FRED.GDPDEF = 100*log(FRED.GDPDEF); FRED.COE = 100*log(FRED.COE); FRED.HOANBS = 100*log(FRED.HOANBS); FRED.PCEC = 100*log(FRED.PCEC); FRED.GPDI = 100*log(FRED.GPDI);
Создайте модель VECM (1) с помощью краткого синтаксиса. Задайте имена переменных.
Mdl = vecm(7,4,1); Mdl.SeriesNames = FRED.Properties.VariableNames
Mdl = vecm with properties: Description: "7-Dimensional Rank = 4 VEC(1) Model with Linear Time Trend" SeriesNames: "GDP" "GDPDEF" "COE" ... and 4 more NumSeries: 7 Rank: 4 P: 2 Constant: [7×1 vector of NaNs] Adjustment: [7×4 matrix of NaNs] Cointegration: [7×4 matrix of NaNs] Impact: [7×7 matrix of NaNs] CointegrationConstant: [4×1 vector of NaNs] CointegrationTrend: [4×1 vector of NaNs] ShortRun: {7×7 matrix of NaNs} at lag [1] Trend: [7×1 vector of NaNs] Beta: [7×0 matrix] Covariance: [7×7 matrix of NaNs]
Mdl
является vecm
объект модели. Все свойства, содержащие NaN
значения соответствуют параметрам, которые должны быть оценены по данным.
Оцените модель, используя весь набор данных и опции по умолчанию.
EstMdl = estimate(Mdl,FRED.Variables)
EstMdl = vecm with properties: Description: "7-Dimensional Rank = 4 VEC(1) Model" SeriesNames: "GDP" "GDPDEF" "COE" ... and 4 more NumSeries: 7 Rank: 4 P: 2 Constant: [14.1329 8.77841 -7.20359 ... and 4 more]' Adjustment: [7×4 matrix] Cointegration: [7×4 matrix] Impact: [7×7 matrix] CointegrationConstant: [-28.6082 109.555 -77.0912 ... and 1 more]' CointegrationTrend: [4×1 vector of zeros] ShortRun: {7×7 matrix} at lag [1] Trend: [7×1 vector of zeros] Beta: [7×0 matrix] Covariance: [7×7 matrix]
EstMdl
является расчетным vecm
объект модели. Он полностью задан, потому что все параметры имеют известные значения. По умолчанию estimate
накладывает ограничения на H1 форму модели Johansen VEC путем удаления коинтегрирующего тренда и линейных терминов тренда из модели. Исключение параметра из оценки эквивалентно наложению ограничений равенства на нуль.
Симулируйте последовательный путь отклика от предполагаемой модели с длиной, равной пути в данных.
rng(1); % For reproducibility
numobs = size(FRED,1);
Y = simulate(EstMdl,numobs);
Y
является матрицей 240 на 7 симулированные отклики. Столбцы соответствуют именам переменных в EstMdl.SeriesNames
.
Проиллюстрировать отношения между simulate
и filter
путем оценки 4-D модели VEC (1) четырех серий ответов в датском наборе данных Йохансена. Симулируйте один путь откликов, используя подобранную модель и исторические данные в качестве начальных значений, а затем фильтруйте случайный набор Гауссовских нарушений порядка через предполагаемую модель, используя те же ответы прессования.
Загрузите датские экономические данные Йохансена.
load Data_JDanish
Для получения дополнительной информации о переменных введите Description
.
Создайте 4-D модель VEC (1) по умолчанию. Предположим, что коинтегрирующий ранг 1 подходит.
Mdl = vecm(4,1,1); Mdl.SeriesNames = DataTable.Properties.VariableNames
Mdl = vecm with properties: Description: "4-Dimensional Rank = 1 VEC(1) Model with Linear Time Trend" SeriesNames: "M2" "Y" "IB" ... and 1 more NumSeries: 4 Rank: 1 P: 2 Constant: [4×1 vector of NaNs] Adjustment: [4×1 matrix of NaNs] Cointegration: [4×1 matrix of NaNs] Impact: [4×4 matrix of NaNs] CointegrationConstant: NaN CointegrationTrend: NaN ShortRun: {4×4 matrix of NaNs} at lag [1] Trend: [4×1 vector of NaNs] Beta: [4×0 matrix] Covariance: [4×4 matrix of NaNs]
Оцените модель VEC (1), используя весь набор данных. Задайте форму H1 * Johansen.
EstMdl = estimate(Mdl,Data,'Model','H1*');
При воспроизведении результатов simulate
и filter
, важно предпринять эти действия.
Установите то же случайное число, seed и при помощи rng
.
Задайте те же данные отклика предварительного образца, используя 'Y0'
аргумент пары "имя-значение".
Установите случайный seed по умолчанию. Симулируйте 100 наблюдений путем передачи предполагаемой модели в simulate
. В качестве предварительной выборки укажите весь набор данных.
rng default; YSim = simulate(EstMdl,100,'Y0',Data);
YSim
является матрицей 100 на 4 симулированные отклики. Столбцы соответствуют столбцам переменных в EstMdl.SeriesNames
.
Установите случайный seed по умолчанию. Симулируйте 4 серии 100 наблюдений из стандартного Гауссова распределения.
rng default;
Z = randn(100,4);
Пропустите Гауссовы значения через предполагаемую модель. В качестве предварительной выборки укажите весь набор данных.
YFilter = filter(EstMdl,Z,'Y0',Data);
YFilter
является матрицей 100 на 4 симулированные отклики. Столбцы соответствуют столбцам переменных в EstMdl.SeriesNames
. Перед фильтрацией нарушений порядка filter
шкалы Z
нижним треугольным фактором Холецкого модели ковариации у EstMdl.Covariance
.
Сравните получившиеся отклики между filter
и simulate
.
(YSim - YFilter)'*(YSim - YFilter)
ans = 4×4
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
Результаты идентичны.
Рассмотрим эту модель VEC (1) для трех гипотетических рядов отклика.
Нововведения являются многомерными Гауссовыми со средним значением 0 и ковариационной матрицей
Создайте переменные для значений параметров.
Adjustment = [-0.3 0.3; -0.2 0.1; -1 0]; Cointegration = [0.1 -0.7; -0.2 0.5; 0.2 0.2]; ShortRun = {[0. 0.1 0.2; 0.2 -0.2 0; 0.7 -0.2 0.3]}; Constant = [-1; -3; -30]; Trend = [0; 0; 0]; Covariance = [1.3 0.4 1.6; 0.4 0.6 0.7; 1.6 0.7 5];
Создайте vecm
объект модели, представляющий модель VEC (1) с помощью соответствующих аргументов пары "имя-значение ".
Mdl = vecm('Adjustment',Adjustment,'Cointegration',Cointegration,... 'Constant',Constant,'ShortRun',ShortRun,'Trend',Trend,... 'Covariance',Covariance);
Mdl
эффективно является полностью заданным vecm
объект модели. То есть коинтеграционная константа и линейная тенденция неизвестны, но не нужны для симуляции наблюдений или прогнозирования, учитывая, что известны общие параметры константы и тренда.
Симулируйте 1000 путей 100 наблюдений. Верните нововведения (масштабированные нарушения порядка).
numpaths = 1000; numobs = 100; rng(1); % For reproducibility [Y,E] = simulate(Mdl,numobs,'NumPaths',numpaths);
Y
является матрицей 100 на 3 на 1000 симулированные отклики. E
- матрица, размерности которой соответствуют размерностям Y
, но представляет моделируемые, масштабированные нарушения порядка. Столбцы соответствуют именам переменных отклика Mdl.SeriesNames
.
Для каждой временной точки вычислите вектор средних значений симулированных откликов среди всех путей.
MeanSim = mean(Y,3);
MeanSim
- матрица 100 на 7, содержащая среднее значение симулированные отклики в каждой временной точке.
Постройте график симулированных откликов и их средних значений.
figure; for j = 1:Mdl.NumSeries subplot(2,2,j) plot(squeeze(Y(:,j,:)),'Color',[0.8,0.8,0.8]) title(Mdl.SeriesNames{j}); hold on plot(MeanSim(:,j)); xlabel('Time index') hold off end
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'Y0',Y0,'X',X
использует матрицу Y0
как примитивные отклики и матрица X
как данные предиктора в регрессионном компоненте.'NumPaths'
- Количество выборочных путей для генерации1
(по умолчанию) | положительное целое число'Y0'
- Примитивные откликиПримитивные отклики, обеспечивающие начальные значения для модели, заданные как разделенная разделенными запятой парами, состоящая из 'Y0'
и a numpreobs
-by- numseries
числовая матрица или numpreobs
-by- numseries
-by- numprepaths
числовой массив.
numpreobs
- количество предварительных наблюдений. numseries
Количество серий отклика (Mdl.NumSeries
). numprepaths
- количество предварительно выбранных путей отклика.
Строки соответствуют предварительным наблюдениям, а последняя строка содержит последние наблюдения предварительных образцов. Y0
должно иметь по крайней мере Mdl.P
строки. Если вы поставляете больше строк, чем нужно, simulate
использует последние Mdl.P
только наблюдения.
Столбцы должны соответствовать именам ответных рядов в Mdl.SeriesNames
.
Страницы соответствуют отдельным, независимым путям.
Если Y0
является матрицей, тогда simulate
применяет его для моделирования каждого примера пути (страницы). Поэтому все пути в выходном аргументе Y
получают из общих начальных условий.
В противном случае, simulate
применяется Y0
для инициализации симуляции пути (:,:, j
)j
. Y0
должно иметь по крайней мере numpaths
страницы (см. NumPaths
), и simulate
использует только первое numpaths
страниц.
По умолчанию, simulate
устанавливает любые необходимые предварительные наблюдения.
Для стационарных процессов VAR без регрессионных компонентов, simulate
устанавливает предварительные наблюдения в безусловное среднее значение
Для нестационарных процессов или моделей, которые содержат регрессионый компонент, simulate
задает нулевое значение наблюдений перед предварительной выборкой.
Типы данных: double
'X'
- Данные предиктораДанные предиктора для регрессионного компонента в модели, заданные как разделенная разделенными запятой парами, состоящая из 'X'
и числовую матрицу, содержащую numpreds
столбцы.
numpreds
- количество переменных предиктора (size(Mdl.Beta,2)
).
Строки соответствуют наблюдениям, а последняя строка содержит последнее наблюдение. X
должно иметь по крайней мере numobs
строки. Если вы поставляете больше строк, чем нужно, simulate
использует только последние numobs
наблюдения. simulate
не использует регрессионный компонент в предварительном образце периода.
Столбцы соответствуют отдельным переменным предиктора. Все переменные предиктора присутствуют в регрессионном компоненте каждого уравнения отклика.
simulate
применяется X
на каждый путь (страницу); то есть X
представляет один путь наблюдаемых предикторов.
По умолчанию, simulate
исключает регрессионный компонент, независимо от его присутствия в Mdl
.
Типы данных: double
'YF'
- Будущие многомерные ряды откликовБудущий многомерный ряд откликов для условной симуляции, заданный как разделенная разделенными запятой парами, состоящая из 'YF'
и числовую матрицу или массив, содержащий numseries
столбцы.
Строки соответствуют наблюдениям в горизонте симуляции, а первая строка является самым ранним наблюдением. В частности, строка j
в пути расчета k
(YF
) содержит ответы (j
:, k
)j
периоды в будущее. YF
должно иметь по крайней мере numobs
строки для покрытия горизонта симуляции. Если вы поставляете больше строк, чем нужно, simulate
использует только первое numobs
строки.
Столбцы должны соответствовать именам переменных отклика в Mdl.SeriesNames
.
Страницы соответствуют образцам путей. В частности, путь k
(YF
) захватывает состояние, или знание, серии откликов по мере их развития из предварительной выборки прошлого ((:,:, k
)Y0
) в будущее.
Если YF
является матрицей, тогда simulate
применяется YF
каждому из numpaths
выходные пути (см. NumPaths
).
В противном случае YF
должно иметь по крайней мере numpaths
страниц. Если вы поставляете больше страниц, чем нужно, simulate
использует только первое numpaths
страниц.
Элементы YF
могут быть числовыми скалярами или отсутствующими значениями (обозначенными NaN
значения). simulate
рассматривает числовые скаляры как детерминированные будущие отклики, которые известны заранее, например, заданные политикой. simulate
моделирует отклики для соответствующих NaN
значения, обусловленные известными значениями.
По умолчанию YF
- массив, состоящий из NaN
значения, указывающие на полное отсутствие знаний о будущем состоянии всех симулированных откликов. Поэтому, simulate
получает выходные ответы Y
от обычной, безусловной симуляции Монте-Карло.
Для получения дополнительной информации см. «Алгоритмы».
Пример: Рассмотрите симуляцию одного пути модели VEC, состоящей из четырех последовательных трех периодов отклика в будущее. Предположим, что у вас есть предыдущие знания о некоторых будущих значениях откликов, и вы хотите симулировать неизвестные отклики, обусловленные вашими знаниями. Задайте YF
как матрица, содержащая значения, которые вы знаете и используете NaN
для значений, которые вы не знаете, но хотите моделировать. Для примера, 'YF',[NaN 2 5 NaN; NaN NaN 0.1 NaN; NaN NaN NaN NaN]
указывает, что вы не знаете о будущих значениях первой и четвертой серии ответов; вы знаете значение для периода 1 во втором ряду ответов, но не знаете другого значения; и вы знаете значения для периодов 1 и 2 в третьей серии ответов, но не значение для периода 3.
Типы данных: double
Примечание
NaN
значения в Y0
и X
указать отсутствующие значения. simulate
удаляет отсутствующие значения из данных путем перечисленного удаления. Если Y0
является трехмерный массив, тогда simulate
выполняет эти шаги.
Горизонтально конкатенируйте страницы, чтобы сформировать numpreobs
-by- numpaths*numseries
матрица.
Удалите любую строку, содержащую по крайней мере одну NaN
из конкатенированных данных.
В случае отсутствующих наблюдений результаты, полученные из нескольких путей Y0
может отличаться от результатов, полученных по каждому пути индивидуально.
Для условной симуляции (см YF
), если X
содержит все отсутствующие значения в последних numobs
тогда наблюдения simulate
выдает ошибку.
Y
- Моделируемый многомерный ряд откликаМоделируемый многомерный ряд отклика, возвращенный как numobs
-by- numseries
числовая матрица или numobs
-by- numseries
-by- numpaths
числовой массив. Y
представляет продолжение настроек presample в Y0
.
Если вы задаете будущие отклики для условной симуляции с помощью YF
аргумент пары "имя-значение", затем известные значения в YF
появляются на тех же позициях в Y
. Однако Y
содержит моделируемые значения для отсутствующих наблюдений в YF
.
E
- Моделируемый многомерный ряд инноваций моделиМоделируемый многомерный ряд инноваций модели, возвращенный как numobs
-by- numseries
числовая матрица или numobs
-by- numseries
-by- numpaths
числовой массив.
Если вы задаете будущие отклики для условной симуляции (см. YF
аргумент пары "имя-значение"), затем simulate
выводит инновации из известных значений в YF
и помещает предполагаемые инновации в соответствующие положения в E
. Для недостающих наблюдений в YF
, simulate
черпает из Гауссова распределения, обусловленного любыми известными значениями, и помещает рисунки в соответствующие положения в E
.
simulate
выполняет условную симуляцию, используя этот процесс для всех страниц k
= 1..., numpaths
и для каждого временного t
= 1..., numobs
.
simulate
выводит (или обратные фильтры) нововведения E
из известных будущих ответов (t
:, k
)YF
. Для (t
:, k
)E
, (t
:, k
)simulate
имитирует шаблон NaN
значения, которые появляются в YF
.(t
:, k
)
Для отсутствующих элементов E
, (t
:, k
)simulate
выполняет эти шаги.
Нарисуйте Z1
, случайные, стандартные Гауссовы нарушения порядка распределения, обусловленные известными элементами E
.(t
:, k
)
Шкала Z1
по нижнему треугольному фактору Холецкого условной ковариационной матрицы. То есть Z2
= L*Z1
, где L
= chol(C,'lower')
и C
- ковариация условного Гауссова распределения.
Условные Z2
вместо соответствующих отсутствующих значений в E
.(t
:, k
)
Для отсутствующих значений в YF
, (t
:, k
)simulate
фильтрует соответствующие случайные инновации через модель Mdl
.
simulate
использует этот процесс для определения времени источника t 0 моделей, которые включают линейные временные тренды.
Если вы не задаете Y0
, затем t 0 = 0.
В противном случае, simulate
устанавливает t 0 в size(Y0,1)
– Mdl.P
. Поэтому время в компоненте тренда: t = t 0 + 1, t 0 + 2,..., t 0 + numobs
. Это соглашение согласуется с поведением по умолчанию оценки модели, в которой estimate
удаляет первый Mdl.P
ответы, уменьшение эффективного размера выборки. Хотя simulate
явно использует первое Mdl.P
примитивируйте отклики в Y0
чтобы инициализировать модель, общее количество наблюдений в Y0
(исключая любые отсутствующие значения) определяет t 0.
[1] Гамильтон, Джеймс Д. Анализ временных рядов. Princeton, NJ: Princeton University Press, 1994.
[2] Йохансен, С. Основанный на вероятностях вывод в коинтегрированных векторных авторегрессивных моделях. Oxford: Oxford University Press, 1995.
[3] Juselius, K. Cointegrated VAR Model. Oxford: Oxford University Press, 2006.
[4] Lütkepohl, H. Новое введение в анализ нескольких временных рядов. Берлин: Спрингер, 2005.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.