simulate

Симулируйте коэффициенты регрессии и отклонение нарушения порядка байесовской линейной регрессионой модели

Описание

пример

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

  • Если 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) использует любой из комбинаций входных аргументов в предыдущих синтаксисах и дополнительные опции, заданные одним или несколькими аргументы пары "имя-значение". Для примера можно задать значение для β или σ2 для симуляции из conditional апостериорного распределения одного параметра, учитывая заданное значение другого параметра.

пример

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

Примеры

свернуть все

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

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

Для всех t, εt - серия независимых гауссовских нарушений порядка со средним значением 0 и отклонением σ2.

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

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

  • σ2IG(A,B). 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. The 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, соответственно, но вытягиваются из апостериорной.

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

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

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 отображается в командной строке.

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

Оцените модель еще раз, но используйте семплер Гиббса. Чередуйте выборку из условных апостериорных распределений параметров. Выберете 10 000 раз и создайте переменные для предварительного распределения. Запустите семплер путем рисования из условного апостериора β данный σ2=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 учитывают различия.

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

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

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

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

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

Создайте предыдущую модель для выполнения SSVS. Предположим, что β и σ2являются зависимыми (модель сопряженной смеси). Задайте количество предикторов 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

Рассмотрим байесовскую линейную регрессионую модель, содержащую один предиктор, и нарушение порядка распределённого отклонения с профилированным параметром степеней свободы ν.

  • λjIG(ν/2,2/ν).

  • εj|λjN(0,λjσ2)

  • f(β,σ2)1σ2

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

  • εjt(0,σ2,ν)

  • λj|εjIG(ν+12,2ν+εj2/σ2)

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

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

Произвести n=100 ответы от yt=1+2xt+et, где x[0,2] и etN(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. Нарисуйте параметры из апостериорного распределения β,σ2|y,x,λ. Дефляция наблюдений λ, создайте диффузную предшествующую модель с двумя коэффициентами регрессии и нарисуйте набор параметров из апостериорной. Первый коэффициент регрессии соответствует точке пересечения, поэтому задайте, что bayeslm не включать точку пересечения.

  2. Вычислите невязки.

  3. Нарисуйте значения из условного апостериора λ.

Запустите семплер Гиббса в течение 20 000 итераций и примените период горения 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.

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

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

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)        
 

Оцените маргинальные апостериорные распределения β и σ2.

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, представляющая ковариационную матрицу апостериорной функции β.

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

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

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

Оцените аналитический режим апостериорной функции σ2. Сравните его с предполагаемым MAP σ2.

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Независимая, Гауссова-смесь-обратная-гамма полуконъюгатная модель для выбора переменной предиктора SSVS, возвращенная bayeslm
lassoblmБайесовская регрессионая модель лассо, возвращенная bayeslm

Примечание

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

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

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

Данные предиктора для многофакторной линейной регрессии, заданные как numObservations-by- 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) -by-1 числовой вектор. При использовании апостериорного распределения ,simulate черпает из π (σ2| y, X, β = Beta), где y является y, X является X, и Beta - значение 'Beta'. Если Mdl.Intercept является true, затем Beta(1) соответствует точка пересечения модели. Все другие значения соответствуют переменным предиктора, которые составляют столбцы X.

Вы не можете задать Beta и Sigma2 одновременно.

По умолчанию, simulate не черпает из условного апостериора σ2.

Пример: '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 - остаточная средняя квадратичная невязка OLS.

Совет

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

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

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

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

свернуть все

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

Совет

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

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

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

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

свернуть все

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

ЗначениеОписание
falsesimulate не репараметризовывает σ2.
truesimulate репараметрирует σ2 как логарифмический (σ2). simulate преобразует результаты назад в исходную шкалу и не изменяет функциональную форму PriorMdl.LogPDF.

Совет

Если вы испытываете числовые нестабильности во время апостериорной оценки или симуляции σ2, затем задайте 'Reparameterize',true.

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

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

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

ЗначениеОписание
'slice'Пробоотборник среза
'metropolis'Случайная прогулка Metropolis sampler
'hmc'Гамильтониан Монте-Карло (HMC) семплер

Совет

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

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

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

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

      'Options',options

  • Если вы задаете sampler 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) -by- NumDraws числовая матрица. Строки соответствуют переменным в Mdl.VarNames, и столбцы соответствуют отдельным, последовательным, независимым вытяжкам из распределения.

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

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

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

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

Ограничения

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

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

Подробнее о

свернуть все

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

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

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

    ϕ (yt; xtβ, σ2) - Гауссова плотность вероятностей со средней xtβ и отклонением σ2 оценивается при yt;.

Прежде чем рассматривать данные, вы накладываете joint prior distribution предположение на (β, σ2). В байесовском анализе вы обновляете распределение параметров с помощью информации о параметрах, полученных из вероятности данных. Результатом является joint posterior distribution, σ2) или conditional posterior distributions параметров.

Алгоритмы

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

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

  • Этот рисунок показывает, как simulate уменьшает выборку при помощи значений NumDraws, Thin, и BurnIn.

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

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

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

    2. simulate рисует значение σ2 от π (σ2|<reservedrangesplaceholder3>,<reservedrangesplaceholder2>,<reservedrangesplaceholder1>) при помощи ранее сгенерированного значения β.

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

    Если вы задаете BetaStart, затем simulate рисует значение σ2 от π (σ2|<reservedrangesplaceholder2>,<reservedrangesplaceholder1>,<reservedrangesplaceholder0> ) для запуска пробоотборника Гиббса.simulate не возвращает это сгенерированное значение σ2.

  • Если 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