Сглаживание симуляции модели байесовской векторной авторегрессии (VAR)
simsmooth
хорошо подходит для продвинутых приложений, таких как выборочное условное прогнозирование из апостериорного прогнозирующего распределения байесовской модели VAR (p), прогнозирование модели VARX (p), вменение отсутствующего значения и оценка параметра в присутствии отсутствующих значений. Также,simsmooth
позволяет вам настроить дискретизатор Гиббса для прогнозирования вне выборки. Для оценки выборочных прогнозов из байесовской модели VAR (p) см. forecast
.
[
возвращает 1000 случайных рисунок векторов коэффициентов λ
CoeffCoeffDraws
,SigmaDraws
] = simsmooth(PriorMdl
,Y
) и инновации ковариации матрицах,
Sigma
, полученный из апостериорного распределения, образованного объединением предыдущей байесовской модели VAR (p)
PriorMdl
и данные отклика Y
.
Процедура дискретизации включает шаг увеличения Байесовских данных, который использует фильтр Калмана (см. Алгоритмы). Во время отбора проб, simsmooth
заменяет отсутствующие значения без предварительного опредления в Y
, обозначенный NaN
значений с вмененными значениями.
[
использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Для примера можно задать количество случайных рисований из распределения или указать данные отклика предварительного образца.CoeffDraws
,SigmaDraws
] = simsmooth(PriorMdl
,Y
,Name,Value
)
[
также возвращает вмененные значения отклика каждого розыгрыша CoeffDraws
,SigmaDraws
,NaNDraws
]
= simsmooth(___)NaNDraws
использование любой комбинации входных аргументов в предыдущих синтаксисах.
[
также возвращает среднее CoeffDraws
,SigmaDraws
,NaNDraws
,YMean
,YStd
]
= simsmooth(___)YMean
и стандартное отклонение YStd
апостериорного прогнозирующего распределения дополненных данных.
Когда simulate
оценивает апостериорное распределение, из которого можно нарисовать параметры, удаляет все строки в данных, которые содержат по крайней мере одно отсутствующее значение (NaN
). Однако simsmooth
использует увеличение байесовских данных, чтобы вписать отсутствующие значения, не являющиеся предварительными, во время апостериорной оценки.
Рассмотрим 3-D модель VAR (4) для инфляции в США (INFL
), безработица (UNRATE
), и федеральные фонды (FEDFUNDS
) ставки.
Для всех , - серия независимых 3-D нормальных инноваций со средним значением 0 и ковариацией . Предположим, что слабое сопряженное предшествующее распределение для параметров .
Загрузка и предварительная обработка данных
Загрузите набор макроэкономических данных США. Рассчитать уровень инфляции и стабилизировать показатели безработицы и федеральных фондов.
load Data_USEconModel seriesnames = ["INFL" "UNRATE" "FEDFUNDS"]; DataTable.INFL = 100*[NaN; price2ret(DataTable.CPIAUCSL)]; DataTable.DUNRATE = [NaN; diff(DataTable.UNRATE)]; DataTable.DFEDFUNDS = [NaN; diff(DataTable.FEDFUNDS)]; seriesnames(2:3) = "D" + seriesnames(2:3);
Несколько серий имеют ведущие NaN
значения, потому что их измерения были недоступны одновременно с другими измерениями. Потому что ведущие NaN
значения могут влиять на предварительный образец спецификации, удалять все строки, содержащие по крайней мере одно начальное отсутствующее значение.
rmldDataTable = rmmissing(DataTable(:,seriesnames));
Создайте предыдущую модель
Создайте слабую сопряженную предшествующую модель путем определения больших предшествующих отклонений коэффициента. Задайте имена рядов ответов.
numseries = numel(seriesnames);
numlags = 4;
PriorMdl = conjugatebvarm(numseries,numlags,'SeriesNames',seriesnames);
numcoeffseqn = size(PriorMdl.V,1);
PriorMdl.V = 1e4*eye(numcoeffseqn);
Случайное размещение отсутствующих значений в данных
Чтобы проиллюстрировать симуляцию при наличии отсутствующих значений, случайным образом поместите отсутствующие значения в данные после периода предварительного образца.
rng(1) % For reproducibility T = size(rmldDataTable,1); idxpre = 1:PriorMdl.P; % Presample period idxest = (PriorMdl.P + 1):T; % Estimation period nmissing = 20; % Simulate at most nmissing missing values sidx = [randsample(idxest,nmissing,true); randsample(1:numseries,nmissing,true)]; lsidx = sub2ind([T,numseries],sidx(1,:),sidx(2,:)); MissData = table2array(rmldDataTable); MissData(lsidx) = NaN; MissDataTable = rmldDataTable; MissDataTable{:,:} = MissData;
Симулируйте параметры из апостериорной функции
Нарисуйте 1000 наборов параметров из апостериорного распределения путем вызова simsmooth
, который оценивает апостериорное распределение параметров, а затем формирует апостериорное прогнозирующее распределение.
[Coeff,Sigma] = simsmooth(PriorMdl,MissDataTable);
Coeff
- матрица 39 на 1000 векторов случайным образом нарисованных коэффициентов из апостериорной матрицы. Sigma
является массивом 3х3-х1000 случайным образом нарисованных инноваций ковариации матрицах.
По умолчанию simsmooth
инициализирует модель VAR при помощи первых четырех наблюдений в данных.
Чтобы связать строки Coeff
для коэффициентов получаем сводные данные предыдущего распределения при помощи summarize
. В таблице отобразите первый набор случайным образом нарисованных коэффициентов с соответствующими именами.
Summary = summarize(PriorMdl,'off'); table(Coeff(:,1),'RowNames',Summary.CoeffMap)
ans=39×1 table
Var1
__________
AR{1}(1,1) 0.22109
AR{1}(1,2) -0.24034
AR{1}(1,3) 0.093315
AR{2}(1,1) 0.18329
AR{2}(1,2) -0.23178
AR{2}(1,3) -0.026301
AR{3}(1,1) 0.39991
AR{3}(1,2) 0.41141
AR{3}(1,3) 0.054702
AR{4}(1,1) 0.024944
AR{4}(1,2) -0.37372
AR{4}(1,3) -0.0095642
Constant(1) 0.21499
AR{1}(2,1) -0.073776
AR{1}(2,2) 0.36086
AR{1}(2,3) 0.071088
⋮
Кроме того, можно создать эмпирическую модель из рисунков и использовать summarize
отображение модели путем задания любого параметра отображения.
Отобразите сводные данные апостериорных рисунков как уравнение.
EmpMdl = empiricalbvarm(numseries,numlags,'SeriesNames',seriesnames,... 'CoeffDraws',Coeff,'SigmaDraws',Sigma); summarize(EmpMdl,'equation')
VAR Equations | INFL(-1) DUNRATE(-1) DFEDFUNDS(-1) INFL(-2) DUNRATE(-2) DFEDFUNDS(-2) INFL(-3) DUNRATE(-3) DFEDFUNDS(-3) INFL(-4) DUNRATE(-4) DFEDFUNDS(-4) Constant ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ INFL | 0.1447 -0.3685 0.1013 0.2974 -0.0959 0.0360 0.4115 0.2244 0.0474 0.0265 -0.2321 0.0030 0.1095 | (0.0744) (0.1314) (0.0370) (0.0833) (0.1509) (0.0398) (0.0833) (0.1440) (0.0403) (0.0879) (0.1301) (0.0370) (0.0744) DUNRATE | -0.0187 0.4445 0.0314 0.0836 0.2372 0.0489 -0.0407 -0.0548 -0.0064 0.0483 -0.1753 0.0027 -0.0597 | (0.0447) (0.0808) (0.0234) (0.0514) (0.0863) (0.0230) (0.0507) (0.0906) (0.0243) (0.0514) (0.0779) (0.0225) (0.0466) DFEDFUNDS | -0.2046 -1.1927 -0.2524 0.2864 -0.2282 -0.2657 0.2709 -0.6231 0.0289 -0.0404 0.1043 -0.1236 -0.2952 | (0.1530) (0.2931) (0.0816) (0.1832) (0.3123) (0.0857) (0.1736) (0.3105) (0.0900) (0.1866) (0.2880) (0.0758) (0.1684) Innovations Covariance Matrix | INFL DUNRATE DFEDFUNDS ------------------------------------------- INFL | 0.2842 -0.0098 0.1346 | (0.0286) (0.0122) (0.0464) DUNRATE | -0.0098 0.1062 -0.1496 | (0.0122) (0.0106) (0.0296) DFEDFUNDS | 0.1346 -0.1496 1.3187 | (0.0464) (0.0296) (0.1422)
Рассмотрим 3-D модель VAR (4) моделирования параметров из апостериорного распределения при наличии отсутствующих значений .
Загрузите набор макроэкономических данных США. Рассчитать уровень инфляции и стабилизировать показатели безработицы и федеральных фондов.
load Data_USEconModel seriesnames = ["INFL" "UNRATE" "FEDFUNDS"]; DataTable.INFL = 100*[NaN; price2ret(DataTable.CPIAUCSL)]; DataTable.DUNRATE = [NaN; diff(DataTable.UNRATE)]; DataTable.DFEDFUNDS = [NaN; diff(DataTable.FEDFUNDS)]; seriesnames(2:3) = "D" + seriesnames(2:3);
Удалите все строки, содержащие начальные отсутствующие значения.
rmldDataTable = rmmissing(DataTable(:,seriesnames));
Создайте слабую сопряженную предшествующую модель. Задайте имена рядов ответов.
numseries = numel(seriesnames);
numlags = 4;
PriorMdl = conjugatebvarm(numseries,numlags,'SeriesNames',seriesnames);
numcoeffseqn = size(PriorMdl.V,1);
PriorMdl.V = 1e4*eye(numcoeffseqn);
Случайным образом поместите отсутствующие значения в данные после периода предварительного образца.
rng(1) % For reproducibility T = size(rmldDataTable,1); idxpre = 1:PriorMdl.P; % Presample period idxest = (PriorMdl.P + 1):T; % Estimation period nmissing = 20; % Simulate at most nmissing missing values sidx = [randsample(idxest,nmissing,true); randsample(1:numseries,nmissing,true)]; lsidx = sub2ind([T,numseries],sidx(1,:),sidx(2,:)); MissData = table2array(rmldDataTable); MissData(lsidx) = NaN; MissDataTable = rmldDataTable; MissDataTable{:,:} = MissData;
Нарисуйте 1000 наборов параметров из апостериорного распределения путем вызова simsmooth
. Верните значения, которые симуляция сглаживает для недостающих наблюдений.
[~,~,NaNDraws] = simsmooth(PriorMdl,MissDataTable);
NaNDraws
- матрица 19 на 1000 случайным образом нарисованных векторов отклика из апостериорного прогнозирующего распределения. Элементы соответствуют отсутствующим значениям в данных, упорядоченных столбцовым поиском. Для примера, NaNDraws(3,1)
- первый случайным образом нарисованный вмененный ответ третьего отсутствующего значения в данных. Найдите соответствующее значение в данных.
[idxi,idxj] = find(ismissing(MissDataTable),3); responsename = seriesnames(idxj(end))
responsename = "INFL"
observationtime = MissDataTable.Time(idxi(end))
observationtime = datetime
Q3-65
Постройте график эмпирического распределения вмененных значений уровня инфляции во время Q3-65.
histogram(NaNDraws(3,:))
title('Q3-65 Inflation Rate Empirical Distribution')
Рассмотрим 3-D модель VAR (4) моделирования параметров из апостериорного распределения при наличии отсутствующих значений.
Загрузите набор макроэкономических данных США. Вычислите уровень инфляции, стабилизируйте ставки безработицы и федеральных фондов и удалите недостающие значения (данные включают только ведущие отсутствующие значения).
load Data_USEconModel seriesnames = ["INFL" "UNRATE" "FEDFUNDS"]; DataTable.INFL = 100*[NaN; price2ret(DataTable.CPIAUCSL)]; DataTable.DUNRATE = [NaN; diff(DataTable.UNRATE)]; DataTable.DFEDFUNDS = [NaN; diff(DataTable.FEDFUNDS)]; seriesnames(2:3) = "D" + seriesnames(2:3); rmDataTable = rmmissing(DataTable);
Создайте слабую сопряженную предшествующую модель. Задайте имена рядов ответов.
numseries = numel(seriesnames);
numlags = 4;
PriorMdl = conjugatebvarm(numseries,numlags,'SeriesNames',seriesnames);
numcoeffseqn = size(PriorMdl.V,1);
PriorMdl.V = 1e4*eye(numcoeffseqn);
Симулируйте 5000 коэффициентов и инновационных ковариационных матриц из апостериорного распределения. Задайте период горения 1000 и коэффициент утончения 5.
rng(1); % For reproducibility [Coeff,Sigma] = simsmooth(PriorMdl,rmDataTable{:,seriesnames},... 'NumDraws',5000,'BurnIn',1000,'Thin',5);
Coeff
является матрицей коэффициентов 39 на 5000 и Sigma
массив инновационных ковариационных матриц 3 на 3 на 5000. Оба Coeff
и Sigma
случайным образом вытягиваются из апостериорного распределения.
Рассмотрим 3-D модель VAR (4) моделирования параметров из апостериорного распределения при наличии отсутствующих значений. В этом случае примите, что предыдущая модель является полунъюгатной.
Загрузите набор макроэкономических данных США. Вычислите уровень инфляции, стабилизируйте ставки безработицы и федеральных фондов и удалите недостающие значения (данные включают только ведущие отсутствующие значения).
load Data_USEconModel seriesnames = ["INFL" "UNRATE" "FEDFUNDS"]; DataTable.INFL = 100*[NaN; price2ret(DataTable.CPIAUCSL)]; DataTable.DUNRATE = [NaN; diff(DataTable.UNRATE)]; DataTable.DFEDFUNDS = [NaN; diff(DataTable.FEDFUNDS)]; seriesnames(2:3) = "D" + seriesnames(2:3); rmDataTable = rmmissing(DataTable);
Создайте полуконъюгатную предшествующую модель. Задайте имена рядов ответов.
numseries = numel(seriesnames); numlags = 4; PriorMdl = bayesvarm(numseries,numlags,'ModelType','semiconjugate',... 'SeriesNames',seriesnames);
Чтобы получить начальные значения для коэффициентов, рассмотрите коэффициенты из модели VAR, подобранной к первым 30 наблюдениям.
Задайте наборы индексов, которые разделяют данные на четыре набора:
Длина p = 4 период инициализации для динамического компонента модели
= 30 наблюдений для оценки VAR начальных значений коэффициента
Длина p = 4 период инициализации для динамического компонента байесовской модели VAR
Оставление наблюдения для оценки апостериорной функции
T = size(rmDataTable); n0 = 30; idxpre0 = 1:PriorMdl.P; idxest0 = (idxpre0(end) + 1):(idxpre0(end) + 1 + n0); idxpre1 = (idxest0(end) + 1 - PriorMdl.P):idxest0(end); idxest1 = (idxest0(end) + 1):T; n1 = numel(idxest1);
Получите начальные значения коэффициентов путем подбора модели VAR к первым 34 наблюдениям. Используйте первые четыре наблюдения в качестве предварительной выборки.
Mdl0 = varm(PriorMdl.NumSeries,PriorMdl.P);
EstMdl0 = estimate(Mdl0,rmDataTable{idxest0,seriesnames},'Y0',rmDataTable{idxpre0,seriesnames});
estimate
возвращает объект модели, содержащий оценки коэффициентов AR в матричной форме и константы в векторе. Функции Bayesian VAR требуют начальных значений коэффициентов в векторе. Форматируйте начальные значения коэффициентов.
Coeff0 = [EstMdl0.AR{:} EstMdl0.Constant].'; Coeff0 = Coeff0(:);
Симулируйте 1000 коэффициентов и ковариаций матриц из апостериорного распределения. Задайте оставшиеся наблюдения, из которых можно оценить апостериорные. Инициализируйте модель VAR, задав последние четыре наблюдения в предыдущей выборке оценки в качестве предварительной выборки и задайте вектор начального коэффициента, чтобы инициализировать апостериорную выборку.
rng(1); % For reproducibility [Coeff,Sigma] = simsmooth(PriorMdl,rmDataTable{idxest1,seriesnames},... 'Y0',rmDataTable{idxpre1,seriesnames},'Coeff0',Coeff0);
Coeff
- матрица коэффициентов и Sigma
39 на 1000 массив инновационных ковариационных матриц 3 на 3 на 1000. Оба
Coeff
и Sigma
случайным образом вытягиваются из апостериорного распределения.
Рассмотрим 3-D модель VAR (4) моделирования параметров из апостериорного распределения при наличии отсутствующих значений.
Загрузка и предварительная обработка данных
Загрузите набор макроэкономических данных США. Вычислите уровень инфляции, стабилизируйте ставки безработицы и федеральных фондов и удалите недостающие значения (данные включают только ведущие отсутствующие значения).
load Data_USEconModel seriesnames = ["INFL" "UNRATE" "FEDFUNDS"]; DataTable.INFL = 100*[NaN; price2ret(DataTable.CPIAUCSL)]; DataTable.DUNRATE = [NaN; diff(DataTable.UNRATE)]; DataTable.DFEDFUNDS = [NaN; diff(DataTable.FEDFUNDS)]; seriesnames(2:3) = "D" + seriesnames(2:3); rmDataTable = rmmissing(DataTable);
Создайте предыдущую модель
Создайте слабую сопряженную предшествующую модель. Задайте имена рядов ответов.
numseries = numel(seriesnames);
numlags = 4;
PriorMdl = conjugatebvarm(numseries,numlags,'SeriesNames',seriesnames);
numcoeffseqn = size(PriorMdl.V,1);
PriorMdl.V = 1e4*eye(numcoeffseqn);
Прогнозирование ответов с использованием forecast
Непосредственно прогнозируется два года (восемь четвертей) наблюдений от апостериорного прогнозирующего распределения. forecast
оценивает апостериорное распределение параметров, а затем формирует апостериорное прогнозирующее распределение.
rng(1); % For reproducibility
numperiods = 8;
YF = forecast(PriorMdl,numperiods,rmDataTable{:,seriesnames});
YF
- матрица прогнозируемых ответов 8 на 3.
Постройте график прогнозируемых откликов.
fh = rmDataTable.Time(end) + calquarters(1:8); for j = 1:PriorMdl.NumSeries subplot(3,1,j) plot(rmDataTable.Time(end - 20:end),rmDataTable{end - 20:end,seriesnames(j)},'r',... [rmDataTable.Time(end) fh],[rmDataTable{end,seriesnames(j)}; YF(:,j)],'b'); legend("Observed","Forecasted",'Location','NorthWest') title(seriesnames(j)) end
Прогнозирование ответов с использованием simsmooth
Сконфигурируйте набор данных для получения прогнозов от simsmooth
путем конкатенации numperiods
-by- numseries
timetable отсутствующих значений до конца набора.
fTT = array2timetable(NaN(numperiods,numseries),'RowTimes',fh,... 'VariableNames',seriesnames); frmDataTable = [rmDataTable(:,seriesnames); fTT]; tail(frmDataTable)
ans=8×3 timetable
Time INFL DUNRATE DFEDFUNDS
_____ ____ _______ _________
Q2-09 NaN NaN NaN
Q3-09 NaN NaN NaN
Q4-09 NaN NaN NaN
Q1-10 NaN NaN NaN
Q2-10 NaN NaN NaN
Q3-10 NaN NaN NaN
Q4-10 NaN NaN NaN
Q1-11 NaN NaN NaN
Прогнозируйте модель VAR с помощью simsmooth
. Как forecast
, simsmooth
оценивает апостериорное распределение, поэтому это требует предыдущей модели и данных. Укажите данные, содержащие конечные NaN
с.
[~,~,~,YMean] = simsmooth(PriorMdl,frmDataTable);
YMean
почти равен frmDataTable
, за этими исключениями:
YMean
исключает строки, соответствующие периоду предварительного образца frmDataTable(1:4,:)
.
Если frmDataTable(
j
,
k
)
является NaN
, YMean(
j
,
k
)
- среднее значение апостериорного прогнозирующего распределения отклика k
во время j
.
Составьте расписание из YMean
.
YMeanTT = array2timetable(YMean,'RowTimes',frmDataTable.Time((PriorMdl.P + 1):end),... 'VariableNames',seriesnames);
Постройте график прогнозируемых откликов.
for j = 1:PriorMdl.NumSeries subplot(3,1,j) plot(YMeanTT.Time((end - 20 - numperiods):(end - numperiods)),YMeanTT{(end - 20 - numperiods):(end - numperiods),j},'r',... YMeanTT.Time((end - numperiods):end),YMeanTT{(end - numperiods):end,j},'b'); legend("Observed","Forecasted",'Location','NorthWest') title(seriesnames(j)) end
Рассмотрим 3-D модель VAR (4) моделирования параметров из апостериорного распределения при наличии отсутствующих значений.
Загрузите набор макроэкономических данных США. Вычислите уровень инфляции, стабилизируйте ставки безработицы и федеральных фондов и удалите недостающие значения (данные включают только ведущие отсутствующие значения).
load Data_USEconModel seriesnames = ["INFL" "UNRATE" "FEDFUNDS"]; DataTable.INFL = 100*[NaN; price2ret(DataTable.CPIAUCSL)]; DataTable.DUNRATE = [NaN; diff(DataTable.UNRATE)]; DataTable.DFEDFUNDS = [NaN; diff(DataTable.FEDFUNDS)]; seriesnames(2:3) = "D" + seriesnames(2:3); rmDataTable = rmmissing(DataTable);
Создайте слабую сопряженную предшествующую модель. Задайте имена рядов ответов.
numseries = numel(seriesnames);
numlags = 4;
PriorMdl = conjugatebvarm(numseries,numlags,'SeriesNames',seriesnames);
numcoeffseqn = size(PriorMdl.V,1);
PriorMdl.V = 1e4*eye(numcoeffseqn);
Условное прогнозирование происходит, когда значения отклика известны или гипотезированы в прогнозном горизонте, и неизвестные значения прогнозируются обусловленными известными значениями. Предположим, что уровень безработицы меняется (DUNRATE
) остается на одной процентной точке через двухлетний прогнозный горизонт.
Сконфигурируйте набор данных для получения прогнозов от simsmooth
путем конкатенации numperiods
-by- numseries
timetable отсутствующих значений до конца набора. Для изменения уровня безработицы замените отсутствующие значения вектором с таковыми.
rng(1); % For reproducibility numperiods = 8; fh = rmDataTable.Time(end) + calquarters(1:8); fTT = array2timetable(NaN(numperiods,numseries),'RowTimes',fh,... 'VariableNames',seriesnames); frmDataTable = [rmDataTable(:,seriesnames); fTT]; frmDataTable.DUNRATE((end - numperiods + 1):end) = ones(numperiods,1); tail(frmDataTable)
ans=8×3 timetable
Time INFL DUNRATE DFEDFUNDS
_____ ____ _______ _________
Q2-09 NaN 1 NaN
Q3-09 NaN 1 NaN
Q4-09 NaN 1 NaN
Q1-10 NaN 1 NaN
Q2-10 NaN 1 NaN
Q3-10 NaN 1 NaN
Q4-10 NaN 1 NaN
Q1-11 NaN 1 NaN
Получить прогнозы по уровню инфляции и федеральным фондам изменить ставки, учитывая, что изменение уровня безработицы является единичным для всего горизонта.
[~,~,~,YMean] = simsmooth(PriorMdl,frmDataTable);
YMean
почти равен frmDataTable
, за этими исключениями:
YMean
исключает строки, соответствующие периоду предварительного образца frmDataTable(1:4,:)
.
Если frmDataTable(
j
,
k
)
является NaN
, YMean(
j
,
k
)
- среднее значение апостериорного прогнозирующего распределения отклика k
во время j
.
Составьте расписание из YMean
.
YMeanTT = array2timetable(YMean,'RowTimes',frmDataTable.Time((PriorMdl.P + 1):end),... 'VariableNames',seriesnames);
Постройте график прогнозируемых откликов.
for j = 1:PriorMdl.NumSeries subplot(3,1,j) plot(YMeanTT.Time((end - 20 - numperiods):(end - numperiods)),YMeanTT{(end - 20 - numperiods):(end - numperiods),j},'r',... YMeanTT.Time((end - numperiods):end),YMeanTT{(end - numperiods):end,j},'b'); legend("Observed","Forecasted",'Location','NorthWest') title(seriesnames(j)) end
Рассмотрим 2-D модель VARX (1) для реального ВВП США (RGDP
) и инвестиции (GCE
) тарифы, которые лечат личное потребление (PCEC
) скорость как экзогенная:
Для всех , - серия независимых 2-D нормальных инноваций со средним значением 0 и ковариацией . Примите следующие предыдущие распределения:
, где M является матрицей средств 4 на 2 и - матрица шкалы между коэффициентами 4 на 4. Эквивалентно, .
где И - матрица шкалы 2 на 2, - степени свободы.
Загрузите набор макроэкономических данных США. Вычислите реальный показатель ВВП, инвестиций и личного потребления. Удалите все отсутствующие значения из получившейся серии.
load Data_USEconModel DataTable.RGDP = DataTable.GDP./DataTable.GDPDEF; seriesnames = ["PCEC"; "RGDP"; "GCE"]; rates = varfun(@price2ret,DataTable,'InputVariables',seriesnames); rates = rmmissing(rates); rates.Properties.VariableNames = seriesnames;
Создайте сопряженную предшествующую модель для параметров модели 2-D VARX (1).
numseries = 2; numlags = 1; numpredictors = 1; PriorMdl = conjugatebvarm(numseries,numlags,'NumPredictors',numpredictors,... 'SeriesNames',seriesnames(2:end));
Создайте наборы индексов, которые разделяют данные на оценочные и прогнозные выборки. Укажите горизонт прогноза на два года.
T = size(rates,1);
numperiods = 8;
idxest = 1:(T - numperiods); % Includes presample
idxf = (T - numperiods + 1):T;
idxtot = [idxest idxf];
Симуляция сглаживает прогнозы путем ввода отсутствующих значений. Поэтому создайте набор данных, который содержит отсутствующие значения для откликов в горизонте прогноза.
missingrates = rates; missingrates{idxf,PriorMdl.SeriesNames} = nan(numperiods,PriorMdl.NumSeries);
Прогнозные отклики в прогнозном горизонте. Задайте наблюдения presample и данные экзогенного предиктора. Верните стандартные отклонения апостериорного прогнозирующего распределения.
rng(1) % For reproducibility [~,~,~,YMean,YStd] = simsmooth(PriorMdl,missingrates{:,PriorMdl.SeriesNames},... 'X',missingrates{:,seriesnames(1)});
Составьте расписание из YMean
.
YMeanTT = array2timetable(YMean,'RowTimes',rates.Time((PriorMdl.P + 1):end),... 'VariableNames',PriorMdl.SeriesNames);
Постройте график прогнозируемых откликов.
for j = 1:PriorMdl.NumSeries subplot(PriorMdl.NumSeries,1,j) plot(rates.Time((end - 20):end),rates{(end - 20):end,PriorMdl.SeriesNames(j)},'r',... YMeanTT.Time((end - numperiods):end),YMeanTT{(end - numperiods):end,PriorMdl.SeriesNames(j)},'b'); legend("Observed","Forecasted",'Location','NorthWest') title(PriorMdl.SeriesNames(j)) end
PriorMdl
- Предыдущая байесовская модель VARconjugatebvarm
объект модели | semiconjugatebvarm
объект модели | diffusebvarm
объект модели | normalbvarm
объект моделиПредыдущая модель Bayesian VAR, заданная как объект модели в этой таблице.
Объект модели | Описание |
---|---|
conjugatebvarm | Зависимая, матричная-нормальная-обратная-Wishart сопряженная модель, возвращенная bayesvarm , conjugatebvarm , или estimate |
semiconjugatebvarm | Независимая, нормальная-обратная-Wishart полусредняя предыдущая модель, возвращенная bayesvarm или semiconjugatebvarm |
diffusebvarm | Диффузная предыдущая модель, возвращенная bayesvarm или diffusebvarm |
normalbvarm | Нормальная сопряженная модель с фиксированной инновационной ковариационной матрицей, возвращенной bayesvarm , normalbvarm , или estimate |
Y
- Наблюдаемый многомерный ряд откликаНаблюдался многомерный ряд отклика, на который simsmooth
подходит для модели, заданной как numobs
-by- numseries
числовая матрица.
numobs
- размер выборки. numseries
- количество переменных отклика (PriorMdl.NumSeries
).
Строки соответствуют наблюдениям, а последняя строка содержит последнее наблюдение. Столбцы соответствуют отдельным переменным отклика.
NaN
значения в Y
указать отсутствующие наблюдения. simsmooth
заменяет отсутствующие значения без предварительной выборки на условные (см. NaNDraws
) в рамках процесса отбора проб.
Y
представляет продолжение предизмерительного ряда откликов Y0
.
Совет
Получение numperiods
не выборочные прогнозы, конкатенация numperiods
-by- numseries
матрица NaN
с до конца Y
. simsmooth
возвращает прогнозы и стандартные отклонения в соответствующих элементах YMean
и YStd
, соответственно. Для примера:
numperiods = 8; Y = [Y; NaN(numperiods,PriorMdl.NumSeries)];
Для получения прогнозов, обусловленных наблюдаемыми (или гипотезированными) значениями в прогнозном горизонте, соедините numperiods
-by- numseries
матрица NaN
s и наблюдаемые или гипотезированные значения до конца Y
. Для примера в 2-D системе получите одноэтапный прогноз переменной отклика 1, учитывая, что переменная отклика 2 равна 0,5, путем определения
Y = [Y; [NaN 0.5]];
Типы данных: double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'Y0',Y0,'X',X
задает предварительные данные отклика Y0
для инициализации модели VAR для апостериорной симуляции и данных предиктора X
для компонента экзогенной регрессии.'Y0'
- Предварительный образец данных откликаПредварительный образец данных отклика для инициализации модели VAR для симуляции, заданный как разделенная разделенными запятой парами, состоящая из 'Y0'
и a numpreobs
-by- numseries
числовая матрица. numpreobs
- количество предварительных наблюдений.
Строки соответствуют предварительным образцам наблюдений, а последняя строка содержит последнее наблюдение. Y0
должно иметь по крайней мере PriorMdl.P
строки. Если вы поставляете больше строк, чем нужно, simsmooth
использует последние PriorMdl.P
только наблюдения.
Столбцы должны соответствовать ряду ответов в Y
.
По умолчанию, simsmooth
использует Y(1:PriorMdl.P,:)
в качестве предварительного примера наблюдений, а затем оценивает апостериорное использование Y((PriorMdl.P + 1):end,:)
. Это действие уменьшает эффективный размер выборки. Количество строк выходов YMean
и YStd
является size(Y,1) – PriorMdl.P
. Если Y0
содержит, по крайней мере, один NaN
, simsmooth
выдает ошибку.
Типы данных: double
'X'
- Данные предиктораДанные предиктора для компонента экзогенной регрессии в модели, заданные как разделенная разделенными запятой парами, состоящая из 'X'
и a numobs
-by- PriorMdl.NumPredictors
числовая матрица.
Строки соответствуют наблюдениям, а последняя строка содержит последнее наблюдение. simsmooth
не использует регрессионный компонент в предварительном образце периода. X
должно иметь, по крайней мере, столько наблюдений, сколько наблюдений, используемых после периода предварительного образца.
В любом случае, если вы поставляете больше строк, чем необходимо, simsmooth
использует только последние наблюдения.
Столбцы соответствуют отдельным переменным предиктора. Все переменные предиктора присутствуют в регрессионном компоненте каждого уравнения отклика.
Если X
содержит, по крайней мере, один NaN
, simsmooth
выдает ошибку.
Типы данных: double
'NumDraws'
- Количество случайных рисок1
(по умолчанию) | положительное целое числоКоличество случайных рисований из распределений, заданное как разделенная разделенными запятой парами, состоящая из 'NumDraws'
и положительное целое число.
Пример: 'NumDraws',1e7
Типы данных: double
'BurnIn'
- Количество розыгрышей для удаления из начала выборки0
(по умолчанию) | неотрицательной скаляромКоличество розыгрышей для удаления из начала выборки для уменьшения переходных эффектов, заданное как разделенная разделенными запятой парами, состоящая из 'BurnIn'
и неотрицательный скаляр. Для получения дополнительной информации о том, как simsmooth
уменьшает полную выборку, см. Алгоритмы.
Совет
Чтобы помочь вам указать соответствующий размер периода горения:
Определите степень переходного поведения в выборке путем определения 'BurnIn',0
.
Симулируйте несколько тысяч наблюдений при помощи simsmooth
.
Нарисуйте графики трассировки.
Пример: 'BurnIn',0
Типы данных: double
'Thin'
- Скорректированный множитель размера выборки1
(по умолчанию) | положительное целое числоСкорректированный множитель размера выборки, заданный как разделенная разделенными запятой парами, состоящая из 'Thin'
и положительное целое число.
Фактический размер выборки BurnIn
+ NumDraws
*Thin
. После отбрасывания горения, simsmooth
отбрасывает каждый Thin
– 1
рисует, а затем сохраняет следующий розыгрыш. Для получения дополнительной информации о том, как simsmooth
уменьшает полную выборку, см. Алгоритмы.
Совет
Чтобы уменьшить потенциальную большую последовательную корреляцию в выборке или уменьшить потребление памяти рисунков, сохраненных в PriorMdl
, задайте большое значение для Thin
.
Пример: 'Thin',5
Типы данных: double
'Coeff0'
- Начальное значение коэффициентов модели VAR для дискретизатора ГиббсаНачальное значение коэффициентов модели VAR для семплера Гиббса, заданное как разделенная разделенными запятой парами, состоящая из 'Coeff0'
и числовой вектор-столбец с (Mdl.NumSeries
) -by* k
- NumDraws
элементы, где
, которое является количеством коэффициентов в уравнении отклика. Для получения дополнительной информации о структуре k
= Mdl. NumSeries*Mdl. P + Mdl. IncludeIntercept + Mdl. IncludeTrend + Mdl. NumPredictorsCoeff0
, см. выход CoeffDraws
.
По умолчанию Coeff0
- многомерная оценка методом наименьших квадратов.
Совет
Чтобы задать Coeff0
:
Установите отдельные переменные для начальных значений каждой матрицы коэффициентов и вектора.
Горизонтально конкатенируйте все средства коэффициентов в этом порядке:
Векторизация транспонирования средней матрицы коэффициентов.
Coeff0 = Coeff.'; Coeff0 = Coeff0(:);
Хорошей практикой является запуск simsmooth
несколько раз с различными начальными значениями параметра. Проверьте, что оценки из каждого запуска сходятся к аналогичным значениям.
Типы данных: double
'Sigma0'
- Начальное значение ковариационной матрицы инноваций для семплера ГиббсаНачальное значение ковариационной матрицы инноваций для семплера Гиббса, заданное как разделенная разделенными запятой парами, состоящая из 'Sigma0'
и a PriorMdl.NumSeries
-by- PriorMdl.NumSeries
положительная определенная числовая матрица. По умолчанию Sigma0
- невязка средняя квадратичная невязка из многомерных наименьших квадратов. Строки и столбцы соответствуют инновациям в уравнениях переменных отклика, упорядоченных по Mdl.SeriesNames
.
Совет
Хорошей практикой является запуск simsmooth
несколько раз с различными начальными значениями параметра. Проверьте, что оценки из каждого запуска сходятся к аналогичным значениям.
Типы данных: double
CoeffDraws
- Моделируемые коэффициенты модели VARМоделируемые коэффициенты модели VAR, возвращенные как (PriorMdl.NumSeries
) -by* k
- NumDraws
числовая матрица, где
, которое является количеством коэффициентов в уравнении отклика.k
= PriorMdl. NumSeries*PriorMdl. P + PriorMdl. IncludeIntercept + PriorMdl. IncludeTrend + PriorMdl. NumPredictors
Каждый столбец является последовательным рисунком (вектор коэффициентов) из апостериорного распределения.
Для рисования
, j
CoeffDraws (1
соответствует всем коэффициентам в уравнении переменной отклика : k
, j
)PriorMdl.SeriesNames(1)
, Коефф (
соответствует всем коэффициентам в уравнении переменной отклика (k
+ 1): (2* k
), j
)PriorMdl.SeriesNames(2)
и так далее. Для набора индексов, соответствующих уравнению:
Элементы 1
через PriorMdl.NumSeries
соответствуют задержке 1 AR коэффициентов переменных отклика, упорядоченных по PriorMdl.SeriesNames
.
Элементы PriorMdl.NumSeries + 1
через 2*PriorMdl.NumSeries
соответствуют задержке 2 коэффициентов AR переменных отклика, упорядоченных по PriorMdl.SeriesNames
.
В целом элементы (
через q
– 1) *PriorMdl. NumSeries + 1
соответствуют задержке q
*PriorMdl. NumSeries
Коэффициенты AR переменных отклика, упорядоченные по q
PriorMdl.SeriesNames
.
Если PriorMdl.IncludeConstant
является true
, элемент PriorMdl.NumSeries*PriorMdl.P + 1
является моделью постоянной.
Если Mdl.IncludeTrend
является true
, элемент PriorMdl.NumSeries*PriorMdl.P + 2
- линейный коэффициент тренда времени.
Если PriorMdl.NumPredictors
> 0, элементы PriorMdl.NumSeries*PriorMdl.P + 3
через
составить вектор коэффициентов регрессии экзогенных переменных.k
Этот рисунок показывает структуру CoeffDraws
для 2-D модели VAR (3), которая содержит постоянный вектор и четыре экзогенных предиктора.(:, j
)
где
ϕ q jk является элементом (j, k) матрицы коэффициентов AR q задержки.
c j является моделью, константой в уравнении переменной j отклика.
<reservedrangesplaceholder4> <reservedrangesplaceholder3> <reservedrangesplaceholder2> - коэффициент регрессии внешней переменной u в уравнении переменной ответа j.
SigmaDraws
- Моделируемые ковариационные матрицы инновацийМоделируемые инновации ковариационные матрицы, возвращенные как PriorMdl.NumSeries
-by- PriorMdl.NumSeries
-by- NumDraws
массив положительно определенных числовых матриц.
Каждая страница является последовательным получением (ковариацией) от апостериорного распределения. Строки и столбцы соответствуют инновациям в уравнениях переменных отклика, упорядоченных по PriorMdl.SeriesNames
.
Если PriorMdl
является normalbvarm
объект, все ковариации в SigmaDraws
равны PriorMdl.Covariance
.
NaNDraws
- Расчеты по отсутствующим данным откликаВменения для отсутствующих данных отклика, возвращенные как numNaNs
-by- NumDraws
числовая матрица, где numNaNs = sum(isNaN(Y))
, количество NaN
s в данных отклика.
Каждый столбец является последовательным ничьим (вектором выражений отклика) из апостериорного прогнозирующего распределения.
Каждая строка соответствует NaN
в Y
. simsmooth
определяет порядок строк при помощи столбцового поиска. Например, предположим Y
является следующей матрицей.
Y = [ 1 NaN;... NaN 2 ;... NaN 5 ;... 7 8];
NaNDraws
является 3-байт- NumDraws
матрица. Для рисования j
, NaNDraws (1, j
)
содержит вмененное значение переменной отклика PriorMdl.SeriesNames(1)
в 2 времени NaNDraws (2, j
)
содержит вмененное значение переменной отклика PriorMdl.SeriesNames(1)
в момент 3 и NaNDraws (3, j
)
содержит вмененное значение переменной отклика PriorMdl.SeriesNames(2)
в момент времени 1.
YMean
- Дополненные данные откликаДополненные данные отклика, возвращенные как numobs
-by- PriorMdl.NumSeries
числовая матрица. YMean
равен не предварительному фрагменту данных отклика Y
, но simsmooth
заменяет каждый NaN
с соответствующим средним значением апостериорного прогнозирующего распределения (YMean
содержит ноль отсутствующих значений).
YStd
- Стандартные отклонения апостериорного прогнозирующего распределенияСтандартные отклонения апостериорного прогнозирующего распределения вмененных ответов, возвращенные как numobs
-by- PriorMdl.NumSeries
числовая матрица. Размерности YStd
и YMean
соответствуют.
Отсутствующие значения в данных отклика Y
, которые соответствуют вмененным значениям в YMean
, иметь ненулевое стандартное отклонение. Стандартные отклонения, соответствующие немиссирующим данным отклика, равны 0.
A Bayesian VAR model обрабатывает все коэффициенты и ковариационную матрицу инноваций как случайные переменные в m -мерной, стационарной модели VARX (p). Модель имеет одну из трех форм, описанных в этой таблице.
Модель | Уравнение |
---|---|
VAR (p) редуцированной формы в обозначении разностного уравнения |
|
Многомерная регрессия |
|
Матричная регрессия |
|
Для каждого временного t = 1,..., T:
yt - m -мерный вектор наблюдаемой отклика, где m = numseries
.
Φ1,..., - p являются m -by m матрицами коэффициентов AR лагов с 1 по p, где p = numlags
.
c - вектор m -by-1 констант модели, если IncludeConstant
является true
.
δ - вектор m -by-1 коэффициентов линейного временного тренда, если IncludeTrend
является true
.
Β - m -by - r матрица коэффициентов регрессии вектора r -by - 1 наблюдаемых экзогенных предикторов x t, где r = NumPredictors
. Все переменные предиктора появляются в каждом уравнении.
который является вектором 1-by- (mp + r + 2), и Z t является m -by- m (mp + r + 2) блочной диагональной матрицей
где 0 z является 1-бай- (mp + r + 2) вектором нулей.
, которая является (mp + r + 2) -by m случайной матрицей коэффициентов, и m (mp + r + 2) -by-1 вектор λ = vec (
εt является m-на-1 вектором случайных, последовательно некоррелированных, многомерных нормальных инноваций с нулевым вектором для среднего и m -by- m матрицы Это предположение подразумевает, что вероятность данных является
где f m - размерная многомерная нормальная плотность со средним <reservedrangesplaceholder3> <reservedrangesplaceholder2> Λ и ковариацией Σ, оценен в <reservedrangesplaceholder1> <reservedrangesplaceholder0>.
Прежде, чем рассмотреть данные, Вы налагаете joint prior distribution предположение на (Λ,Σ), которым управляет распределение π (Λ,Σ). В байесовском анализе распределение параметров обновляется информацией о параметрах, полученных из вероятности данных. Результатом является joint posterior distribution π (Λ,Σ|<reservedrangesplaceholder2>,<reservedrangesplaceholder1>,<reservedrangesplaceholder0>0), где:
Y - T матрица m, содержащая весь ряд ответов {y t}, t = 1,..., T.
X - T матрица m, содержащая весь экзогенный ряд {x t}, t = 1,..., T.
Y 0 является p -by - m матрицей предварительных образцов данных, используемых для инициализации модели VAR для оценки.
posterior predictive distribution следующего ВАРА Bayesian (<reservedrangesplaceholder13>) модель π (Yf | Y, X) распределение следующих τ будущих переменных ответа после заключительного наблюдения в выборке оценки Yf = [<reservedrangesplaceholder6> <reservedrangesplaceholder5> +1, <reservedrangesplaceholder4> <reservedrangesplaceholder3> +2..., <reservedrangesplaceholder2> <reservedrangesplaceholder1> + τ], учитывая следующее, маргинализованный по Λ и Σ:
Предварительная выборка и оценка данных отклика на выборку Y
Коэффициенты И
Инновации ковариации матрица
Оценка и будущая выборка экзогенных данных X
Символически,
Это Gibbs sampler with Bayesian data augmentation является методом выборки Монте-Карло цепи Маркова, который берётся из апостериорного распределения параметров и незабываемых данных отклика, учитывая наблюдаемые данные.
Рассмотрим следующие наборы индексов:
I = {(i, j) | i = 1,..., m + τ, j = 1,..., m + τ}, вселенная, содержащая все пары индексов (i, j) данных, не являющихся предварительными образцами, и горизонт прогноза. Y (I) представляет все данные отклика, не являющиеся предварительными образцами, включая любые заполнители (NaN
значения) для отсутствующих наблюдений и ненаблюдаемых значений в прогнозном горизонте.
U = {(i, j) ∈ <reservedrangesplaceholder6> | Y (i, j) отсутствует или ненаблюдаемый}, набор соответствия пар индекса пропавшим без вести или ненаблюдаемым данным ответа. Y (U) является набором заполнителей, и Y (Uc) - набор наблюдаемых данных.
simsmooth
моделирует из апостериорного распределения отсутствующих данных отклика, коэффициентов и ковариационной матрицы инноваций следуя этому пробоотборнику Гиббса.
Создайте модель пространства состояний без ошибок наблюдения путем применения заданной структуры VAR (p) к уравнениям состояния. Примените начальные значения параметров(0) и(0) (Coeff0
и Sigma0
). Получившаяся модель является условной апостериорной π прогнозирующего распределения (Y (U) |Λ(0),Σ(0), Y (Uc), X).
Во время итерации j:
Симулируйте отсутствующие данные Y (U)(j) от π (Y (U) |(j-1),Σ(j-1), Y (Uc), X). Чтобы выполнить это действие, simsmooth
использует симуляцию модели пространства состояний более гладкую (см. simsmooth
функция ssm
объект модели). simsmooth
хранит Y (U)(j) в выход NaNDraws
.
Составьте дополненный набор данных Y (I)(j) = Y (<reservedrangesplaceholder0>)(j) ∪ Y (Uc).
Нарисуйте коэффициенты(j) и инновационную ковариационную матрицу(j) из условной следующей модели Bayesian VAR с увеличенными данными π (Λ,Σ | Y (<reservedrangesplaceholder0>)(j), X). simsmooth
хранит(j) и(j) в выходах CoeffDraws
и SigmaDraws
, соответственно.
Среднее и стандартное отклонение следующего прогнозирующего распределения π (Y (<reservedrangesplaceholder1>) | Λ,Σ, Y (Uc), X) - среднее и стандартное отклонение ряда розыгрышей {Y (U)(j)}. simsmooth
сохраняет статистику в выходах YMean
и YStd
.
После удаления периода горения (Burnin
) и утончение выборки (Thin
), simsmooth
сохраняет оставшийся набор рисований и вычисляет из него апостериорную статистику.
Симуляция Монте-Карло подвержена изменениям. Если simsmooth
использует симуляцию Монте-Карло, тогда оценки и выводы могут варьироваться при вызове simsmooth
несколько раз при, казалось бы, эквивалентных условиях. Чтобы воспроизвести результаты оценки, установите начальное число случайных чисел при помощи rng
перед вызовом simsmooth
.
Этот рисунок показывает, как simsmooth
уменьшает выборку при помощи значений NumDraws
, Thin
, и BurnIn
. Прямоугольники представляют последовательные вытяжки из распределения. simsmooth
удаляет белые прямоугольники из выборки. Оставшиеся NumDraws
чёрные прямоугольники составляют выборку.
simsmooth
не возвращает начальные значения по умолчанию, которые она генерирует.
[1] Литтерман, Роберт Б. «Прогнозирование с байесовскими векторными авторегрессиями: пятилетний опыт». Журнал деловой и экономической статистики 4, № 1 (январь 1986 года): 25-38. https://doi.org/10.2307/1391384.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.