R中的单调样条

cla*_*ino 0 r spline bspline cubic-spline

我正在尝试使用R 中的 spline2 包来构建单调样条。

我在评估模型的自变量新值时遇到了麻烦。一般来说,我无法掌握“预测”的 R 处理及其与 spline2 的关系,以及如何使用生成的 bs 对象。

我试图遵循这个使用 spline1 的例子。我的数据位于名为 BRIyII 的数据框中,具有自变量 t 和因变量 P,因此:

plot(BRIyII$t,BRIyII$P)
Run Code Online (Sandbox Code Playgroud)

产量: 在此处输入图片说明

所以我这样做:

knots=c(9)
myMat=mSpline(BRIyII$t, knots = knots, degree = 3, intercept = TRUE)
mylm=lm(BRIyII$P~myMat)
Run Code Online (Sandbox Code Playgroud)

现在,如果我们:

pr = predict(mylm,data.frame(BRIyII$t))
points(BRIyII$t,pr,col = "red")
Run Code Online (Sandbox Code Playgroud)

它产生: 在此处输入图片说明

所以我的问题是:

1-由于最右边的预测值(红点)低于其左边的一个,我是否误解了 m 样条的“单调”性质?

2- 如何评估 BRIyII$t 中定义的值以外的样条曲线?我尝试了几种东西的组合,但我缺乏 R 语法知识。理想情况下,我想做类似的事情:

newdata=seq.int(0,41.5,0.1) 
Run Code Online (Sandbox Code Playgroud)

小智 5

我将解决问题 #1,因为问题 #2 已在评论中解决。

splines2 文档将 M 样条基称为“单调回归样条”基,但我认为这是一种误导。估计单调回归样条的方法是使用 I 样条基,限制是回归系数为非负。I 样条是 M 样条的积分,因此是非递减的。所以它们的任何非负线性组合也将是非递减的。因此,您可以使用 splines2::iSpline 以及非负回归方法(如 nnls::nnls)来估计单调回归函数。

有关 M 样条、I 样条和单调回归的解释,请查看:

Ramsay, JO (1988) 运行中的单调回归样条。统计科学3(4), 425-461。