Hi, I am trying to use the strategy outlined here [R] Use pcls in "mgcv" package to achieve constrained cubic spline to fit a gam constrained to pass through a fixed value. I can get this to work using mgcv, but am unable to get this to work using brms because the paraPen argument has not been implemented in brms. Does anyone know a way around this, if there is a different strategy that can be used to achieve the same thing or could this be added to brms?

Example constraining spline to pass through a particular point (0,.6)…

## Fake some data…

library(mgcv)

library(brms)

set.seed(0)

n ← 100

x ← runif(n)*4-1;x ← sort(x);
f ← exp(4*x)/(1+exp(4*x));y ← f+rnorm(100)*0.1;plot(x,y)

dat ← data.frame(x=x,y=y)

## Create a spline basis and penalty, making sure there is a knot at the constraint point, (0 here, but could be anywhere)

knots ← data.frame(x=seq(-1,3,length=9)) ## create knots

## set up smoother…

sm ← smoothCon(s(x, k=9, bs=“cr”), dat, knots=knots)[[1]]

## 3rd parameter is value of spline at knot location 0,

## set it to 0 by dropping…

X ← sm$X[,-3] ## spline basis

S ← sm$S[[1]][-3,-3] ## spline penalty

off ← y*0 + .6 ## offset term to force curve through (0, .6)

## fit spline constrained through (0, .6)

b ← gam(y ~ X - 1 + offset(off), paraPen=list(X=list(S)))

lines(x,predict(b))

dat$X ← sm$X[,-3]

dat$off ← off

b2 ← brm(y ~ X - 1 + offset(off), paraPen=list(X=list(S)), data = dat)