Dear reader,
I am trying to fit a b-spline model, where I create a recursive function basis
, however it doesn’t seem to be able to find itself or, potentially, go deep enough to reach the base case (degree=0) and solve the recursion. This function is called by another user-defined function but I don’t think that’s the problem. My function and the associated error message is below.
functions {
vector basis(vector x, int degree, int i, vector knots) {
int N;
vector[N] OUT1;
vector[N] OUT2;
vector[N] alpha1;
vector[N] alpha2;
vector[N] B;
N = num_elements(x);
if(degree==0){
for(j in 1:N){
if((x[j]>=knots[i]) && (x[j] < knots[i+1])){
B[j] = 1;
}else{
B[j] = 0;
}
}
}else{
if((knots[degree+i] - knots[i])>0){
for(j in 1:N){
alpha1[j] = (x[j] - knots[i])/(knots[degree+i] - knots[i]);
}
}else{
alpha1 = rep_vector(0,N);
}
if((knots[i+degree+1] - knots[i+1])>0){
for(j in 1:N){
alpha2[j] = (knots[i+degree+1] - x[j])/(knots[i+degree+1] - knots[i+1]);
}
}else{
alpha2 = rep_vector(0,N);
}
OUT1 = basis(x,degree-1,i,knots);
OUT2 = basis(x,degree-1,(i+1),knots);
for(j in 1:N){
B[j] = alpha1[j]*OUT1[j]+alpha2[j]*OUT2[j];
}
}
return B;
}
...
}
the error message:
SYNTAX ERROR, MESSAGE(S) FROM PARSER:
No matches for:
basis(vector, int, int, vector)
Function basis not found.
error in '...' at line 33, column 38
-------------------------------------------------
31: alpha2 = rep_vector(0,N);
32: }
33: OUT1 = basis(x,degree-1,i,knots);
^
34: OUT2 = basis(x,degree-1,(i+1),knots);
-------------------------------------------------