Please find the working code:
import arviz as az
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import pymc as pm
print(pm.__version__)
from aesara import shared
def bayesian_lin_reg_fit(x_data_shared,y_data_shared,display_plot=True,Intercept=True):
with pm.Model() as linear_model:
sigma = pm.Uniform('Sigma',0,100)
intercept = pm.Uniform('Intercept',0,1200)
x_coeff = pm.Uniform('Slope',-10,10)
if(Intercept==True):
yhat = pm.math.dot(x_data_shared,x_coeff)+intercept
else:
yhat = pm.math.dot(x_data_shared,x_coeff)
#Likelihood
likelihood = pm.Normal('y',yhat,sigma,observed=y_data_shared)
print(likelihood)
#Inference
trace_linear = pm.sample(500,cores=1,init="auto",tune=500,progressbar=True)
if(display_plot):
plt.figure(figsize=(7,7))
az.plot_trace(trace_linear,combined=True)
plt.tight_layout()
print(pm.summary(trace_linear))
return linear_model,trace_linear
bayes_reg = bayesian_lin_reg_fit(x_data_shared=x_data_shared,y_data_shared=y_data_shared)
ppc_CI = pm.sample_posterior_predictive(bayes_reg[1],
model=bayes_reg[0],
progressbar=True)
predicted = ppc_CI.posterior_predictive['y']
n_samples = 1000
nb_point = x_data_shared.get_value().shape[0]
x = np.reshape(predicted,(n_samples,nb_point))
Error:
**ValueError** : dimensions ('chain', 'draw', 'y_dim_0') must have the same length as the number of data dimensions, ndim=2