В настоящее время я работаю с B-сплайнами, используя функцию R bs
из пакета splines
, и в качестве графического примера я хотел бы привести рисунок, показывающий различия между наборами сплайнов с разными степенями.
Проблема в том, что bs
поддерживает только градусы больше 0.
Сплайн нулевой степени - не более чем индикаторная функция для заданной области, определенной узлами, но я не знаю, как ее сгенерировать.
Это то, что я сделал до сих пор
x<-seq(0,1,length.out =1000)
par(mfrow=c(3,1))
B1<-bs(x,knots = seq(0,1,length.out = 11)[-c(1,11)],Boundary.knots = c(0,1),intercept = T,degree = 1)
matplot(x,B1,type="l",lty=1,ylim = c(-0.1,1.2),xlab = "",ylab = "")
abline(v=seq(0,1,length.out = 11),lty=2)
legend("top", legend ="B-splines of order 2")
B2<-bs(x,knots = seq(0,1,length.out = 11)[-c(1,11)],Boundary.knots = c(0,1),intercept = T,degree = 2)
matplot(x,B2,type="l",lty=1,ylim = c(-0.1,1.2),xlab = "",ylab = "")
abline(v=seq(0,1,length.out = 11),lty=2)
legend("top", legend ="B-splines of order 3")
B3<-bs(x,knots = seq(0,1,length.out = 11)[-c(1,11)],Boundary.knots = c(0,1),intercept = T,degree = 3)
matplot(x,B3,type="l",lty=1,ylim = c(-0.1,1.2),xlab = "",ylab = "")
abline(v=seq(0,1,length.out = 11),lty=2)
legend("top", legend ="B-splines of order 4")
Это изображение, взятое из Hastie et.al (2017) - это то, чего мне не хватает.
Заранее спасибо