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

Моделируйте коэффициенты регрессии и отклонение воздействия Байесовой модели линейной регрессии

Синтаксис

[BetaSim,sigma2Sim] = simulate(Mdl)
[BetaSim,sigma2Sim] = simulate(Mdl,X,y)
[BetaSim,sigma2Sim] = simulate(___,Name,Value)
[BetaSim,sigma2Sim,RegimeSim] = 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.

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

пример

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

пример

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

Примеры

свернуть все

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

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

\forall 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. 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, соответственно, но чертятся от следующего.

Полагайте, что модель регрессии в Моделирует Значение параметров от Предшествующих и Апостериорных распределений.

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

load Data_NelsonPlosser
varNames = {'IPI' 'E' 'WR'};
X = DataTable{:,varNames};
y = DataTable{:,'GNPR'};
p = 3;
PriorMdl = bayeslm(p,'ModelType','conjugate','VarNames',varNames);
PosteriorMdl = estimate(PriorMdl,X,y,'Display',false);
summaryTbl = summarize(PosteriorMdl);
summaryTbl = summaryTbl.MarginalDistributions;

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

Несмотря на то, что крайние и условные апостериорные распределения β и σ2 аналитически послушны, этот пример особое внимание о том, как реализовать сэмплер Гиббса, чтобы воспроизвести известные результаты.

Оцените модель снова, но используйте сэмплер Гиббса. Альтернатива между выборкой от условных апостериорных распределений параметров. Демонстрационные 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;
plot(sigma2Draws)
ylabel('MCMC Draw')
xlabel('Simulation Index')
title('Trace plot — Sigma2')

Выборки Цепи Маркова Монте-Карло (MCMC), кажется, сходятся и смешиваются хорошо.

Применяйтесь электротермотренировка 1 000 чертит, и затем вычислите средние значения и стандартные отклонения выборок 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));
[summaryTbl(:,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|σ2,γk=γkσVk1Z1+(1-γk)σVk2Z2, где Z1 и Z2 независимые, стандартные нормальные случайные переменные. Поэтому коэффициенты имеют Гауссово распределение смеси. Примите, что все коэффициенты условно независимы, априорно, но они зависят от отклонения воздействия.

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

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

Создайте предшествующую модель для выполнения SSVS. AssumeThat β и σ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');

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

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 распределил отклонение воздействия с профилируемым параметром степеней свободы ν.

  • λ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;

Моделируемые выбросы, кажется, влияют на подходящую линию регрессии.

Реализуйте этот сэмплер Гиббса:

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

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

  3. Чертите значения от условного выражения, следующего из λ.

Запустите сэмплер Гиббса для 20 000 итераций и примените электротермотренировку 5 000. Задать ν=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';

Подгонка линии регрессии использование устойчивой Байесовой регрессии, кажется, лучшая подгонка.

Максимум по опыту вероятность (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)        
 

Оцените крайние апостериорные распределения β и σ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 10,000 матрица случайным образом чертивших коэффициентов регрессии. sigma2Sim 1 10,000 вектор случайным образом чертивших отклонений воздействия.

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

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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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) элементы. RegimeStart(k) = true указывает на включение переменной Mdl.VarNames(k) и RegimeStart(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

Типы данных: логический

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

ЗначениеОписание
'slice'Сэмплер среза
'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' и положительного числового скаляра или (PriorMdl.Intercept + PriorMdl.NumPredictors + 1)-by-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 является объектом модели mixsemiconjugateblm или mixconjugateblm.

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

Ограничения

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

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

Больше о

свернуть все

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

Bayesian linear regression model обрабатывает параметры β и σ 2 в модели yt нескольких линейных регрессий (MLR) = xt β + εt как случайные переменные.

В течение многих времен t = 1..., T:

  • yt является наблюдаемым ответом.

  • xt является 1 на (p + 1) вектор - строка из наблюдаемых величин предикторов p. Размещать образцовое прерывание, x 1t = 1 для всего t.

  • β (p + 1)-by-1 вектор-столбец коэффициентов регрессии, соответствующих переменным, которые составляют столбцы xt.

  • εt является случайным воздействием со средним значением нуля и Cov (ε) = σ 2IT×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. Поэтому, если вы устанавливаете тот же случайный seed и генерируете случайные значения оба пути, затем вы не можете получить те же значения. Однако соответствующие эмпирические распределения на основе достаточного числа ничьих эффективно эквивалентны.

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

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

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

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

    2. simulate чертит значение σ 2 от π (σ 2|β, X, y) при помощи ранее сгенерированного значения β.

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

    Если вы задаете BetaStart, то simulate чертит значение σ 2 от π (σ 2|β, X, y), чтобы запустить сэмплер Гиббса. 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