Note: This page has been translated by MathWorks. Click here to see

To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

Simulate regression coefficients and disturbance variance of Bayesian linear regression model

```
[BetaSim,sigma2Sim]
= simulate(Mdl)
```

```
[BetaSim,sigma2Sim]
= simulate(Mdl,X,y)
```

```
[BetaSim,sigma2Sim]
= simulate(___,Name,Value)
```

```
[BetaSim,sigma2Sim,RegimeSim]
= simulate(___)
```

`[`

returns a random vector of regression coefficients (`BetaSim`

,`sigma2Sim`

]
= simulate(`Mdl`

)`BetaSim`

)
and a random disturbance variance (`sigma2Sim`

) drawn from the
Bayesian linear regression
model
`Mdl`

of *β* and
*σ*^{2}.

`[`

draws from the marginal posterior distributions produced or updated by
incorporating the predictor data `BetaSim`

,`sigma2Sim`

]
= simulate(`Mdl`

,`X`

,`y`

)`X`

and corresponding response
data `y`

.

If

`Mdl`

is a joint prior model, then`simulate`

produces the marginal posterior distributions by updating the prior model with information about the parameters that it obtains from the data.If

`Mdl`

is a marginal posterior model, then`simulate`

updates the posteriors with information about the parameters that it obtains from the additional data. The complete data likelihood is composed of the additional data`X`

and`y`

, and the data that created`Mdl`

.

`NaN`

s in the data indicate missing values, which
`simulate`

removes by using list-wise deletion.

`[`

uses any of the input argument combinations in the previous syntaxes and
additional options specified by one or more name-value pair arguments. For
example, you can specify a value for `BetaSim`

,`sigma2Sim`

]
= simulate(___,`Name,Value`

)*β* or
*σ*^{2} to simulate from the
*conditional* posterior distribution of one parameter,
given the specified value of the other parameter.

`[`

also returns draws from the latent regime distribution if `BetaSim`

,`sigma2Sim`

,`RegimeSim`

]
= simulate(___)`Mdl`

is a Bayesian linear regression model for stochastic search variable selection
(SSVS), that is, if `Mdl`

is a `mixconjugateblm`

or `mixsemiconjugateblm`

model object.

`simulate`

cannot draw values from an*improper distribution*, that is, a distribution whose density does not integrate to 1.If

`Mdl`

is an`empiricalblm`

model object, then you cannot specify`Beta`

or`Sigma2`

. You cannot simulate from the conditional posterior distributions by using an empirical distribution.

Whenever

`simulate`

must estimate a posterior distribution (for example, when`Mdl`

represents a prior distribution and you supply`X`

and`y`

) and the posterior is analytically tractable,`simulate`

simulates directly from the posterior. Otherwise,`simulate`

resorts to Monte Carlo simulation to estimate the posterior. For more details, see Posterior Estimation and Inference.If

`Mdl`

is a joint posterior model, then`simulate`

simulates data from it differently compared to when`Mdl`

is a joint prior model and you supply`X`

and`y`

. Therefore, if you set the same random seed and generate random values both ways, then you might not obtain the same values. However, corresponding empirical distributions based on a sufficient number of draws is effectively equivalent.This figure shows how

`simulate`

reduces the sample by using the values of`NumDraws`

,`Thin`

, and`BurnIn`

.Rectangles represent successive draws from the distribution.

`simulate`

removes the white rectangles from the sample. The remaining`NumDraws`

black rectangles compose the sample.If

`Mdl`

is a`semiconjugateblm`

model object, then`simulate`

samples from the posterior distribution by applying the Gibbs sampler.`simulate`

uses the default value of`Sigma2Start`

for*σ*^{2}and draws a value of*β*from*π*(*β*|*σ*^{2},*X*,*y*).`simulate`

draws a value of*σ*^{2}from*π*(*σ*^{2}|*β*,*X*,*y*) by using the previously generated value of*β*.The function repeats steps 1 and 2 until convergence. To assess convergence, draw a trace plot of the sample.

If you specify

`BetaStart`

, then`simulate`

draws a value of*σ*^{2}from*π*(*σ*^{2}|*β*,*X*,*y*) to start the Gibbs sampler.`simulate`

does not return this generated value of*σ*^{2}.If

`Mdl`

is an`empiricalblm`

model object and you do not supply`X`

and`y`

, then`simulate`

draws from`Mdl.BetaDraws`

and`Mdl.Sigma2Draws`

. If`NumDraws`

is less than or equal to`numel(Mdl.Sigma2Draws)`

, then`simulate`

returns the first`NumDraws`

elements of`Mdl.BetaDraws`

and`Mdl.Sigma2Draws`

as random draws for the corresponding parameter. Otherwise,`simulate`

randomly resamples`NumDraws`

elements from`Mdl.BetaDraws`

and`Mdl.Sigma2Draws`

.If

`Mdl`

is a`customblm`

model object, then`simulate`

uses an MCMC sampler to draw from the posterior distribution. At each iteration, the software concatenates the current values of the regression coefficients and disturbance variance into an (`Mdl.Intercept`

+`Mdl.NumPredictors`

+ 1)-by-1 vector, and passes it to`Mdl.LogPDF`

. The value of the disturbance variance is the last element of this vector.The HMC sampler requires both the log density and its gradient. The gradient should be a

`(NumPredictors+Intercept+1)`

-by-1 vector. If the derivatives of certain parameters are difficult to compute, then, in the corresponding locations of the gradient, supply`NaN`

values instead.`simulate`

replaces`NaN`

values with numerical derivatives.If

`Mdl`

is a`lassoblm`

,`mixconjugateblm`

, or`mixsemiconjugateblm`

model object and you supply`X`

and`y`

, then`simulate`

samples from the posterior distribution by applying the Gibbs sampler. If you do not supply the data, then`simulate`

samples from the analytical, unconditional prior distributions.`simulate`

does not return default starting values that it generates.If

`Mdl`

is a`mixconjugateblm`

or`mixsemiconjugateblm`

, then`simulate`

draws from the regime distribution first, given the current state of the chain (the values of`RegimeStart`

,`BetaStart`

, and`Sigma2Start`

). If you draw one sample and do not specify values for`RegimeStart`

,`BetaStart`

, and`Sigma2Start`

, then`simulate`

uses the default values and issues a warning.

`conjugateblm`

|`customblm`

|`diffuseblm`

|`empiricalblm`

|`lassoblm`

|`mixconjugateblm`

|`mixsemiconjugateblm`

|`semiconjugateblm`