I’m working with a quite simple cubic spline model (using patsy) that looks like that:
knot_list = np.arange(0, 360, 10)
B = dmatrix(
"bs(ALPHA, knots=knots, degree=3, include_intercept=True) - 1",
{"ALPHA": df['ALPHA'], "knots": knot_list},
)
with pm.Model() as model:
model.add_coord('spline', length=B.shape[1], mutable=True)
model.add_coord('aoa', df['ALPHA'], mutable=True)
data_b = pm.MutableData('data_b', B, dims=('aoa', 'spline'))
tau = pm.HalfCauchy('tau', 20)
beta = pm.Normal("beta", mu=0, sigma=tau, dims='spline')
mu = pm.Deterministic("mu", pm.math.dot(data_b, beta), dims='aoa')
sigma = pm.HalfNormal("sigma", 0.01)
c_predict = pm.Normal("c_predict", mu, sigma, observed=df['CZ'], dims='aoa')