Байесовская модель линейной регрессии с предварительным распределением пользовательского соединения
Объект модели байесовской линейной регрессии customblm содержит журнал pdf совместного предварительного распределения (β, start2). Файл PDF журнала - это пользовательская функция, которую вы объявляете.
Правдоподобие данных равно start2), где (yt; xtβ, start2) - гауссова плотность вероятностей, оцениваемая на yt со средним xtβ и дисперсией start2. MATLAB ® рассматривает функцию предыдущего распределения как неизвестную. Следовательно, полученные апостериорные распределения не поддаются аналитическому отслеживанию. Для оценки или моделирования по задним распределениям MATLAB реализует пробоотборник среза.
Как правило, при создании объекта модели байесовской линейной регрессии задается совместное предварительное распределение и характеристики только модели линейной регрессии. То есть объект модели является шаблоном, предназначенным для дальнейшего использования. В частности, для включения данных в модель для последующего анализа распределения передайте объект модели и данные соответствующей функции объекта.
создает объект модели байесовской линейной регрессии (PriorMdl = customblm(NumPredictors,'LogPDF',LogPDF)PriorMdl) состоит из NumPredictors предикторы и перехват, и устанавливает NumPredictors собственность. LogPDF - функция, представляющая логарифм совместного предшествующего распределения (β, start2 ).PriorMdl является шаблоном, который определяет предыдущие распределения и размерность β.
задает свойства (кроме PriorMdl = customblm(NumPredictors,'LogPDF',LogPDF,Name,Value)NumPredictors) с использованием аргументов пары имя-значение. Заключите каждое имя свойства в кавычки. Например, customblm(2,'LogPDF',@logprior,'Intercept',false) задает функцию, представляющую логарифм предшествующей плотности соединения (β, start2), и задает регрессионную модель с 2 коэффициентами регрессии, но без перехвата.
Значения свойств, доступные для записи, можно задать при создании объекта модели с помощью синтаксиса аргумента пара имя-значение или после создания объекта модели с помощью точечной нотации. Например, чтобы исключить пересечение из модели, введите
PriorMdl.Intercept = false;
NumPredictors - Количество переменных предиктораЧисло переменных предиктора в байесовской модели множественной линейной регрессии, указанное как неотрицательное целое число.
NumPredictors должно совпадать с количеством столбцов в данных предиктора, которое задается при оценке модели или моделировании.
При указании NumPredictors, исключить любой элемент перехвата из значения.
После создания модели при изменении значения NumPredictors используя точечную нотацию, затем VarNames возвращается к значению по умолчанию.
Типы данных: double
Intercept - Флаг для включения перехвата регрессионной моделиtrue (по умолчанию) | falseФлаг для включения перехвата регрессионной модели, указанный как значение в этой таблице.
| Стоимость | Описание |
|---|---|
false | Исключить пересечение из регрессионной модели. Следовательно, β является p-мерный вектор, где p - значение NumPredictors. |
true | Включить пересечение в регрессионную модель. Следовательно, β является (p + 1) -мерный вектор. Эта спецификация заставляет T-by-1 вектор из них быть добавленным к данным предиктора во время оценки и моделирования. |
Если включить столбец из них в данные предиктора для члена перехвата, то установите Intercept кому false.
Пример: 'Intercept',false
Типы данных: logical
VarNames - Имена переменных предиктораИмена переменных предиктора для дисплеев, заданные как строковый вектор или вектор ячейки векторов символов. VarNames должен содержать NumPredictors элементы. VarNames( - имя переменной в столбце j)j набора данных предиктора, который задается во время оценки, моделирования или прогнозирования.
Значение по умолчанию: {'Beta(1)','Beta(2),...,Beta(, где p)}p - значение NumPredictors.
Пример: 'VarNames',["UnemploymentRate"; "CPI"]
Типы данных: string | cell | char
LogPDF - Журнал совместной функции плотности вероятности (β, start2)Журнал совместной функции плотности вероятности (β, start2), указанной как дескриптор функции в виде@fcnName, где fcnName - имя функции.
Предположим logprior - название функции MATLAB, определяющей совместное предварительное распределение (β, start2). Затем ,logprior должна иметь эту форму.
function [logpdf,glpdf] = logprior(params) ... end
logpdf - числовой скаляр, представляющий логарифм плотности вероятности соединения (β, start2).
glpdf является (Intercept + NumPredictors + 1) -по-1 числовой вектор, представляющий градиент logpdf. Элементы соответствуют элементам params.
glpdf является необязательным выходным аргументом и только гамильтоновым образцом Монте-Карло (см. hmcSampler) применяет его. Если аналитическая частная производная известна относительно одних параметров, но не других, то задайте элементы glpdf , соответствующие неизвестным частным производным NaN. MATLAB вычисляет численный градиент для отсутствующих частных производных, что удобно, но замедляет выборку.
params является (Intercept + NumPredictors + 1) -по-1 числовой вектор. ПервоеIntercept + NumPredictors элементы должны соответствовать значениям β, а последний элемент должен соответствовать значению start2. Первым элементом β является перехват, если таковой существует. Все остальные элементы соответствуют переменным предиктора в данных предиктора, которые задаются во время оценки, моделирования или прогнозирования.
Пример: 'LogPDF',@logprior
estimate | Оценка апостериорного распределения параметров модели байесовской линейной регрессии |
simulate | Моделирование коэффициентов регрессии и дисперсии возмущений байесовской модели линейной регрессии |
forecast | Прогнозные отклики байесовской модели линейной регрессии |
plot | Визуализация предыдущих и задних плотностей параметров байесовской модели линейной регрессии |
summarize | Сводная статистика распределения стандартной байесовской модели линейной регрессии |
Рассмотрим модель множественной линейной регрессии, которая предсказывает реальный валовой национальный продукт США (GNPR) с использованием линейной комбинации индекса промышленного производства (IPI), общая занятость (E) и реальная заработная плата (WR).

Для всех
моментов времени
представляет собой ряд независимых гауссовых возмущений со средним значением 0 и дисперсией.
Предположим, что эти предыдущие распределения:
4-D t распределение с 50 степенями свободы для каждого компонента и матрицей идентичности для матрицы корреляции. Кроме того, распределение центрировано
, и каждый компонент масштабируется соответствующими элементами вектора.![${\left[ {\begin{array}{*{20}{c}} {1}&1&1&1 \end{array}} \right]^\prime }$](../examples/econ/win64/CreateCustomMultivariatetPriorModelForCoefficientsExample_eq17143220605673255891.png)
.
bayeslm рассматривает эти предположения и вероятность данных, как если бы соответствующий задний является аналитически труднореализуемым.
Объявите функцию MATLAB ®, которая:
Принимает значения
вектора столбца и вместе и принимает значения гиперпараметров
Возвращает значение предыдущего распределения соединения,,
учитывая значения
и 
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'};
Оцените краевые апостериорные распределения и . Укажите ширину образца среза, близкую к заднему стандартному отклонению параметров в предположении о диффузной предыдущей модели. Уменьшите последовательную корреляцию, указав коэффициент прореживания 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 объект модели, хранящий черточки из задних распределений и , заданных данными. 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;
plot(PosteriorMdl.Sigma2Draws)
title('Trace Plot of Sigma2');
Графики трассировки указывают на адекватное смешение и сходимость, и нет временных эффектов для удаления.
Рассмотрим модель линейной регрессии в разделе Создание пользовательской многомерной 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]; 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 фиксируется, выводы о ней тривиальны.
Извлеките средний вектор и ковариационную матрицу условного задника из сводной таблицы оценки.
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 вместо этого укажите одно и то же начальное число случайных чисел.
Рассмотрим модель линейной регрессии в разделе Оценка предельных задних распределений.
Создайте предыдущую модель для коэффициентов регрессии и дисперсии возмущений, а затем оцените предельные апостериорные распределения. Выключите отображение оценки.
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-by- 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.
Рассмотрим модель линейной регрессии в разделе Оценка предельных задних распределений.
Создайте предыдущую модель для коэффициентов регрессии и дисперсии возмущений, а затем оцените предельные апостериорные распределения. Удерживайте последние 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

yF является вектором 10 на 1 будущих значений реального GNP, соответствующего будущим данным предиктора.
Оценка прогнозируемой среднеквадратичной ошибки (RMSE).
frmse = sqrt(mean((yF - yFT).^2))
frmse = 12.8148
RMSE прогноза является относительным показателем точности прогноза. В частности, можно оценить несколько моделей с использованием различных допущений. Модель с самым низким прогнозом RMSE является лучшей из сравниваемых моделей.
Байесовская модель линейной регрессии рассматривает параметры β и start2 в модели множественной линейной регрессии (MLR) yt = xtβ + αt как случайные величины.
Для времени t = 1,...,T:
yt - наблюдаемый ответ.
xt - вектор строки 1-by- (p + 1) наблюдаемых значений p предикторов. Чтобы разместить пересечение модели, x1t = 1 для всех t.
β - вектор (p + 1) -by-1-столбца коэффициентов регрессии, соответствующих переменным, составляющим столбцы xt.
αt - случайное возмущение со средним значением ноля и Cov (λ) = start2IT × T, в то время, как start- T-by-1 вектор, содержащий все возмущения. Эти допущения подразумевают, что вероятность данных
xtβ, start2).
(yt; xtβ, start2) - гауссова плотность вероятности со средним значением xtβ и дисперсией start2, оцениваемой при yt;.
Перед рассмотрением данных необходимо наложить совместное предварительное предположение о распределении на (β, start2). В байесовском анализе выполняется обновление распределения параметров с использованием информации о параметрах, полученных из вероятности получения данных. Результатом является совместное апостериорное распределение (β, start2) или условное апостериорное распределение параметров.
bayeslm может создавать любой поддерживаемый объект предыдущей модели для байесовской линейной регрессии.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.