Байесовская линейная регрессионая модель с пользовательским предшествующим распределением соединений
Байесовская линейная регрессия объекта модели customblm
содержит журнал PDF предыдущего распределения соединений (β, σ2). Журнал PDF является пользовательской функцией, которую вы объявляете.
Вероятность данных: где ϕ (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
, исключить любой термин точки пересечения из значения.
После создания модели, если вы меняете значение NumPredictors
использование записи через точку, затем VarNames
возвращается к значению по умолчанию.
Типы данных: double
Intercept
- Флаг включения точки пересечения регрессионной моделиtrue
(по умолчанию) | false
Флаг для включения точки пересечения регрессионной модели, заданный как значение в этой таблице.
Значение | Описание |
---|---|
false | Исключить точку пересечения из регрессионной модели. Поэтому β является p -мерный вектор, где p - значение NumPredictors . |
true | Включите точку пересечения в регрессионую модель. Поэтому β есть a (p + 1) -мерный вектор. Эта спецификация заставляет вектор T-на-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
- Журнал функции плотности вероятностей соединений (β, σ2)Журнал функции плотности вероятностей соединений (β, σ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
).
Для всех временных точек является рядом независимых Гауссовых нарушений порядка со средним значением 0 и отклонением. Предположим, что эти предыдущие распределения:
- 4-D t с 50 степенями свободы для каждого компонента и матрица тождеств для корреляционной матрицы. Кроме того, распределение центрируется, и каждый компонент масштабируется соответствующими элементами вектора.
.
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'};
Оцените условное апостериорное распределение учитывая данные и и возвращает сводную таблицу оценок для доступа к оценкам. Задайте ширину для дискретизатора среза, которая близка к апостериорному стандартному отклонению параметров, предполагающих диффузную предшествующую модель. Уменьшите последовательную корреляцию путем определения коэффициента утончения 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
вместо этого задайте то же самое начальное число случайных чисел.
Рассмотрим линейную регрессионую модель в 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
yF
является вектором 10 на 1 будущих значений действительного GNP, соответствующим будущим данным предиктора.
Оцените среднюю квадратичную невязку корня прогноза (RMSE).
frmse = sqrt(mean((yF - yFT).^2))
frmse = 12.8148
RMSE прогноза является относительной мерой точности прогноза. В частности, вы оцениваете несколько моделей, используя различные допущения. Модель с самым низким прогнозным RMSE является наиболее эффективной моделью сравниваемых таковых.
A Bayesian linear regression model обрабатывает параметры β и σ2 в модели многофакторной линейной регрессии (MLR) yt = xt β + εt как случайные переменные.
Для времен t = 1,..., T:
yt - наблюдаемая реакция.
xt является 1-бай- (p + 1) вектором-строкой наблюдаемых значений p предикторов. Чтобы разместить точку пересечения модели, x 1 t = 1 для всех t.
β является (p + 1) -на-1 вектор-столбец коэффициентов регрессии, соответствующих переменным, которые составляют столбцы xt.
εt является случайным нарушением порядка со средним значением нуля и Cov (ε) = σ2I T × T, в то время как ε является вектором T -by-1, содержащим все нарушения порядка. Эти предположения подразумевают, что вероятность данных является
ϕ (yt; xtβ, σ2) - Гауссова плотность вероятностей со средней xtβ и отклонением σ2 оценивается при yt;.
Прежде чем рассматривать данные, вы накладываете joint prior distribution предположение на (β, σ2). В байесовском анализе вы обновляете распределение параметров с помощью информации о параметрах, полученных из вероятности данных. Результатом является joint posterior distribution (β, σ2) или conditional posterior distributions параметров.
bayeslm
функция может создать любой поддерживаемый объект предыдущей модели для Байесовской линейной регрессии.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.