如何在R中的ns()中指定阶参数,以构造阶数为5的自然样条曲线


library(ISLR) 
fit=lm(wage~bs(age ,knots =c(25 ,40 ,60),degree = 5,),data=Wage)
fit=lm(wage~ns(age ,knots =c(25 ,40 ,60),degree = 5,),data=Wage)

我可以构建5次多项式的回归样条曲线,但如何构建5次自然样条曲线呢,因为ns()函数缺少次参数。

我只能使用ns()生成三次自然样条曲线。有没有其他函数可以用来产生二次自然样条等?

ns显式构造自然三次样条曲线。不能自定义多项式次数。要理解原因,您需要一些关于样条曲线的基本知识。


通常对于具有k节点的d次样条曲线(包括k - 2内部节点和2边界节点(,存在

  • (d + 1)(k - 1)分段多项式系数
  • 这些系数的d(k - 2)连续性约束

因此将存在(d + 1)(k - 1) - d(k - 2) = k + d - 1无约束系数。这意味着

  • 对于具有d = 1k节点的线性样条,精确地给出了k的自由系数
  • 对于具有d = 2的二次样条,k节点恰好给出k + 1自由系数
  • 对于具有d = 3k节点的三次样条,k + 2节点恰好给出了自由系数

这些是可以从构造函数bs中获得的标准样条曲线。


"自然"是指额外的边界条件,使得k节给出k自由系数。显然,线性样条曲线很容易"自然";二次样条曲线还需要一个约束;三次样条曲线还需要两个约束。

为三次样条曲线设置自然条件是有意义的:2个边界节点的二阶导数均为0。然而,对于其他程度的样条曲线,您需要什么条件并不明显。因此,ns仅允许构造三次样条曲线。


请注意,bsns希望您仅通过参数knots提供内部结。

最新更新