Linear intepolation
This example illustrates how to use linear_intepolationi
to fit a piecewise linear function to a data set consisting
of \((x, y)\) pairs.
data{
int nObs;
real xObs[nObs];
real yObs[nObs];
int nx;
int nPred;
real xPred[nPred];
}
transformed data{
real xmin = min(xObs);
real xmax = max(xObs);
}
parameters{
real y[nx];
real<lower = 0> sigma;
simplex[nx - 1] xSimplex;
}
transformed parameters{
real yHat[nObs];
real x[nx];
x[1] = xmin;
x[nx] = xmax;
for(i in 2:(nx-1))
x[i] = x[i-1] + xSimplex[i-1] * (xmax - xmin);
yHat = linear_interpolation(xObs, x, y);
}
model{
xSimplex ~ dirichlet(rep_vector(1, nx - 1));
y ~ normal(0, 25);
yObs ~ normal(yHat, sigma);
}
generated quantities{
real yHatPred[nPred];
real yPred[nPred];
yHatPred = linear_interpolation(xPred, x, y);
for(i in 1:nPred)
yPred[i] = normal_rng(yHatPred[i], sigma);
}