Wolfram Function Repository
Instant-use add-on functions for the Wolfram Language
Function Repository Resource:
Perform Bayesian linear regression with conjugate priors
ResourceFunction["BayesianLinearRegression"][{{var11,var12,…,y1},{var21,var22,…,y2},…},{f1,f2,…},{var1,var2,…}] performs a Bayesian linear model fit on the data using basis functions fi with independent variables vari. | |
ResourceFunction["BayesianLinearRegression"][{{var11,var12,…}→y1,{var21,var22,…}→y2,…},…] generates the same result. | |
ResourceFunction["BayesianLinearRegression"][{{var11,var12,…},{var21,var22,…},…}→{y1,y2,…},…] generates the same result. |
"PriorParameters" | values of the hyperparameters corresponding to the prior distribution of the fit coefficients. |
"PosteriorParameters" | values of the hyperparameters corresponding to the posterior distribution of the fit coefficients. |
"LogEvidence" | the natural log of the marginal likelihood , which is the Bayesian goodness-of-fit measure of the model. |
"Prior" | prior distributions. |
"Posterior" | posterior distributions. |
"Basis" | the basis functions supplied by the user. |
"IndependentVariables" | the independent variables supplied by the user. |
"Functions" | functions that yield distributions when applied arbitrary hyperparameters; only included when the "IncludeFunctions"→True option is set. |
"PredictiveDistribution" | predictive distribution of the data. |
"UnderlyingValueDistribution" | the distribution of of the fit line of the data. |
"RegressionCoefficientDistribution" | marginal distribution of the fit coefficients. |
"ErrorDistribution" | marginal distribution of the variance (for 1D regression) or covariance matrix. |
Generate a Bayesian linear regression on random data:
In[1]:= |
Out[1]= |
Generate test data:
In[2]:= |
Out[2]= |
Fit the data with a first-order polynomial:
In[3]:= |
Out[3]= |
Show the predictive distribution of the model and the distribution of the fit line (dashed):
In[4]:= |
Out[4]= |
Plot the joint distribution of the coefficients a and b in the regression equation y=ax+b:
In[5]:= |
Out[5]= |
Plot the PDF of the posterior variance of the residuals:
In[6]:= |
Out[6]= |
Fit the data with a polynomial of arbitrary degree and compare the prediction bands and log-evidence of fits up to degree 4:
In[7]:= |
Out[7]= |
BayesianLinearRegression can do multivariate regression. For example, generate some 3D data:
In[8]:= |
Out[8]= |
Do a regression where the x-coordinate is treated as the independent variable and y and z are both dependent on x:
In[9]:= |
Out[9]= |
The predictive joint distribution for y and z is a MultivariateTDistribution:
In[10]:= |
Out[10]= |
Visualize the joint distribution as an animation:
In[11]:= |
Out[11]= |
Just like LinearModelFit, BayesianLinearRegression constructs a model with bias term by default:
In[12]:= |
Out[12]= |
Force the intercept to be zero:
In[13]:= |
Out[13]= |
The prior can be specified in the same format as the parameter outputs of the Bayesian linear regression. This can be used to update a model with new observations. To illustrate this, generate some test data and divide the dataset into two parts:
In[14]:= |
Out[14]= |
Fit the first half of the data:
In[15]:= |
Out[15]= |
Use the posterior parameters of model1 as the prior to update the model with the second half of the dataset:
In[16]:= |
Out[16]= |
The result is exactly the same as when you would fit all of the data in a single step:
In[17]:= |
Out[17]= |
When "IncludeFunctions"→True, the returned association contains the key "Functions". This key holds the functions that can be used to generate distributions from arbitrary values of hyperparameters:
In[18]:= |
Out[18]= |
The posterior distribution is obtained from the predictive distribution function:
In[19]:= |
Out[19]= |
Apply it to the posterior parameters:
In[20]:= |
Out[20]= |
Here is a dataset where it is unclear if the fit should be first or second order:
In[21]:= |
Out[21]= |
Fit the data with polynomials up to fourth degree, rank the log-evidences and inspect them:
In[22]:= |
Out[22]= |
Calculate the weights for each fit:
In[23]:= |
Out[23]= |
Because the weights for the first and second order fits are so close, the correct Bayesian treatment is to include both in the final regression. Define a mixture of posterior predictive distributions:
In[24]:= |
Out[24]= |
Compare the mixture fit to the individual polynomial regressions:
In[25]:= |
Out[25]= |
Symbolically calculate the predictive posterior after a single observation for any prior:
In[26]:= |
Out[26]= |
Visualize the prediction bands:
In[27]:= |
Out[27]= |
This work is licensed under a Creative Commons Attribution 4.0 International License