I am trying to fit the following GAM model
mod <- gam(y ~ s(x, bs = "cr", k = 2), family = betar(link = "logit"), data = d)
where x
can take only two unique values.
However, when I run the model I get the following error
Error in smooth.construct.cr.smooth.spec(object, dk$data, dk$knots) :
x has insufficient unique values to support 3 knots: reduce k.
In addition: Warning message:
In smooth.construct.cr.smooth.spec(object, dk$data, dk$knots) :
basis dimension, k, increased to minimum possible
As the error message shows, the number of knots is automatically set to 3 (even if I have specified k = 2
in the gam
call).
Is there any reason why I cannot have only 2 knots? How can I fix this?
Thanks.
How can you define a cubic polynomial (uniquely) on just two points? A cubic polynomial s(x)
needs 4 coefficients, that is, as least 4 unique x
values. mgcv
applies centering constraint on s(x)
so one fewer coefficient is needed, but you still need 3.
If your covariate just has two unique values, you can at most fit it with a straight line:
gam(y ~ x, family = betar(link = "logit"), data = d)