customblm

Байесовская линейная регрессионая модель с пользовательским предшествующим распределением соединений

Описание

Байесовская линейная регрессия объекта модели customblm содержит журнал PDF предыдущего распределения соединений (β, σ2). Журнал PDF является пользовательской функцией, которую вы объявляете.

Вероятность данных: t=1Tϕ(yt;xtβ,σ2), где ϕ (yt; xtβ, σ2) - Гауссова плотность вероятностей, оцениваемая в yt со средними xtβ и отклонением σ2. MATLAB® обрабатывает предшествующую функцию распределения так, как будто она неизвестна. Поэтому получившиеся апостериорные распределения не являются аналитически отслеживаемыми. Чтобы оценить или симулировать из апостериорных распределений, MATLAB реализует срез семплер.

В целом, когда вы создаете объект байесовской линейной регрессионой модели, он задает предшествующее распределение соединений и характеристики только линейной регрессионой модели. То есть объект модели является шаблоном, предназначенным для дальнейшего использования. В частности, чтобы включить данные в модель для апостериорного анализа распределения, передайте объект модели и данные в соответствующую функцию объекта.

Создание

Описание

пример

PriorMdl = customblm(NumPredictors,'LogPDF',LogPDF) создает байесовский объект линейной регрессионной модели (PriorMdl) состоят из NumPredictors предикторы и точка пересечения, и устанавливает NumPredictors свойство. LogPDF - функция, представляющая журнал предыдущего распределения соединений (β, σ2). PriorMdl является шаблоном, который задает предыдущие распределения и размерность β.

пример

PriorMdl = customblm(NumPredictors,'LogPDF',LogPDF,Name,Value) устанавливает свойства (кроме NumPredictors) с использованием аргументов пары "имя-значение". Заключайте каждое имя свойства в кавычки. Для примера, customblm(2,'LogPDF',@logprior,'Intercept',false) задает функцию, которая представляет журналу предшествующей плотности соединений (β, σ2) и задает регрессионую модель с 2 коэффициентами регрессии, но без точки пересечения.

Свойства

расширить все

Можно задать значения свойств записи, когда вы создаете объект модели с помощью синтаксиса аргумента пары "имя-значение" или после того, как вы создаете объект модели с помощью записи через точку. Для примера, чтобы исключить точку пересечения из модели, введите

PriorMdl.Intercept = false;

Количество переменных предиктора в байесовской многофакторной линейной регрессии, заданное в виде неотрицательного целого числа.

NumPredictors должно быть таким же, как и количество столбцов в данных предиктора, которые вы задаете во время оценки модели или симуляции.

При указании NumPredictors, исключить любой термин точки пересечения из значения.

После создания модели, если вы меняете значение NumPredictors использование записи через точку, затем VarNames возвращается к значению по умолчанию.

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

Флаг для включения точки пересечения регрессионной модели, заданный как значение в этой таблице.

ЗначениеОписание
falseИсключить точку пересечения из регрессионной модели. Поэтому β является p-мерный вектор, где p - значение NumPredictors.
trueВключите точку пересечения в регрессионую модель. Поэтому β есть a (p + 1) -мерный вектор. Эта спецификация заставляет вектор T-на-1 из них быть подготовленным к данным предиктора во время оценки и симуляции.

Если вы включаете столбец таковых в данные предиктора для термина точки пересечения, задайте Intercept на false.

Пример: 'Intercept',false

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

Имена переменных предиктора для отображений, заданные как строковый вектор или вектор камеры векторов символов. VarNames должен содержать NumPredictors элементы. VarNames (j) - имя переменной в столбце j набора данных предиктора, который вы задаете во время оценки, симуляции или прогнозирования.

По умолчанию является {'Beta (1)', 'Beta (2),..., Beta (p)}, где p - значение NumPredictors.

Пример: 'VarNames',["UnemploymentRate"; "CPI"]

Типы данных: string | cell | char

Журнал функции плотности вероятностей соединений (β, σ2), заданный как указатель на функцию в форме @fcnName, где fcnName - имя функции.

Предположим logprior - имя функции MATLAB, определяющее предшествующее распределение соединений (β, σ2). Затем, logprior должна иметь эту форму.

function [logpdf,glpdf] = logprior(params)
	...
end
где:

  • logpdf является числовым скаляром, представляющим журналу плотности вероятностей соединений (β, σ2).

  • glpdf является (Intercept + NumPredictors + 1) -на-1 числовой вектор, представляющий градиент logpdf. Элементы соответствуют элементам params.

    glpdf является необязательным выходным аргументом, и только гамильтоновый семплер Монте-Карло (см. hmcSampler) применяет его. Если вы знаете аналитическую частную производную относительно одних параметров, но не других, то задайте элементы glpdf , соответствующий неизвестным частным производным, с NaN. MATLAB вычисляет численный градиент для отсутствующих частных производных, что удобно, но замедляет выборку.

  • params является (Intercept + NumPredictors + 1) -на-1 числовой вектор. Первый Intercept + NumPredictors элементы должны соответствовать значениям β, а последний элемент должен соответствовать значению σ2. Первый элемент β является точкой пересечения, если он существует. Все другие элементы соответствуют переменным предиктора в данных предиктора, которые вы задаете во время оценки, симуляции или прогнозирования.

Пример: 'LogPDF',@logprior

Функции объекта

estimateОцените апостериорное распределение параметров байесовской линейной регрессионой модели
simulateСимулируйте коэффициенты регрессии и отклонение нарушения порядка байесовской линейной регрессионой модели
forecastПрогнозные отклики байесовской линейной регрессионой модели
plotВизуализация априорных и апостериорных плотностей параметров байесовской линейной регрессионой модели
summarizeСводная статистика распределения стандартной байесовской линейной регрессионой модели

Примеры

свернуть все

Рассмотрим множественную линейную регрессионую модель, которая предсказывает реальный валовой национальный продукт США (GNPR) с использованием линейной комбинации индекса промышленного производства (IPI), общая занятость (E), и реальная заработная плата (WR).

$$\texttt{GNPR}_t=\beta_0+\beta_1\texttt{IPI}_t+\beta_2\texttt{E}_t+\beta_3\texttt{WR}_t+\varepsilon_t.$$

Для всех$t$ временных точек$\varepsilon_t$ является рядом независимых Гауссовых нарушений порядка со средним значением 0 и отклонением. $\sigma^2$Предположим, что эти предыдущие распределения:

  • $\beta_j\vert\sigma^2$ - 4-D t с 50 степенями свободы для каждого компонента и матрица тождеств для корреляционной матрицы. Кроме того, распределение центрируется${\left[ {\begin{array}{*{20}{c}} { - 25}&4&0&3 \end{array}} \right]^\prime }$, и каждый компонент масштабируется соответствующими элементами вектора.${\left[ {\begin{array}{*{20}{c}} {1}&1&1&1 \end{array}} \right]^\prime }$

  • $\sigma^2 \sim IG(3,1)$.

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

Объявите функцию MATLAB ®, которая:

  • Принимает значения$\beta$ и$\sigma^2$ вместе в векторе-столбце и принимает значения гиперпараметров

  • Возвращает значение предыдущего распределения соединений, $\pi\left(\beta,\sigma^2\right)$учитывая значения$\beta$ и $\sigma^2$

function logPDF = priorMVTIG(params,ct,st,dof,C,a,b)
%priorMVTIG Log density of multivariate t times inverse gamma 
%   priorMVTIG passes params(1:end-1) to the multivariate t density
%   function with dof degrees of freedom for each component and positive
%   definite correlation matrix C. priorMVTIG returns the log of the product of
%   the two evaluated densities.
%   
%   params: Parameter values at which the densities are evaluated, an
%           m-by-1 numeric vector.
%
%       ct: Multivariate t distribution component centers, an (m-1)-by-1
%           numeric vector.  Elements correspond to the first m-1 elements
%           of params.
%
%       st: Multivariate t distribution component scales, an (m-1)-by-1
%           numeric (m-1)-by-1 numeric vector.  Elements correspond to the
%           first m-1 elements of params.
%
%      dof: Degrees of freedom for the multivariate t distribution, a
%           numeric scalar or (m-1)-by-1 numeric vector. priorMVTIG expands
%           scalars such that dof = dof*ones(m-1,1). Elements of dof
%           correspond to the elements of params(1:end-1).
%
%        C: Correlation matrix for the multivariate t distribution, an
%           (m-1)-by-(m-1) symmetric, positive definite matrix. Rows and
%           columns correspond to the elements of params(1:end-1).
% 
%        a: Inverse gamma shape parameter, a positive numeric scalar.
%
%        b: Inverse gamma scale parameter, a positive scalar.
%
beta = params(1:(end-1));
sigma2 = params(end);

tVal = (beta - ct)./st;
mvtDensity = mvtpdf(tVal,C,dof);
igDensity = sigma2^(-a-1)*exp(-1/(sigma2*b))/(gamma(a)*b^a);

logPDF = log(mvtDensity*igDensity);
end


Создайте анонимную функцию, которая работает как priorMVTIG, но принимает только значения параметров и содержит фиксированные значения гиперзначений параметров.

dof = 50;
C = eye(4);
ct = [-25; 4; 0; 3];
st = ones(4,1);
a = 3;
b = 1;
logPDF = @(params)priorMVTIG(params,ct,st,dof,C,a,b);

Создайте пользовательскую модель предшествующего соединения для параметров линейной регрессии. Задайте количество предикторов p. Кроме того, задайте указатель на функцию для priorMVTIG и имена переменных.

p = 3;
PriorMdl = bayeslm(p,'ModelType','custom','LogPDF',logPDF,...
    'VarNames',["IPI" "E" "WR"])
PriorMdl = 

  customblm with properties:

    NumPredictors: 3
        Intercept: 1
         VarNames: {4x1 cell}
           LogPDF: @(params)priorMVTIG(params,ct,st,dof,C,a,b)

The priors are defined by the function:
    @(params)priorMVTIG(params,ct,st,dof,C,a,b)

PriorMdl является customblm Байесовский объект линейной регрессионной модели, представляющий предшествующее распределение коэффициентов регрессии и отклонение нарушения порядка. В этом случае bayeslm не отображает сводные данные предыдущих распределений в командной строке.

Рассмотрим линейную регрессионую модель в Создании Пользовательской Многомерной t Предыдущей Модели для Коэффициентов.

Создайте анонимную функцию, которая работает как priorMVTIG, но принимает только значения параметров и содержит значения гиперзначений параметров, фиксированные при их значениях.

dof = 50;
C = eye(4);
ct = [-25; 4; 0; 3];
st = ones(4,1);
a = 3;
b = 1;
logPDF = @(params)priorMVTIG(params,ct,st,dof,C,a,b);

Создайте пользовательскую модель предшествующего соединения для параметров линейной регрессии. Задайте количество предикторов p. Кроме того, задайте указатель на функцию для priorMVTIG и имена переменных.

p = 3;
PriorMdl = bayeslm(p,'ModelType','custom','LogPDF',logPDF,...
    'VarNames',["IPI" "E" "WR"])
PriorMdl = 
  customblm with properties:

    NumPredictors: 3
        Intercept: 1
         VarNames: {4x1 cell}
           LogPDF: @(params)priorMVTIG(params,ct,st,dof,C,a,b)

The priors are defined by the function:
    @(params)priorMVTIG(params,ct,st,dof,C,a,b)

Загрузите набор данных Нельсона-Плоссера. Создайте переменные для ряда отклика и предиктора.

load Data_NelsonPlosser
X = DataTable{:,PriorMdl.VarNames(2:end)};
y = DataTable{:,'GNPR'};

Оцените маргинальные апостериорные распределения β и σ2. Задайте ширину для дискретизатора среза, которая близка к апостериорному стандартному отклонению параметров, предполагающих диффузную предшествующую модель. Уменьшите последовательную корреляцию путем определения коэффициента утончения 10 и уменьшите эффективное количество рисок по умолчанию в 10 раз.

width = [20,0.5,0.01,1,20];
thin = 10;
numDraws = 1e5/thin;
rng(1) % For reproducibility
PosteriorMdl = estimate(PriorMdl,X,y,'Width',width,'Thin',thin,...
    'NumDraws',numDraws);
Method: MCMC sampling with 10000 draws
Number of observations: 62
Number of predictors:   4
 
           |   Mean      Std          CI95         Positive  Distribution 
--------------------------------------------------------------------------
 Intercept | -25.0069  0.9919  [-26.990, -23.065]    0.000     Empirical  
 IPI       |   4.3544  0.1083   [ 4.143,  4.562]     1.000     Empirical  
 E         |   0.0011  0.0002   [ 0.001,  0.001]     1.000     Empirical  
 WR        |   2.5613  0.3293   [ 1.939,  3.222]     1.000     Empirical  
 Sigma2    |  47.0593  8.7570   [32.690, 67.115]     1.000     Empirical  
 

PosteriorMdl является empiricalblm хранение объектов модели вытягивает из апостериорных распределений β и σ2 учитывая данные. estimate отображает сводные данные маргинальных апостериорных распределений в командном окне. Строки сводных данных соответствуют коэффициентам регрессии и нарушения порядка отклонения, а столбцы - характеристикам апостериорного распределения. Характеристики включают:

  • CI95, который содержит 95% байесовских справедливых интервалов для параметров. Для примера апостериорная вероятность того, что коэффициент регрессии WR находится в [1.939, 3.222] 0,95.

  • Positive, который содержит апостериорную вероятность того, что параметр больше 0. Для примера вероятность того, что точка пересечения больше 0, равна 0.

estimate выводит апостериорные характеристики из рисунков из апостериорных распределений, которые MATLAB ® сохраняет как матрицы в свойствах BetaDraws и Sigma2Draws.

Чтобы контролировать смешивание и сходимость выборки MCMC, создайте графики трассировки. В BetaDraws свойство, рисования соответствуют столбцам и параметры - строкам.

figure;
for j = 1:4
    subplot(2,2,j)
    plot(PosteriorMdl.BetaDraws(j,:))
    title(sprintf('Trace Plot of %s',PosteriorMdl.VarNames{j}));
end

Figure contains 4 axes. Axes 1 with title Trace Plot of Intercept contains an object of type line. Axes 2 with title Trace Plot of IPI contains an object of type line. Axes 3 with title Trace Plot of E contains an object of type line. Axes 4 with title Trace Plot of WR contains an object of type line.

figure;
plot(PosteriorMdl.Sigma2Draws)
title('Trace Plot of Sigma2');

Figure contains an axes. The axes with title Trace Plot of Sigma2 contains an object of type line.

Трассировочные графики указывают на адекватное смешивание и сходимость, и нет переходных эффектов для удаления.

Рассмотрим линейную регрессионую модель в Создании Пользовательской Многомерной t Предыдущей Модели для Коэффициентов.

Создайте анонимную функцию, которая работает как priorMVTIG, но принимает только значения параметров и содержит фиксированные значения гиперзначений параметров.

dof = 50;
C = eye(4);
ct = [-25; 4; 0; 3];
st = ones(4,1);
a = 3;
b = 1;
logPDF = @(params)priorMVTIG(params,ct,st,dof,C,a,b);

Создайте пользовательскую модель предшествующего соединения для параметров линейной регрессии. Задайте количество предикторов p. Кроме того, задайте указатель на функцию для priorMVTIG и имена переменных.

p = 3;
PriorMdl = bayeslm(p,'ModelType','custom','LogPDF',logPDF,...
    'VarNames',["IPI" "E" "WR"])
PriorMdl = 
  customblm with properties:

    NumPredictors: 3
        Intercept: 1
         VarNames: {4x1 cell}
           LogPDF: @(params)priorMVTIG(params,ct,st,dof,C,a,b)

The priors are defined by the function:
    @(params)priorMVTIG(params,ct,st,dof,C,a,b)

Загрузите набор данных Нельсона-Плоссера. Создайте переменные для ряда отклика и предиктора.

load Data_NelsonPlosser
X = DataTable{:,PriorMdl.VarNames(2:end)};
y = DataTable{:,'GNPR'};

Оцените условное апостериорное распределение β учитывая данные и σ2=2и возвращает сводную таблицу оценок для доступа к оценкам. Задайте ширину для дискретизатора среза, которая близка к апостериорному стандартному отклонению параметров, предполагающих диффузную предшествующую модель. Уменьшите последовательную корреляцию путем определения коэффициента утончения 10 и уменьшите эффективное количество рисок по умолчанию в 10 раз.

width = [20,0.5,0.01,1];
thin = 10;
numDraws = 1e5/thin;
rng(1) % For reproducibility
[Mdl,Summary] = estimate(PriorMdl,X,y,'Sigma2',2,...
    'Width',width,'Thin',thin,'NumDraws',numDraws);
Method: MCMC sampling with 10000 draws
Conditional variable: Sigma2 fixed at   2
Number of observations: 62
Number of predictors:   4
 
           |   Mean      Std          CI95         Positive  Distribution 
--------------------------------------------------------------------------
 Intercept | -24.7820  0.8767  [-26.483, -23.054]    0.000     Empirical  
 IPI       |   4.3825  0.0254   [ 4.332,  4.431]     1.000     Empirical  
 E         |   0.0011  0.0000   [ 0.001,  0.001]     1.000     Empirical  
 WR        |   2.4752  0.0724   [ 2.337,  2.618]     1.000     Empirical  
 Sigma2    |    2       0       [ 2.000,  2.000]     1.000     Empirical  
 

estimate отображает сводные данные условного апостериорного распределения β. Поскольку σ2 фиксируется на уровне 2 во время оценки, выводы на ней тривиальны.

Извлеките вектор средних значений и ковариационную матрицу условного апостериора β из сводной таблицы оценок.

condPostMeanBeta = Summary.Mean(1:(end - 1))
condPostMeanBeta = 4×1

  -24.7820
    4.3825
    0.0011
    2.4752

CondPostCovBeta = Summary.Covariances(1:(end - 1),1:(end - 1))
CondPostCovBeta = 4×4

    0.7686    0.0084   -0.0000    0.0019
    0.0084    0.0006    0.0000   -0.0015
   -0.0000    0.0000    0.0000   -0.0000
    0.0019   -0.0015   -0.0000    0.0052

Отобразите Mdl.

Mdl
Mdl = 
  customblm with properties:

    NumPredictors: 3
        Intercept: 1
         VarNames: {4x1 cell}
           LogPDF: @(params)priorMVTIG(params,ct,st,dof,C,a,b)

The priors are defined by the function:
    @(params)priorMVTIG(params,ct,st,dof,C,a,b)

Потому что estimate вычисляет условное апостериорное распределение, оно возвращает исходную предшествующую модель, а не апостериорную в первой позиции списка выходных аргументов. Кроме того, estimate не возвращает выборку MCMC. Поэтому для мониторинга сходимости выборки MCMC используйте simulate вместо этого задайте то же самое начальное число случайных чисел.

Рассмотрим линейную регрессионую модель в Estimate Marginal Posterior Distributions.

Создайте предыдущую модель для коэффициентов регрессии и отклонения нарушения порядка, а затем оцените маргинальные апостериорные распределения. Отключите отображение оценки.

dof = 50;
C = eye(4);
ct = [-25; 4; 0; 3];
st = ones(4,1);
a = 3;
b = 1;
logPDF = @(params)priorMVTIG(params,ct,st,dof,C,a,b);

p = 3;
PriorMdl = bayeslm(p,'ModelType','custom','LogPDF',logPDF,...
    'VarNames',["IPI" "E" "WR"]);

load Data_NelsonPlosser
X = DataTable{:,PriorMdl.VarNames(2:end)};
y = DataTable{:,'GNPR'};  

width = [20,0.5,0.01,1,20];
thin = 10;
numDraws = 1e5/thin;

rng(1) % For reproducibility
PosteriorMdl = estimate(PriorMdl,X,y,'Width',width,'Thin',thin,...
    'NumDraws',numDraws,'Display',false);

Оцените апостериорное распределение сводных данных статистику для β при помощи рисунков из апостериорного распределения, сохраненного в апостериорной модели.

estBeta = mean(PosteriorMdl.BetaDraws,2);
EstBetaCov = cov(PosteriorMdl.BetaDraws');

Предположим, что если коэффициент реальной заработной платы (WR) ниже 2,5, затем вводится в действие политика. Хотя апостериорное распределение WR известно, и вы можете вычислить вероятности непосредственно, можно оценить вероятность, используя симуляцию Монте-Карло вместо этого.

Нарисуйте 1e6 выборки из маргинального апостериорного распределения β.

NumDraws = 1e6;
BetaSim = simulate(PosteriorMdl,'NumDraws',NumDraws);

BetaSim является 4-байт- 1e6 матрица, содержащая рисунки. Строки соответствуют коэффициенту регрессии, а столбцы - последовательным рисованиям.

Изолируйте рисунки, соответствующие коэффициенту WR, и затем идентифицируйте, какие рисунки меньше 2,5.

isWR = PosteriorMdl.VarNames == "WR";
wrSim = BetaSim(isWR,:);
isWRLT2p5 = wrSim < 2.5;

Найдите предельную апостериорную вероятность того, что коэффициент регрессии WR ниже 2,5 путем вычисления доли рисок, которые меньше 2,5.

probWRLT2p5 = mean(isWRLT2p5)
probWRLT2p5 = 0.4430

Апостериорная вероятность того, что коэффициент WR меньше 2,5 около 0.4430.

Рассмотрим линейную регрессионую модель в Estimate Marginal Posterior Distributions.

Создайте предыдущую модель для коэффициентов регрессии и отклонения нарушения порядка, а затем оцените маргинальные апостериорные распределения. Продержитесь последние 10 периодов данных из оценки, чтобы использовать их для прогноза реального ВНП. Отключите отображение оценки.

load Data_NelsonPlosser
VarNames = {'IPI'; 'E'; 'WR'};
fhs = 10; % Forecast horizon size
X = DataTable{1:(end - fhs),VarNames};
y = DataTable{1:(end - fhs),'GNPR'};
XF = DataTable{(end - fhs + 1):end,VarNames}; % Future predictor data
yFT = DataTable{(end - fhs + 1):end,'GNPR'};  % True future responses

dof = 50;
C = eye(4);
ct = [-25; 4; 0; 3];
st = ones(4,1);
a = 3;
b = 1;
logPDF = @(params)priorMVTIG(params,ct,st,dof,C,a,b);

p = 3;
PriorMdl = bayeslm(p,'ModelType','custom','LogPDF',logPDF,...
    'VarNames',VarNames);

width = [20,0.5,0.01,1,20];
thin = 10;
numDraws = 1e5/thin;
rng(1) % For reproducibility
PosteriorMdl = estimate(PriorMdl,X,y,'Width',width,'Thin',thin,...
    'NumDraws',numDraws,'Display',false);

Прогнозные отклики с использованием апостериорного прогнозирующего распределения и будущих данных предиктора XF. Постройте график истинных значений отклика и прогнозируемых значений.

yF = forecast(PosteriorMdl,XF);

figure;
plot(dates,DataTable.GNPR);
hold on
plot(dates((end - fhs + 1):end),yF)
h = gca;
hp = patch([dates(end - fhs + 1) dates(end) dates(end) dates(end - fhs + 1)],...
    h.YLim([1,1,2,2]),[0.8 0.8 0.8]);
uistack(hp,'bottom');
legend('Forecast Horizon','True GNPR','Forecasted GNPR','Location','NW')
title('Real Gross National Product');
ylabel('rGNP');
xlabel('Year');
hold off

Figure contains an axes. The axes with title Real Gross National Product contains 3 objects of type patch, line. These objects represent Forecast Horizon, True GNPR, Forecasted GNPR.

yF является вектором 10 на 1 будущих значений действительного GNP, соответствующим будущим данным предиктора.

Оцените среднюю квадратичную невязку корня прогноза (RMSE).

frmse = sqrt(mean((yF - yFT).^2))
frmse = 12.8148

RMSE прогноза является относительной мерой точности прогноза. В частности, вы оцениваете несколько моделей, используя различные допущения. Модель с самым низким прогнозным RMSE является наиболее эффективной моделью сравниваемых таковых.

Подробнее о

расширить все

Альтернативы

bayeslm функция может создать любой поддерживаемый объект предыдущей модели для Байесовской линейной регрессии.

Введенный в R2017a