exponenta event banner

моделировать

Моделирование коэффициентов регрессии и дисперсии возмущений байесовской модели линейной регрессии

Описание

пример

[BetaSim,sigma2Sim] = simulate(Mdl) возвращает случайный вектор коэффициентов регрессии (BetaSim) и случайную дисперсию возмущений (sigma2Sim) из байесовской модели линейной регрессии Mdl из β и start2.

  • Если Mdl является совместной предыдущей моделью (возвращается bayeslm), то simulate извлекает из предыдущих распределений.

  • Если Mdl является задней моделью сустава (возвращается estimate), то simulate черпает из задних распределений.

пример

[BetaSim,sigma2Sim] = simulate(Mdl,X,y) извлекает из краевых задних распределений, полученных или обновленных путем включения данных предиктора X и соответствующие данные ответа y.

  • Если Mdl является совместной предшествующей моделью, то simulate создает краевые апостериорные распределения путем обновления предшествующей модели информацией о параметрах, которые она получает из данных.

  • Если Mdl является краевой задней моделью, то simulate обновляет апостериоры информацией о параметрах, которые они получают из дополнительных данных. Полная вероятность данных состоит из дополнительных данных. X и yи данные, которые были созданы Mdl.

NaNs в данных указывают отсутствующие значения, которые simulate удаляет, используя удаление по списку.

пример

[BetaSim,sigma2Sim] = simulate(___,Name,Value) использует любую из комбинаций входных аргументов в предыдущих синтаксисах и дополнительных параметрах, заданных одним или несколькими аргументами пары имя-значение. Например, для моделирования из условного апостериорного распределения одного параметра можно задать значение β или start2, учитывая заданное значение другого параметра.

пример

[BetaSim,sigma2Sim,RegimeSim] = simulate(___) также возвращает данные из распределения скрытого режима, если Mdl - байесовская модель линейной регрессии для стохастического выбора переменных поиска (SSVS), то есть, если Mdl является mixconjugateblm или mixsemiconjugateblm объект модели.

Примеры

свернуть все

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

GNPRt = β0 + β1IPIt + β2Et + β3WRt + αt.

Для всех t δ t - это ряд независимых гауссовых возмущений со средним значением 0 и дисперсией start2.

Предположим, что эти предыдущие распределения:

  • β'σ2∼N4 (М, λ 2В). M является вектором средства 4 на 1, а V является масштабированной матрицей положительной определенной ковариации 4 на 4.

  • σ2∼IG (A, B). А и В - форма и масштаб, соответственно, обратного гамма-распределения.

Эти допущения и правдоподобие данных подразумевают нормально-обратно-гамма-сопряженную модель.

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

load Data_NelsonPlosser
varNames = {'IPI' 'E' 'WR'};
X = DataTable{:,varNames};
y = DataTable{:,'GNPR'};

Создайте нормально-обратно-гамма-сопряженную предыдущую модель для параметров линейной регрессии. Укажите количество предикторов p и имена переменных.

p = 3;
PriorMdl = bayeslm(p,'ModelType','conjugate','VarNames',varNames);

PriorMdl является conjugateblm Объект байесовской модели линейной регрессии, представляющий предварительное распределение коэффициентов регрессии и дисперсии возмущений.

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

rng(1); % For reproducibility
[betaSimPrior,sigma2SimPrior] = simulate(PriorMdl)
betaSimPrior = 4×1

  -33.5917
  -49.1445
  -37.4492
  -25.3632

sigma2SimPrior = 0.1962

betaSimPrior является случайно нарисованным 4 на 1 вектором коэффициентов регрессии, соответствующих именам в PriorMdl.VarNames. sigma2SimPrior выходной сигнал представляет собой случайную проводимую дисперсию скалярных возмущений.

Оцените апостериорное распределение.

PosteriorMdl = estimate(PriorMdl,X,y);
Method: Analytic posterior distributions
Number of observations: 62
Number of predictors:   4
Log marginal likelihood: -259.348
 
           |   Mean      Std          CI95        Positive       Distribution      
-----------------------------------------------------------------------------------
 Intercept | -24.2494  8.7821  [-41.514, -6.985]    0.003   t (-24.25, 8.65^2, 68) 
 IPI       |   4.3913  0.1414   [ 4.113,  4.669]    1.000   t (4.39, 0.14^2, 68)   
 E         |   0.0011  0.0003   [ 0.000,  0.002]    1.000   t (0.00, 0.00^2, 68)   
 WR        |   2.4683  0.3490   [ 1.782,  3.154]    1.000   t (2.47, 0.34^2, 68)   
 Sigma2    |  44.1347  7.8020   [31.427, 61.855]    1.000   IG(34.00, 0.00069)     
 

PosteriorMdl является conjugateblm Объект байесовской модели линейной регрессии, представляющий апостериорное распределение коэффициентов регрессии и дисперсию возмущений.

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

[betaSimPost,sigma2SimPost] = simulate(PosteriorMdl)
betaSimPost = 4×1

  -25.9351
    4.4379
    0.0012
    2.4072

sigma2SimPost = 41.9575

betaSimPost и sigma2SimPost имеют те же размеры, что и betaSimPrior и sigma2SimPrior, соответственно, но выводятся из задней части.

Рассмотрим регрессионную модель в разделе Моделирование значения параметра из предыдущих и последующих распределений.

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

load Data_NelsonPlosser
varNames = {'IPI' 'E' 'WR'};
X = DataTable{:,varNames};
y = DataTable{:,'GNPR'};
p = 3;
PriorMdl = bayeslm(p,'ModelType','conjugate','VarNames',varNames);
[PosteriorMdl,Summary] = estimate(PriorMdl,X,y);
Method: Analytic posterior distributions
Number of observations: 62
Number of predictors:   4
Log marginal likelihood: -259.348
 
           |   Mean      Std          CI95        Positive       Distribution      
-----------------------------------------------------------------------------------
 Intercept | -24.2494  8.7821  [-41.514, -6.985]    0.003   t (-24.25, 8.65^2, 68) 
 IPI       |   4.3913  0.1414   [ 4.113,  4.669]    1.000   t (4.39, 0.14^2, 68)   
 E         |   0.0011  0.0003   [ 0.000,  0.002]    1.000   t (0.00, 0.00^2, 68)   
 WR        |   2.4683  0.3490   [ 1.782,  3.154]    1.000   t (2.47, 0.34^2, 68)   
 Sigma2    |  44.1347  7.8020   [31.427, 61.855]    1.000   IG(34.00, 0.00069)     
 

Summary - таблица, содержащая статистику, которая estimate отображается в командной строке.

Хотя предельные и условные апостериорные распределения β и start2 аналитически прослеживаются, этот пример фокусируется на том, как реализовать пробоотборник Гиббса для воспроизведения известных результатов.

Оцените модель еще раз, но используйте образец Гиббса. Чередуют выборку из условных задних распределений параметров. Выполните выборку 10 000 раз и создайте переменные для предварительного распределения. Запустить пробоотборник с отсчетом от условного задника β, приведенного start2 = 2.

m = 1e4;
BetaDraws = zeros(p + 1,m);
sigma2Draws = zeros(1,m + 1);
sigma2Draws(1) = 2;
rng(1); % For reproducibility
for j = 1:m
    BetaDraws(:,j) = simulate(PriorMdl,X,y,'Sigma2',sigma2Draws(j));
    [~,sigma2Draws(j + 1)] = simulate(PriorMdl,X,y,'Beta',BetaDraws(:,j));
end
sigma2Draws = sigma2Draws(2:end); % Remove initial value from MCMC sample

График следовых графиков параметров.

figure;
for j = 1:(p + 1);
    subplot(2,2,j);
    plot(BetaDraws(j,:))
    ylabel('MCMC Draw')
    xlabel('Simulation Index')
    title(sprintf('Trace Plot — %s',PriorMdl.VarNames{j}));
end

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

figure;
plot(sigma2Draws)
ylabel('MCMC Draw')
xlabel('Simulation Index')
title('Trace plot — Sigma2')

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

Образцы цепи Маркова Monte Carlo (MCMC), по-видимому, сходятся и хорошо перемешиваются.

Примените период горения в 1000 розыгрышей, а затем вычислите средние и стандартные отклонения образцов MCMC. Сравните их с оценками из estimate.

bp = 1000;
postBetaMean = mean(BetaDraws(:,(bp + 1):end),2);
postSigma2Mean = mean(sigma2Draws(:,(bp + 1):end));
postBetaStd = std(BetaDraws(:,(bp + 1):end),[],2);
postSigma2Std = std(sigma2Draws((bp + 1):end));
[Summary(:,1:2),table([postBetaMean; postSigma2Mean],...
    [postBetaStd; postSigma2Std],'VariableNames',{'GibbsMean','GibbsStd'})]
ans=5×4 table
                   Mean          Std        GibbsMean     GibbsStd 
                 _________    __________    _________    __________

    Intercept      -24.249        8.7821      -24.293         8.748
    IPI             4.3913        0.1414       4.3917       0.13941
    E            0.0011202    0.00032931    0.0011229    0.00032875
    WR              2.4683       0.34895       2.4654       0.34364
    Sigma2          44.135         7.802       44.011        7.7816

Оценки очень близки. Различия учитываются в вариациях MCMC.

Рассмотрим регрессионную модель в разделе Моделирование значения параметра из предыдущих и последующих распределений.

Предположим, что эти предыдущие распределения для k = 0,..., 3:

  • βk 'start2, γ k = γkσVk1Z1 + (1-γ k) σVk2Z2, где Z1 и Z2 - независимые, стандартные нормальные случайные величины. Поэтому коэффициенты имеют гауссово распределение смеси. Предположим, что все коэффициенты условно независимы, априори, но они зависят от дисперсии возмущений.

  • σ2∼IG (A, B). А и В - форма и масштаб, соответственно, обратного гамма-распределения.

  • γk∈{0,1}and он представляет переменную режима включения со случайной переменной с дискретным равномерным распределением.

Создайте предыдущую модель для выполнения SSVS. Предположим, что β и start2 зависимы (модель сопряженной смеси). Укажите количество предикторов p и названия коэффициентов регрессии.

p = 3;
PriorMdl = mixconjugateblm(p,'VarNames',["IPI" "E" "WR"]);

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

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

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

cardRegime = 2^(PriorMdl.Intercept + PriorMdl.NumPredictors)
cardRegime = 16

Смоделировать 10 000 режимов из заднего распределения.

rng(1);
[~,~,RegimeSim] = simulate(PriorMdl,X,y,'NumDraws',10000);

RegimeSim является логической матрицей 4 на 1000. Строки соответствуют переменным в Mdl.VarNames, и столбцы соответствуют розыгрышам из заднего распределения.

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

cRegime = num2cell(RegimeSim,1);
cRegime = categorical(cellfun(@(c)join(PriorMdl.VarNames(c),"."),cRegime));
cRegime(ismissing(cRegime)) = "NoCoefficients";

histogram(cRegime);
title('Variables Included in Models')
ylabel('Frequency');

Figure contains an axes. The axes with title Variables Included in Models contains an object of type categoricalhistogram.

Вычислите предельную заднюю вероятность включения переменных.

table(mean(RegimeSim,2),'RowNames',PriorMdl.VarNames,...
    'VariableNames',"Regime")
ans=4×1 table
                 Regime
                 ______

    Intercept    0.8829
    IPI          0.4547
    E             0.098
    WR           0.1692

Рассмотрим байесовскую модель линейной регрессии, содержащую один предиктор, и t-распределенную дисперсию возмущений с профилированным параметром степеней свободы

  • λj∼IG (в/2,2/в).

  • εj'λj∼N (0, λ jstart2)

  • f (β, start2) ∝1σ2

Эти допущения подразумевают:

  • εj∼t (0, start2,

  • λj'εj∼IG (

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

Для этой задачи семплер Гиббса хорошо подходит для оценки коэффициентов, поскольку можно смоделировать параметры байесовской модели линейной регрессии, обусловленной λ, а затем смоделировать λ из её условного распределения.

Генерировать n = 100 отклики из yt = 1 + 2xt + et, где x∈[0,2] и et∼N (0,0,52).

rng('default');
n = 100;
x = linspace(0,2,n)';
b0 = 1;
b1 = 2;
sigma = 0.5;
e = randn(n,1);
y = b0 + b1*x + sigma*e;

Ввести внешние ответы путем раздувания всех ответов ниже x = 0,25 в 3 раза.

y(x < 0.25) = y(x < 0.25)*3;

Подгонка линейной модели к данным. Постройте график данных и соответствующей линии регрессии.

Mdl = fitlm(x,y)
Mdl = 
Linear regression model:
    y ~ 1 + x1

Estimated Coefficients:
                   Estimate      SE       tStat       pValue  
                   ________    _______    ______    __________

    (Intercept)     2.6814     0.28433    9.4304    2.0859e-15
    x1             0.78974     0.24562    3.2153     0.0017653


Number of observations: 100, Error degrees of freedom: 98
Root Mean Squared Error: 1.43
R-squared: 0.0954,  Adjusted R-Squared: 0.0862
F-statistic vs. constant model: 10.3, p-value = 0.00177
figure;
plot(Mdl);
hl = legend;
hold on;

Figure contains an axes. The axes with title y vs. x1 contains 4 objects of type line. These objects represent Data, Fit, Confidence bounds.

Смоделированные отклонения, по-видимому, влияют на подогнанную линию регрессии.

Реализовать этот образец Гиббса:

  1. Нарисуйте параметры из заднего распределения β, start2 | y, x, λ. Сдуйте наблюдения на λ, создайте диффузную предыдущую модель с двумя коэффициентами регрессии и нарисуйте набор параметров из заднего. Первый коэффициент регрессии соответствует перехвату, поэтому укажите, чтоbayeslm не включают перехват.

  2. Вычислить остатки.

  3. Вычертите значения из условного задника λ.

Запустите образец Гиббса для 20000 итераций и примените период горения 5000. Укажите, что λ = 1, предварительно распределите для задних розыгрышей и инициализируйте λ для вектора единиц.

m = 20000;
nu = 1;
burnin = 5000;
lambda = ones(n,m + 1);
estBeta = zeros(2,m + 1);
estSigma2 = zeros(1,m + 1);
for j = 1:m
    yDef = y./sqrt(lambda(:,j));
    xDef = [ones(n,1) x]./sqrt(lambda(:,j));
    PriorMdl = bayeslm(2,'Model','diffuse','Intercept',false);
    [estBeta(:,j + 1),estSigma2(1,j + 1)] = simulate(PriorMdl,xDef,yDef);
    ep = y - [ones(n,1) x]*estBeta(:,j + 1);
    sp = (nu + 1)/2;
    sc =  2./(nu + ep.^2/estSigma2(1,j + 1));
    lambda(:,j + 1) = 1./gamrnd(sp,sc);
end

Хорошей практикой является диагностика образца MCMC путем изучения графиков трассировки. Для краткости этот пример пропускает эту задачу.

Вычислите среднее значение розыгрышей по заднему значению коэффициентов регрессии. Удаление розыгрышей периода горения.

postEstBeta = mean(estBeta(:,(burnin + 1):end),2)
postEstBeta = 2×1

    1.3971
    1.7051

Оценка перехвата ниже, и наклон выше, чем оценки, возвращаемые fitlm.

Постройте график надежной линии регрессии с линией регрессии, снабженной наименьшими квадратами.

h = gca;
xlim = h.XLim';
plotY = [ones(2,1) xlim]*postEstBeta;
plot(xlim,plotY,'LineWidth',2);
hl.String{4} = 'Robust Bayes';

Figure contains an axes. The axes with title y vs. x1 contains 5 objects of type line. These objects represent Data, Fit, Confidence bounds, Robust Bayes.

Линия регрессии подходит с использованием надежной байесовской регрессии, по-видимому, лучше подходит.

Максимальная оценка апостериорной вероятности (MAP) является задним режимом, то есть значением параметра, которое дает максимум заднего pdf. Если задний является аналитически труднореализуемым, то можно использовать выборку Монте-Карло для оценки MAP.

Рассмотрим модель линейной регрессии в разделе Моделирование значения параметра из предыдущих и последующих распределений.

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

load Data_NelsonPlosser
varNames = {'IPI' 'E' 'WR'};
X = DataTable{:,varNames};
y = DataTable{:,'GNPR'};

Создайте нормально-обратно-гамма-сопряженную предыдущую модель для параметров линейной регрессии. Укажите количество предикторов p и имена переменных.

p = 3;
PriorMdl = bayeslm(p,'ModelType','conjugate','VarNames',varNames)
PriorMdl = 
  conjugateblm with properties:

    NumPredictors: 3
        Intercept: 1
         VarNames: {4x1 cell}
               Mu: [4x1 double]
                V: [4x4 double]
                A: 3
                B: 1

 
           |  Mean     Std            CI95         Positive       Distribution     
-----------------------------------------------------------------------------------
 Intercept |  0      70.7107  [-141.273, 141.273]    0.500   t (0.00, 57.74^2,  6) 
 IPI       |  0      70.7107  [-141.273, 141.273]    0.500   t (0.00, 57.74^2,  6) 
 E         |  0      70.7107  [-141.273, 141.273]    0.500   t (0.00, 57.74^2,  6) 
 WR        |  0      70.7107  [-141.273, 141.273]    0.500   t (0.00, 57.74^2,  6) 
 Sigma2    | 0.5000   0.5000    [ 0.138,  1.616]     1.000   IG(3.00,    1)        
 

Оцените краевые апостериорные распределения β и start2.

rng(1); % For reproducibility
PosteriorMdl = estimate(PriorMdl,X,y);
Method: Analytic posterior distributions
Number of observations: 62
Number of predictors:   4
Log marginal likelihood: -259.348
 
           |   Mean      Std          CI95        Positive       Distribution      
-----------------------------------------------------------------------------------
 Intercept | -24.2494  8.7821  [-41.514, -6.985]    0.003   t (-24.25, 8.65^2, 68) 
 IPI       |   4.3913  0.1414   [ 4.113,  4.669]    1.000   t (4.39, 0.14^2, 68)   
 E         |   0.0011  0.0003   [ 0.000,  0.002]    1.000   t (0.00, 0.00^2, 68)   
 WR        |   2.4683  0.3490   [ 1.782,  3.154]    1.000   t (2.47, 0.34^2, 68)   
 Sigma2    |  44.1347  7.8020   [31.427, 61.855]    1.000   IG(34.00, 0.00069)     
 

Дисплей включает в себя статистику крайнего заднего распределения.

Извлеките заднее среднее β из задней модели и извлеките заднюю ковариацию β из сводки оценки, возвращенной summarize.

estBetaMean = PosteriorMdl.Mu;
Summary = summarize(PosteriorMdl);
EstBetaCov = Summary.Covariances{1:(end - 1),1:(end - 1)};

estBetaMean является вектором 4 на 1, представляющим среднее краевого заднего β. EstBetaCov является матрицей 4 на 4, представляющей ковариационную матрицу задней из β.

Нарисуйте 10000 значений параметров из заднего распределения.

rng(1); % For reproducibility
[BetaSim,sigma2Sim] = simulate(PosteriorMdl,'NumDraws',1e5);

BetaSim является матрицей 4 на 10000 произвольно нарисованных коэффициентов регрессии. sigma2Sim является 1 на 10000 вектором случайного распределения возмущений.

Транспонируйте и стандартизируйте матрицу коэффициентов регрессии. Вычислите корреляционную матрицу коэффициентов регрессии.

estBetaStd = sqrt(diag(EstBetaCov)');
BetaSim = BetaSim';
BetaSimStd = (BetaSim - estBetaMean')./estBetaStd;
BetaCorr = corrcov(EstBetaCov);
BetaCorr = (BetaCorr + BetaCorr')/2; % Enforce symmetry

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

betaPDF = mvtpdf(BetaSimStd,BetaCorr,68);
a = 34;
b = 0.00069;
igPDF = @(x,ap,bp)1./(gamma(ap).*bp.^ap).*x.^(-ap-1).*exp(-1./(x.*bp));...
    % Inverse gamma pdf
sigma2PDF = igPDF(sigma2Sim,a,b);

Найдите смоделированные значения, которые максимизируют соответствующие pdfs, то есть задние режимы.

[~,idxMAPBeta] = max(betaPDF);
[~,idxMAPSigma2] = max(sigma2PDF);
betaMAP = BetaSim(idxMAPBeta,:);
sigma2MAP = sigma2Sim(idxMAPSigma2);

betaMAP и sigma2MAP являются оценками MAP.

Поскольку задняя часть β является симметричной и унимодальной, задняя средняя и MAP должны быть одинаковыми. Сравните оценку MAP β с его задним средним значением.

table(betaMAP',PosteriorMdl.Mu,'VariableNames',{'MAP','Mean'},...
    'RowNames',PriorMdl.VarNames)
ans=4×2 table
                    MAP         Mean   
                 _________    _________

    Intercept      -24.559      -24.249
    IPI             4.3964       4.3913
    E            0.0011389    0.0011202
    WR              2.4473       2.4683

Оценки довольно близки друг к другу.

Оцените аналитическую моду заднегруди, относящейся к start2. Сравните его с расчётной МАП

igMode = 1/(b*(a+1))
igMode = 41.4079
sigma2MAP
sigma2MAP = 41.4075

Эти оценки также довольно близки.

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

свернуть все

Стандартная байесовская модель линейной регрессии или модель для выбора переменных предиктора, указанная в этой таблице как объект модели.

Объект моделиОписание
conjugateblmЗависимая, нормально-обратно-гамма-сопряженная модель, возвращаемая bayeslm или estimate
semiconjugateblmНезависимая, нормально-обратно-гамма-полунъюгатная модель, возвращаемая bayeslm
diffuseblmДиффузная предыдущая модель, возвращенная bayeslm
empiricalblmПредыдущая модель, характеризующаяся выборками из предыдущих распределений, возвращенная bayeslm или estimate
customblmОбъявленная функция предыдущего распределения, возвращенная bayeslm
mixconjugateblmЗависимая, Гауссовская гамма инверсии смеси спрягает модель для выбора переменной предсказателя SSVS, возвращенного bayeslm
mixsemiconjugateblmНезависимая модель Gaussian-mixe-inverse-gamma semaconjugate для выбора переменных предсказателя SSVS, возвращаемая bayeslm
lassoblmМодель регрессии байесовского лассо, возвращенная bayeslm

Примечание

  • Как правило, объекты модели, возвращаемые estimate представляют собой краевые задние распределения. Когда вы оцениваете заднюю, используя estimate, если задать оценку условного задника, то estimate возвращает предыдущую модель.

  • Если Mdl является diffuseblm модель, затем необходимо также предоставить X и y потому что simulate невозможно извлечь из неправильного предыдущего распространения.

  • Если вы поставляете lassoblm, mixconjugateblm, или mixsemiconjugateblm объект модели, предоставьте данные X и yи нарисуйте одно значение из заднего, тогда лучше всего инициализировать пробоотборник Гиббса, указав BetaStart и Sigma2Start аргументы пары имя-значение.

Данные предиктора для модели множественной линейной регрессии, указанной как numObservationsоколо-PriorMdl.NumPredictors числовая матрица. numObservations - количество наблюдений и должно быть равно длине y.

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

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

Данные ответа для модели множественной линейной регрессии, заданной как числовой вектор с numObservations элементы.

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

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'Sigma2',2 определяет моделирование из условного апостериорного распределения коэффициентов регрессии с учетом данных и заданной дисперсии возмущений 2.
Опции для всех моделей

свернуть все

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

Совет

Если Mdl является empiricalblm или customblm объект модели, то хорошая практика состоит в том, чтобы указать период горения с BurnIn и уменьшающий множитель с Thin. Дополнительные сведения о скорректированном размере выборки см. в разделе Алгоритмы.

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

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

Опции для всех моделей, кроме эмпирических

свернуть все

Значение коэффициентов регрессии для моделирования из условного распределения дисперсии возмущений, указанное как пара, разделенная запятыми, состоящая из 'Beta' и (Mdl.Intercept + Mdl.NumPredictors) -по-1 числовой вектор. При использовании заднего распределения ,simulate черпает из δ (start2 |y,X,β = Beta), где y является y, X является X, и Beta - значение 'Beta'. Если Mdl.Intercept является true, то Beta(1) соответствует перехвату модели. Все остальные значения соответствуют переменным предиктора, которые составляют столбцы X.

Невозможно указать Beta и Sigma2 одновременно.

По умолчанию simulate не черпает из условного заднегруди

Пример: 'Beta',1:3

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

Значение дисперсии возмущений для моделирования из условного распределения коэффициентов регрессии, указанного как пара, разделенная запятыми, состоящая из 'Sigma2' и положительный числовой скаляр. При использовании заднего распределения, simulate черпает из δ (β |y,X,Sigma2), где y является y, X является X, и Sigma2 - значение 'Sigma2'.

Невозможно указать Sigma2 и Beta одновременно.

По умолчанию simulate не черпает из условной задней части β.

Пример: 'Sigma2',1

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

Опции для всех моделей, кроме сопряженных и эмпирических

свернуть все

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

Совет

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

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

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

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

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

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

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

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

Совет

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

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

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

Начальные значения коэффициентов регрессии для дискретизатора, указанные как разделенная запятыми пара, состоящая из 'BetaStart' и вектор числового столбца с (Mdl.Intercept + Mdl.NumPredictors) элементы. По умолчанию BetaStart - оценка обычных наименьших квадратов (OLS).

Совет

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

Пример: 'BetaStart',[1; 2; 3]

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

Начальные значения дисперсии возмущений для пробоотборника, указанные как разделенная запятыми пара, состоящая из 'Sigma2Start' и положительный числовой скаляр. По умолчанию Sigma2Start - остаточная среднеквадратическая ошибка ОЛС.

Совет

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

Пример: 'Sigma2Start',4

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

Опции для моделей SSVS

свернуть все

Начальные значения скрытых режимов для пробоотборника, указанные как разделенная запятыми пара, состоящая из 'RegimeStart' и вектор логического столбца с (Mdl.Intercept + Mdl.NumPredictors) элементы. RegimeStart(k) = true указывает на включение переменной Mdl.VarNames(k), и RegimeStart(k) = false указывает на исключение этой переменной.

Совет

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

Пример: 'RegimeStart',logical(randi([0 1],Mdl.Intercept + Mdl.NumPredictors,1))

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

Опции для пользовательских моделей

свернуть все

Репараметризация start2 как log (start2) при апостериорной оценке и моделировании, определяемая как разделенная запятыми пара, состоящая из 'Reparameterize' и значение в этой таблице.

СтоимостьОписание
falsesimulate не производит репараметризацию,
truesimulate репараметризует start2 как log (start2 ).simulate преобразует результаты обратно в исходный масштаб и не изменяет функциональную форму PriorMdl.LogPDF.

Совет

Если вы испытываете числовые неустойчивости при апостериорной оценке или моделировании start2, то укажите 'Reparameterize',true.

Пример: 'Reparameterize',true

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

Дискретизатор MCMC, указанный как разделенная запятыми пара, состоящая из 'Sampler' и значение в этой таблице.

СтоимостьОписание
'slice'Пробоотборник срезов
'metropolis'Выборка Random Walk Metropolis
'hmc'Гамильтонианский образец Монте-Карло (HMC)

Совет

  • Чтобы повысить качество розыгрышей MCMC, настройте пробоотборник.

    1. Перед вызовом simulate, укажите параметры настройки и их значения с помощью sampleroptions. Например, чтобы задать ширину образца среза width, использовать:

      options = sampleroptions('Sampler',"slice",'Width',width);

    2. Укажите объект, содержащий спецификации параметров настройки, возвращаемые sampleroptions с помощью 'Options' аргумент пары имя-значение. Например, для использования параметров настройки в options, укажите:

      'Options',options

  • Если указан образец HMC, то рекомендуется задать градиент для некоторых переменных, по крайней мере. simulate прибегает к численному вычислению любых отсутствующих частных производных (NaN значения) в градиентном векторе.

Пример: 'Sampler',"hmc"

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

Параметры пробоотборника, указанные как пара, разделенная запятыми, состоящая из 'Options' и массив структуры, возвращенный sampleroptions. Использовать 'Options' для указания дискретизатора MCMC и его значений параметров настройки.

Пример: 'Options',sampleroptions('Sampler',"hmc")

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

Типичная ширина интервала выборки вокруг текущего значения в предельных распределениях для дискретизатора среза, указанного как пара, разделенная запятыми, состоящая из 'Width' и положительный числовой скаляр или a (PriorMdl.Intercept + PriorMdl.NumPredictors + 1) -по-1 числовой вектор положительных значений. Первый элемент соответствует перехвату модели, если он существует в модели. СледующееPriorMdl.NumPredictors элементы соответствуют коэффициентам переменных предиктора, упорядоченным столбцами данных предиктора. Последний элемент соответствует отклонению модели.

  • Если Width является скаляром, то simulate применяется Width ко всем PriorMdl.NumPredictors + PriorMdl.Intercept + 1 предельные распределения.

  • Если Width является числовым вектором, то simulate применяет первый элемент к перехвату (если он существует), следующий PriorMdl.NumPredictors элементы к коэффициентам регрессии, соответствующим переменным предиктора в Xи последний элемент дисперсии возмущений.

  • Если размер выборки (size(X,1)) меньше 100, то Width является 10 по умолчанию.

  • Если размер выборки не менее 100, то simulate наборы Width к вектору соответствующих задних стандартных отклонений по умолчанию, предполагая диффузную предшествующую модель (diffuseblm).

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

simulate посылает Width в slicesample функция. Дополнительные сведения см. в разделе slicesample.

Совет

  • Для обеспечения максимальной гибкости задайте ширину образца среза width с помощью 'Options' аргумент пары имя-значение. Например:

    'Options',sampleroptions('Sampler',"slice",'Width',width)

Пример: 'Width',[100*ones(3,1);10]

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

свернуть все

Смоделированные коэффициенты регрессии, возвращенные как (Mdl.Intercept + Mdl.NumPredictorsоколо-NumDraws числовая матрица. Строки соответствуют переменным в Mdl.VarNamesи столбцы соответствуют отдельным, последовательным, независимым розыгрышам из распределения.

Моделируемая дисперсия возмущения, возвращенная как 1-по-NumDraws числовой вектор положительных значений. Столбцы соответствуют отдельным, последовательным, независимым розыгрышам из распределения.

Смоделированные режимы, указывающие на включение переменных или исключение из модели, возвращаемые как (Mdl.Intercept + Mdl.NumPredictorsоколо-NumDraws логическая матрица. Строки соответствуют переменным в Mdl.VarNamesи столбцы соответствуют отдельным, последовательным, независимым розыгрышам из распределения.

simulate прибыль Regime только если Mdl является mixconjugateblm или mixsemiconjugateblm объект модели.

RegimeSim(k,d) = true указывает на включение переменной Mdl.VarNames(k) в модели розыгрыша d, и RegimeSim(k,d) = false указывает на исключение этой переменной в модели рисования d.

Ограничения

  • simulate не может извлекать значения из неправильного распределения, то есть распределения, плотность которого не интегрируется в 1.

  • Если Mdl является empiricalblm объект модели, то вы не можете указать Beta или Sigma2. Нельзя моделировать из условных задних распределений с помощью эмпирического распределения.

Подробнее

свернуть все

Байесовская модель линейной регрессии

Байесовская модель линейной регрессии рассматривает параметры β и 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 вектор, содержащий все возмущения. Эти допущения подразумевают, что вероятность данных

    (β, start2 | y, x) =∏t=1Tϕ (yt; xtβ, start2).

    (yt; xtβ, start2) - гауссова плотность вероятности со средним значением xtβ и дисперсией start2, оцениваемой при yt;.

Перед рассмотрением данных необходимо наложить совместное предварительное предположение о распределении на (β, start2). В байесовском анализе выполняется обновление распределения параметров с использованием информации о параметрах, полученных из вероятности получения данных. Результатом является совместное апостериорное распределение (β, start2) или условное апостериорное распределение параметров.

Алгоритмы

  • Каждый раз, когда simulate должен оценить апостериорное распределение (например, когда Mdl представляет собой предыдущее распределение, и вы поставляете X и y) и задняя является аналитически отслеживаемой, simulate моделируется непосредственно с задней стороны. В противном случае simulate прибегает к моделированию Монте-Карло для оценки заднего. Дополнительные сведения см. в разделе Апостериорная оценка и вывод.

  • Если Mdl является задней моделью сустава, то simulate моделирует данные из него по-разному по сравнению с Mdl является совместной предыдущей моделью, и вы поставляете X и y. Таким образом, если задать одно и то же случайное начальное число и создать случайные значения обоими способами, то могут не быть получены одинаковые значения. Однако соответствующие эмпирические распределения, основанные на достаточном количестве розыгрышей, фактически эквивалентны.

  • На этом рисунке показано, как simulate уменьшает выборку, используя значения NumDraws, Thin, и BurnIn.

    Прямоугольники представляют последовательные розыгрыши из распределения. simulate удаляет белые прямоугольники из образца. Остающееся NumDraws образец составляют черные прямоугольники.

  • Если Mdl является semiconjugateblm объект модели, затем simulate образцы из заднего распределения путем применения образца Гиббса.

    1. simulate использует значение по умолчанию Sigma2Start для start2 и рисует значение β из λ (β 'start2, X, y).

    2. simulate рисует значение, равное λ 2, из δ2 | β, X, y), используя ранее сгенерированное значение β.

    3. Функция повторяет шаги 1 и 2 до сходимости. Чтобы оценить сходимость, нарисуйте график трассировки образца.

    При указании BetaStart, то simulate вычерчивает значение, равное start2, из δ (start2 | β, X, y), чтобы запустить пробоотборник Гиббса.simulate не возвращает это генерируемое значение, равное

  • Если Mdl является empiricalblm объект модели и вы не поставляете X и y, то simulate рисует из Mdl.BetaDraws и Mdl.Sigma2Draws. Если NumDraws меньше или равно numel(Mdl.Sigma2Draws), то simulate возвращает первое NumDraws элементы Mdl.BetaDraws и Mdl.Sigma2Draws в виде случайных розыгрышей для соответствующего параметра. В противном случае simulate случайные повторные выборки NumDraws элементы из Mdl.BetaDraws и Mdl.Sigma2Draws.

  • Если Mdl является customblm объект модели, затем simulate использует пробоотборник MCMC для извлечения из заднего распределения. При каждой итерации программное обеспечение объединяет текущие значения коэффициентов регрессии и дисперсии возмущений в (Mdl.Intercept + Mdl.NumPredictors + 1) -by-1 вектор и передает его вMdl.LogPDF. Значение дисперсии возмущений является последним элементом этого вектора.

  • Пробоотборник HMC требует как логарифмической плотности, так и его градиента. Градиент должен быть (NumPredictors+Intercept+1)вектор -by-1. Если производные определенных параметров трудно вычислить, то в соответствующих местах градиента подать NaN вместо этого значения. simulate заменяет NaN значения с числовыми производными.

  • Если Mdl является lassoblm, mixconjugateblm, или mixsemiconjugateblm объект модели и поставка X и y, то simulate образцы из заднего распределения путем применения образца Гиббса. Если данные не предоставляются, то simulate образцы из аналитических, безусловных предыдущих распределений.

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

  • Если Mdl является mixconjugateblm или mixsemiconjugateblm, то simulate сначала извлекает из распределения режима, учитывая текущее состояние цепочки (значения RegimeStart, BetaStart, и Sigma2Start). Если нарисовать один образец и не указывать значения для RegimeStart, BetaStart, и Sigma2Start, то simulate использует значения по умолчанию и выдает предупреждение.

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