如何在R的ns()中指定度自变量,以构造度5的自然样条?

时间:2018-11-16 07:35:24

标签: r regression spline

 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阶多项式的回归样条,但是由于ns()函数缺少程度自变量,我如何建立5阶的自然样条。

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

1 个答案:

答案 0 :(得分:1)

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


通常对于度数为d且有k个结的花键(包括k - 2个内部结和2个边界结,有

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

因此,将有(d + 1)(k - 1) - d(k - 2) = k + d - 1个不受约束的系数。这意味着

  • 对于具有d = 1的线性样条,k结会精确给出k个自由系数;
  • 对于具有d = 2的二次样条,k个结给出了精确的k + 1个自由系数;
  • 对于具有d = 3的三次样条,k结精确地给出了k + 2的自由系数。

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


“自然”是指额外的边界条件,因此k结会产生k个自由系数。显然,线性样条很容易“自然”。二次样条还需要一个约束;三次样条曲线还需要两个约束。

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


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