Моделирование более плавной модели авторегрессии байесовского вектора (VAR)
simsmooth хорошо подходит для расширенных приложений, таких как условное прогнозирование вне выборки из заднего прогностического распределения байесовской модели VAR (p), прогнозирование модели VARX (p), вменение отсутствующего значения и оценка параметра при наличии отсутствующих значений. Также,simsmooth позволяет настроить пробоотборник Гиббса для прогнозирования выборок. Чтобы оценить прогнозы вне выборки из байесовской модели VAR (p), см.forecast.
[ возвращает 1000 случайных построений векторов коэффициентов λ
CoeffDraws,SigmaDraws] = simsmooth(PriorMdl,Y)Coeff и новшества ковариантными матрицами Λ 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 на 5 000. Оба 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
Оставшиеся наблюдения n1 для оценки заднего
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 в матричной форме и константы в векторе. Байесовские функции 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 является матрицей коэффициентов 39 на 1000 и Sigma множество инновационных ковариационных матриц 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около-numseries расписание отсутствующих значений до конца набора.
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 оценивает апостериорное распределение, поэтому для него требуется предыдущая модель и данные. Укажите данные, содержащие конец NaNs.
[~,~,~,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около-numseries расписание отсутствующих значений до конца набора. Для изменения уровня безработицы замените недостающие значения вектором.
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 и V, является матрицей масштаба среди коэффициента 4 на 4. Эквивалентно, , Σ⊗ V).
), где Λ - матрица шкалы 2 на 2, а start- степени свободы.
Загрузить набор макроэкономических данных США. Вычислите реальные ряды показателей ВВП, инвестиций и личного потребления. Удалите все отсутствующие значения из результирующего ряда.
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);Отклики прогноза в горизонте прогноза. Укажите предварительные наблюдения и данные экзогенного предиктора. Вернуть стандартные отклонения заднего прогностического распределения.
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 объект моделиПредыдущая байесовская модель VAR, заданная как объект модели в этой таблице.
| Объект модели | Описание |
|---|---|
conjugatebvarm | Зависимая, матрица-нормаль-обратная-сопряженная модель Вишарта, возвращаемая bayesvarm, conjugatebvarm, или estimate |
semiconjugatebvarm | Независимая, нормальная, обратная, полуконъюгатная предыдущая модель Вишарта, возвращенная bayesvarm или semiconjugatebvarm |
diffusebvarm | Диффузная предыдущая модель, возвращенная bayesvarm или diffusebvarm |
normalbvarm | Нормальная сопряженная модель с фиксированной ковариационной матрицей инноваций, возвращаемой bayesvarm, normalbvarm, или estimate |
Y - Наблюдаемый многомерный ряд ответовНаблюдаемые многомерные серии ответов, на которые simsmooth подходит для модели, указанной как numobsоколо-numseries числовая матрица.
numobs - размер выборки. numseries - количество переменных ответа (PriorMdl.NumSeries).
Строки соответствуют наблюдениям, а последняя строка содержит последнее наблюдение. Столбцы соответствуют отдельным переменным ответа.
NaN значения в Y указать отсутствующие наблюдения. simsmooth заменяет отсутствующие значения без предварительной выборки вменением (см. NaNDraws) в рамках процесса отбора проб.
Y представляет собой продолжение серии предварительных ответов Y0.
Совет
Получить numperiods внеплановые прогнозы, конкатенация numperiodsоколо-numseries матрица NaNs до конца Y. simsmooth возвращает прогнозы и стандартные отклонения в соответствующих элементах YMean и YStdсоответственно. Например:
numperiods = 8; Y = [Y; NaN(numperiods,PriorMdl.NumSeries)];
Для получения прогнозов, обусловленных наблюдаемыми (или предполагаемыми) значениями в горизонте прогноза, необходимо объединить numperiodsоколо-numseries матрица NaNs и наблюдаемые или предполагаемые значения до конца 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' и numpreobsоколо-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' и numobsоколо-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*около-kNumDraws элементы, где , которое является числом коэффициентов в уравнении отклика. Для получения подробной информации о структуре k = Mdl.NumSeries*Mdl.P + Mdl.IncludeIntercept + Mdl.IncludeTrend + Mdl.NumPredictorsCoeff0, см. выходные данные CoeffDraws.
По умолчанию Coeff0 - многомерная оценка наименьших квадратов.
Совет
Определить Coeff0:
Задайте отдельные переменные для начальных значений каждой матрицы коэффициентов и вектора.
Горизонтально соединить все коэффициенты означает в следующем порядке:
Векторизируйте транспонирование матрицы среднего коэффициента.
Coeff0 = Coeff.'; Coeff0 = Coeff0(:);
Хорошей практикой является запуск simsmooth несколько раз с различными начальными значениями параметров. Убедитесь, что оценки из каждого прогона сходятся к аналогичным значениям.
Типы данных: double
'Sigma0' - Начальное значение ковариационной матрицы инноваций для семплера ГиббсаНачальное значение новой ковариационной матрицы для семплера Гиббса, указанной как пара, разделенная запятыми, состоящая из 'Sigma0' и PriorMdl.NumSeriesоколо-PriorMdl.NumSeries положительная определенная числовая матрица. По умолчанию Sigma0 - остаточная среднеквадратичная ошибка из многомерных наименьших квадратов. Строки и столбцы соответствуют нововведениям в уравнениях переменных ответа, упорядоченных по Mdl.SeriesNames.
Совет
Хорошей практикой является запуск simsmooth несколько раз с различными начальными значениями параметров. Убедитесь, что оценки из каждого прогона сходятся к аналогичным значениям.
Типы данных: double
CoeffDraws - Смоделированные коэффициенты модели VARСмоделированные коэффициенты модели VAR, возвращенные как (PriorMdl.NumSeries*около-kNumDraws числовая матрица, где , которое является числом коэффициентов в уравнении отклика.k = PriorMdl.NumSeries*PriorMdl.P + PriorMdl.IncludeIntercept + PriorMdl.IncludeTrend + PriorMdl.NumPredictors
Каждый столбец представляет собой последовательное вытягивание (вектор коэффициентов) из заднего распределения.
Для розыгрыша , jCoeffDraws(1: соответствует всем коэффициентам в уравнении переменной отклика k,j)PriorMdl.SeriesNames(1), Coeff(( соответствует всем коэффициентам в уравнении переменной отклика k + 1):(2*k),j)PriorMdl.SeriesNames(2)и так далее. Для набора индексов, соответствующих уравнению:
Элементы 1 через PriorMdl.NumSeries соответствуют коэффициентам AR с запаздыванием 1 для переменных ответа, упорядоченных по PriorMdl.SeriesNames.
Элементы PriorMdl.NumSeries + 1 через 2*PriorMdl.NumSeries соответствуют коэффициентам AR с запаздыванием 2 для переменных ответа, упорядоченных по PriorMdl.SeriesNames.
В общем, элементы ( через q – 1)*PriorMdl.NumSeries + 1 соответствуют запаздыванию q*PriorMdl.NumSeries Коэффициенты AR переменных ответа упорядочены по qPriorMdl.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) матрицы коэффициентов lag q AR.
cj - константа модели в уравнении переменной отклика j.
Bju - коэффициент регрессии экзогенной переменной u в уравнении переменной ответа j.
SigmaDraws - Смоделированные ковариационные матрицы инновацийСмоделированные инновации ковариационные матрицы, возвращенные как PriorMdl.NumSeriesоколо-PriorMdl.NumSeriesоколо-NumDraws массив положительных определенных числовых матриц.
Каждая страница является последовательным розыгрышем (ковариацией) из заднего распределения. Строки и столбцы соответствуют нововведениям в уравнениях переменных ответа, упорядоченных по PriorMdl.SeriesNames.
Если PriorMdl является normalbvarm объект, все ковариации в SigmaDraws равны PriorMdl.Covariance.
NaNDraws - Расчетные значения для отсутствующих данных ответаВменения для отсутствующих данных ответа, возвращенных как numNaNsоколо-NumDraws числовая матрица, где numNaNs = sum(isNaN(Y)), количество NaNs в данных ответа.
Каждый столбец представляет собой последовательное вытягивание (вектор вменений ответа) из заднего прогностического распределения.
Каждая строка соответствует NaN в Y. simsmooth определяет порядок строк с помощью поиска по столбцам. Например, предположим Y является следующей матрицей.
Y = [ 1 NaN;... NaN 2 ;... NaN 5 ;... 7 8];
NaNDraws является 3-by-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около-PriorMdl.NumSeries числовая матрица. YMean равен части данных ответа, не относящейся к предварительной выборке Y, но simsmooth заменяет каждый NaN с соответствующим средним задним прогностическим распределением (YMean содержит ноль отсутствующих значений).
YStd - Стандартные отклонения заднего прогностического распределенияСтандартные отклонения заднего прогностического распределения вмененных ответов, возвращенные как numobsоколо-PriorMdl.NumSeries числовая матрица. Размеры YStd и YMean соответствуют.
Отсутствующие значения в данных ответа Y, которые соответствуют вмененным значениям в YMean, имеют ненулевое стандартное отклонение. Стандартные отклонения, соответствующие отсутствующим данным ответа, равны 0.
Байесовская модель VAR рассматривает все коэффициенты и инновационную ковариационную матрицу как случайные величины в m-мерной стационарной модели VARX (p). Модель имеет одну из трех форм, описанных в этой таблице.
| Модель | Уравнение |
|---|---|
| VAR (p) редуцированной формы в нотации разностного уравнения |
+ δt + Βxt + αt. |
| Многомерная регрессия |
αt. |
| Регрессия матрицы |
|
Для каждого времени t = 1,...,T:
yt - m-мерный наблюдаемый вектор отклика, где m = numseries.
Φ1,...,Φp - матрицы коэффициентов m-by-m AR лагов 1-p, где p =numlags.
c - вектор m-by-1 констант модели, если IncludeConstant является true.
δ - вектор m-на-1 коэффициентов линейного тренда времени, если IncludeTrend является true.
Β - матрица коэффициентов регрессии вектора r-by-1 наблюдаемых экзогенных предикторов xt, где r = NumPredictors. Все переменные предиктора появляются в каждом уравнении.
, который является вектором 1-by- (mp + r + 2), а Zt является диагональной матрицей m-by-m (mp + r + 2)
где 0z - 1-по- (мп + r + 2) вектор нулей.
′, которая является случайной матрицей коэффициентов (mp + r + 2) -by-m, а m (mp + r + 2) -by-1 вектором λ = vec (Λ).
δ t - вектор m-на-1 случайных, последовательно некоррелированных, многомерных нормальных нововведений с нулевым вектором для среднего и матрицей m-на-м для ковариации. Это предположение подразумевает, что вероятность данных
zt),
где f - m-мерная многовариантная нормальная плотность со средним значением ztΛ и ковариацией
Прежде, чем рассмотреть данные, Вы налагаете совместное предшествующее предположение распределения на (Λ,Σ), которым управляет распределение π (Λ,Σ). В байесовском анализе распределение параметров обновляется информацией о параметрах, полученных из правдоподобия данных. В результате получается совместное заднее распределение λ (Λ, Λ 'Y, X, Y0), где:
Y представляет собой матрицу T-на-m, содержащую весь ответный ряд {yt}, t = 1,...,T.
X представляет собой матрицу T-на-m, содержащую весь экзогенный ряд {xt}, t = 1,...,T.
Y0 является p-by-m матрицей предварительных данных, используемых для инициализации модели VAR для оценки.
Апостериорное прогностическое распределение апостериорной байесовской модели VAR (p) δ (Yf 'Y, X) - это распределение следующих δ будущих переменных ответа после окончательного наблюдения в оценочной выборке Yf = [yT + 1, yT + 2,..., yT +
Примерные и оценочные данные отклика Y
Коэффициенты Λ
Новшества ковариантной матрице Λ
Оценка и будущая выборка экзогенных данных X
Символически,
dΛdΣ.
Пробоотборник Гиббса с байесовским увеличением данных представляет собой метод выборки Маркова-Чена Монте-Карло, который основан на заднем распределении параметров и ненаблюдаемых данных ответа с учетом наблюдаемых данных.
Рассмотрим следующие наборы индексов:
I = {(Я, j) | я = 1..., m + τ, j = 1..., m + τ}, вселенная, содержащая все пары индекса (я, j) непредтиповых данных и горизонта прогноза. Y (I) представляет все данные ответа без предварительной выборки, включая любые местозаполнители (NaN значения) для отсутствующих наблюдений и ненаблюдаемых значений в горизонте прогноза.
U = {(i, j) ∈ I | Y (i, j) отсутствует или не наблюдается}, набор пар индексов соответствует отсутствующим или ненаблюдаемым данным ответа. Y (U) - набор местозаполнителей, а Y (Uc) - набор наблюдаемых данных.
simsmooth моделирует от следующего распределения недостающих данных об ответе, коэффициентов и инновационной ковариационной матрицы , X) следующим этот образец Гиббса.
Создайте модель состояния-пространства без ошибок наблюдения, применив указанную структуру 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 (U) (j) ∪ Y (Uc).
Нарисуйте коэффициенты Λ (j) и инновационную ковариационную матрицу Λ (j) из условной задней байесовской модели VAR с дополненными данными λ (Λ, Λ | Y (I) ( j), X).simsmooth сохраняет Λ (j) и Λ (j) в выходахCoeffDraws и SigmaDrawsсоответственно.
Среднее и стандартное отклонение следующего прогнозирующего распределения π (Y (U) | Λ,Σ, 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.