exponenta event banner

simsmooth

Моделирование более плавной модели авторегрессии байесовского вектора (VAR)

Описание

simsmooth хорошо подходит для расширенных приложений, таких как условное прогнозирование вне выборки из заднего прогностического распределения байесовской модели VAR (p), прогнозирование модели VARX (p), вменение отсутствующего значения и оценка параметра при наличии отсутствующих значений. Также,simsmooth позволяет настроить пробоотборник Гиббса для прогнозирования выборок. Чтобы оценить прогнозы вне выборки из байесовской модели VAR (p), см.forecast.

пример

[CoeffDraws,SigmaDraws] = simsmooth(PriorMdl,Y) возвращает 1000 случайных построений векторов коэффициентов λ 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) ставки.

[INFLtUNRATEtFEDFUNDSt]=c+∑j=14Φj[INFLt-jUNRATEt-jFEDFUNDSt-j]+[ε1,tε2,tε3,t].

Для всех t αt - это ряд независимых 3-D нормальных нововведений со средним значением 0 и ковариацией Λ. Предположим слабое конъюгатное предварительное распределение для параметров ([Ф1,..., Φ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);

Несколько серий имеют ведущие 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')

Figure contains an axes. The axes with title Q3-65 Inflation Rate Empirical Distribution contains an object of type histogram.

Рассмотрим модель 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 периода инициализации для динамического компонента модели

  • n0 = 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

Figure contains 3 axes. Axes 1 with title INFL contains 2 objects of type line. These objects represent Observed, Forecasted. Axes 2 with title DUNRATE contains 2 objects of type line. These objects represent Observed, Forecasted. Axes 3 with title DFEDFUNDS contains 2 objects of type line. These objects represent Observed, Forecasted.

Прогнозные ответы с использованием 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

Figure contains 3 axes. Axes 1 with title INFL contains 2 objects of type line. These objects represent Observed, Forecasted. Axes 2 with title DUNRATE contains 2 objects of type line. These objects represent Observed, Forecasted. Axes 3 with title DFEDFUNDS contains 2 objects of type line. These objects represent Observed, Forecasted.

Рассмотрим модель 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

Figure contains 3 axes. Axes 1 with title INFL contains 2 objects of type line. These objects represent Observed, Forecasted. Axes 2 with title DUNRATE contains 2 objects of type line. These objects represent Observed, Forecasted. Axes 3 with title DFEDFUNDS contains 2 objects of type line. These objects represent Observed, Forecasted.

Рассмотрим модель 2-D VARX (1) для реального ВВП США (RGDP) и инвестиции (GCE) ставки, которые лечат личное потребление (PCEC) скорость как экзогенная:

[RGDPtGCEt] =c +Φ [RGDPt-1GCEt-1] +PCECtβ +εt.

Для всех t αt - это ряд независимых 2-D нормальных нововведений со средним значением 0 и ковариацией Λ. Предположим следующие предыдущие распределения:

  • [Φcβ] ∼Ν4×2 (Μ, V, Σ), где M - матрица средств 4 на 2 и V, является матрицей масштаба среди коэффициента 4 на 4. Эквивалентно, vec ([Фсβ] ) |Σ∼Ν8 (vec (Λ), Σ⊗ V).

  • Σ∼InverseWishart (Λ, start), где Λ - матрица шкалы 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

Figure contains 2 axes. Axes 1 with title RGDP contains 2 objects of type line. These objects represent Observed, Forecasted. Axes 2 with title GCE contains 2 objects of type line. These objects represent Observed, Forecasted.

Входные аргументы

свернуть все

Предыдущая байесовская модель VAR, заданная как объект модели в этой таблице.

Объект моделиОписание
conjugatebvarmЗависимая, матрица-нормаль-обратная-сопряженная модель Вишарта, возвращаемая bayesvarm, conjugatebvarm, или estimate
semiconjugatebvarmНезависимая, нормальная, обратная, полуконъюгатная предыдущая модель Вишарта, возвращенная bayesvarm или semiconjugatebvarm
diffusebvarmДиффузная предыдущая модель, возвращенная bayesvarm или diffusebvarm
normalbvarmНормальная сопряженная модель с фиксированной ковариационной матрицей инноваций, возвращаемой bayesvarm, normalbvarm, или estimate

Наблюдаемые многомерные серии ответов, на которые 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 для экзогенного регрессионного компонента.

Предварительный пример данных ответа для инициализации модели 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' и numobsоколо-PriorMdl.NumPredictors числовая матрица.

Строки соответствуют наблюдениям, а последняя строка содержит последнее наблюдение. simsmooth не использует компонент регрессии в предварительном периоде. X должно иметь по крайней мере столько наблюдений, сколько использовалось после периода предварительного отбора.

  • При указании Y0, то X должен иметь по крайней мере numobs строки (см. Y).

  • В противном случае X должен иметь по крайней мере numobsPriorMdl.P для учета удаления предварительного образца.

В любом случае, если указано больше строк, чем необходимо, simsmooth использует только последние наблюдения.

Столбцы соответствуют отдельным переменным предиктора. Все переменные предиктора присутствуют в регрессионной составляющей каждого уравнения ответа.

Если X содержит, по крайней мере, один NaN, simsmooth выдает ошибку.

Типы данных: double

Число случайных вытягиваний из распределений, указанных как пара, разделенная запятыми, состоящая из 'NumDraws' и положительное целое число.

Пример: 'NumDraws',1e7

Типы данных: double

Количество вытягиваний, удаляемых из начала образца для уменьшения переходных эффектов, указанное как пара, разделенная запятыми, состоящая из 'BurnIn' и неотрицательный скаляр. Для получения подробной информации о том, как simsmooth сокращает полную выборку, см. Алгоритмы.

Совет

Чтобы помочь определить соответствующий размер периода записи, выполните следующие действия.

  1. Определите степень переходного поведения в образце, указав 'BurnIn',0.

  2. Моделирование нескольких тысяч наблюдений с помощью simsmooth.

  3. Нарисуйте графики трассировки.

Пример: 'BurnIn',0

Типы данных: double

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

Фактический размер выборки: BurnIn + NumDraws*Thin. После выгорания, simsmooth отбрасывает каждый Thin1 рисует, а затем сохраняет следующий розыгрыш. Дополнительные сведения о том, как simsmooth сокращает полную выборку, см. Алгоритмы.

Совет

Чтобы уменьшить потенциальную большую последовательную корреляцию в выборке или уменьшить потребление памяти для розыгрышей, хранящихся в PriorMdl, укажите большое значение для Thin.

Пример: 'Thin',5

Типы данных: double

Начальное значение коэффициентов модели VAR для дискретизатора Гиббса, указанное как пара, разделенная запятыми, состоящая из 'Coeff0' и вектор числового столбца с (Mdl.NumSeries*kоколо-NumDraws элементы, где k = Mdl.NumSeries*Mdl.P + Mdl.IncludeIntercept + Mdl.IncludeTrend + Mdl.NumPredictors, которое является числом коэффициентов в уравнении отклика. Для получения подробной информации о структуре Coeff0, см. выходные данные CoeffDraws.

По умолчанию Coeff0 - многомерная оценка наименьших квадратов.

Совет

  • Определить Coeff0:

    1. Задайте отдельные переменные для начальных значений каждой матрицы коэффициентов и вектора.

    2. Горизонтально соединить все коэффициенты означает в следующем порядке:

      Coeff=[Φ1Φ2⋯ΦpcδΒ].

    3. Векторизируйте транспонирование матрицы среднего коэффициента.

      Coeff0 = Coeff.';
      Coeff0 = Coeff0(:);

  • Хорошей практикой является запуск simsmooth несколько раз с различными начальными значениями параметров. Убедитесь, что оценки из каждого прогона сходятся к аналогичным значениям.

Типы данных: double

Начальное значение новой ковариационной матрицы для семплера Гиббса, указанной как пара, разделенная запятыми, состоящая из 'Sigma0' и PriorMdl.NumSeriesоколо-PriorMdl.NumSeries положительная определенная числовая матрица. По умолчанию Sigma0 - остаточная среднеквадратичная ошибка из многомерных наименьших квадратов. Строки и столбцы соответствуют нововведениям в уравнениях переменных ответа, упорядоченных по Mdl.SeriesNames.

Совет

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

Типы данных: double

Выходные аргументы

свернуть все

Смоделированные коэффициенты модели VAR, возвращенные как (PriorMdl.NumSeries*kоколо-NumDraws числовая матрица, где k = PriorMdl.NumSeries*PriorMdl.P + PriorMdl.IncludeIntercept + PriorMdl.IncludeTrend + PriorMdl.NumPredictors, которое является числом коэффициентов в уравнении отклика.

Каждый столбец представляет собой последовательное вытягивание (вектор коэффициентов) из заднего распределения.

Для розыгрыша j, CoeffDraws(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 соответствуют запаздыванию q Коэффициенты AR переменных ответа упорядочены по 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(:,j) для модели 2-D VAR (3), которая содержит постоянный вектор и четыре экзогенных предиктора.

[ϕ1,11ϕ1,12ϕ2,11ϕ2,12ϕ3,11ϕ3,12c1β11β12β13β14︷y1,t ϕ1,21ϕ1,22ϕ2,21ϕ2,22ϕ3,21ϕ3,22c2β21β22β23β24︷y2,t],

где

  • β q, jk - элемент (j, k) матрицы коэффициентов lag q AR.

  • cj - константа модели в уравнении переменной отклика j.

  • Bju - коэффициент регрессии экзогенной переменной u в уравнении переменной ответа j.

Смоделированные инновации ковариационные матрицы, возвращенные как PriorMdl.NumSeriesоколо-PriorMdl.NumSeriesоколо-NumDraws массив положительных определенных числовых матриц.

Каждая страница является последовательным розыгрышем (ковариацией) из заднего распределения. Строки и столбцы соответствуют нововведениям в уравнениях переменных ответа, упорядоченных по PriorMdl.SeriesNames.

Если PriorMdl является normalbvarm объект, все ковариации в SigmaDraws равны PriorMdl.Covariance.

Вменения для отсутствующих данных ответа, возвращенных как 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.

Данные дополненного ответа, возвращенные как numobsоколо-PriorMdl.NumSeries числовая матрица. YMean равен части данных ответа, не относящейся к предварительной выборке Y, но simsmooth заменяет каждый NaN с соответствующим средним задним прогностическим распределением (YMean содержит ноль отсутствующих значений).

Стандартные отклонения заднего прогностического распределения вмененных ответов, возвращенные как numobsоколо-PriorMdl.NumSeries числовая матрица. Размеры YStd и YMean соответствуют.

Отсутствующие значения в данных ответа Y, которые соответствуют вмененным значениям в YMean, имеют ненулевое стандартное отклонение. Стандартные отклонения, соответствующие отсутствующим данным ответа, равны 0.

Подробнее

свернуть все

Модель авторегрессии байесовского вектора (VAR)

Байесовская модель VAR рассматривает все коэффициенты и инновационную ковариационную матрицу как случайные величины в m-мерной стационарной модели VARX (p). Модель имеет одну из трех форм, описанных в этой таблице.

МодельУравнение
VAR (p) редуцированной формы в нотации разностного уравнения

yt = Φ1yt − 1 +... + Фpyt p + c + δt + Βxt + αt.

Многомерная регрессия

yt = Ztλ + αt.

Регрессия матрицы

yt=Λ′zt′+ε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. Все переменные предиктора появляются в каждом уравнении.

  • zt=[yt−1′yt−2′⋯yt−p′1txt ], который является вектором 1-by- (mp + r + 2), а Zt является диагональной матрицей m-by-m (mp + r + 2)

    [zt0z0z0zzt0z  0z0z0zzt],

    где 0z - 1-по- (мп + r + 2) вектор нулей.

  • Λ=[Φ1Φ2⋯ΦpcδΒ] ′, которая является случайной матрицей коэффициентов (mp + r + 2) -by-m, а m (mp + r + 2) -by-1 вектором λ = vec (Λ).

  • δ t - вектор m-на-1 случайных, последовательно некоррелированных, многомерных нормальных нововведений с нулевым вектором для среднего и матрицей m-на-м для ковариации. Это предположение подразумевает, что вероятность данных

    (Λ,Σ'y, x) = ∏t=1Tf (yt; Λ, 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

Символически,

π (Yf'Y, X) = π (Yf'Y, X, Λ) π (Λ,Σ'Y, X) dΛdΣ.

Gibbs Sampler с байесовским дополнением данных

Пробоотборник Гиббса с байесовским увеличением данных представляет собой метод выборки Маркова-Чена Монте-Карло, который основан на заднем распределении параметров и ненаблюдаемых данных ответа с учетом наблюдаемых данных.

Рассмотрим следующие наборы индексов:

  • I = {(Я, j) | я = 1..., m + τ, j = 1..., m + τ}, вселенная, содержащая все пары индекса (я, j) непредтиповых данных и горизонта прогноза. Y (I) представляет все данные ответа без предварительной выборки, включая любые местозаполнители (NaN значения) для отсутствующих наблюдений и ненаблюдаемых значений в горизонте прогноза.

  • U = {(i, j) ∈ I | Y (i, j) отсутствует или не наблюдается}, набор пар индексов соответствует отсутствующим или ненаблюдаемым данным ответа. Y (U) - набор местозаполнителей, а Y (Uc) - набор наблюдаемых данных.

simsmooth моделирует от следующего распределения недостающих данных об ответе, коэффициентов и инновационной ковариационной матрицы π (Y (U), Λ,Σ'Y (Uc), X) следующим этот образец Гиббса.

  1. Создайте модель состояния-пространства без ошибок наблюдения, применив указанную структуру VAR (p) к уравнениям состояния. Применить начальные значения параметров Λ (0) и Λ (0) (Coeff0 и Sigma0). Получающаяся модель - условное следующее прогнозирующее распределение π (Y (U) | Λ (0), Σ (0), Y (Uc), X).

  2. Во время итерации j:

    1. Моделируйте недостающие данные об ответе Y (U) (j) от π (Y (U) | Λ (j-1), Σ (j-1), Y (Uc), X). Для выполнения этого действияsimsmooth использует сглаживание модели состояния-пространства (см. simsmooth функции ssm объект модели). simsmooth сохраняет Y (U) (j) на выходеNaNDraws.

    2. Составьте набор дополненных данных Y (I) (j) = Y (U) (j) Y (Uc).

    3. Нарисуйте коэффициенты Λ (j) и инновационную ковариационную матрицу Λ (j) из условной задней байесовской модели VAR с дополненными данными λ (Λ, Λ | Y (I) ( j), X).simsmooth сохраняет Λ (j) и Λ (j) в выходахCoeffDraws и SigmaDrawsсоответственно.

  3. Среднее и стандартное отклонение следующего прогнозирующего распределения π (Y (U) | Λ, Y (Uc), X) является средним и стандартным отклонением серии ничьих {Y (U) (j)}.simsmooth сохраняет статистику в выходных данных YMean и YStd.

После снятия периода горения (Burnin) и прореживание образца (Thin), simsmooth сохраняет оставшийся набор розыгрышей и вычисляет из него апостериорную статистику.

Совет

  • Моделирование Монте-Карло подвержено изменению. Если simsmooth использует моделирование Монте-Карло, затем оценки и выводы могут различаться при вызове simsmooth многократно при, казалось бы, эквивалентных условиях. Чтобы воспроизвести результаты оценки, установите начальное число случайного числа с помощью rng перед вызовом simsmooth.

Алгоритмы

  • На этом рисунке показано, как simsmooth уменьшает выборку, используя значения NumDraws, Thin, и BurnIn. Прямоугольники представляют последовательные розыгрыши из распределения. simsmooth удаляет белые прямоугольники из образца. Остающееся NumDraws образец составляют черные прямоугольники.

    Sample reduced by

  • simsmooth не возвращает созданные по умолчанию начальные значения.

Ссылки

[1] Литтерман, Роберт Б. «Прогнозирование с помощью байесовских векторных авторегрессий: пятилетний опыт». Журнал деловой и экономической статистики 4, № 1 (январь 1986 года): 25-38. https://doi.org/10.2307/1391384.

См. также

Объекты

Функции

Представлен в R2020a