平滑样条法_R

平滑样条法

样条平滑是一种关于一般类的强大而灵活的建模技术,应用包括多项式,周期,球面,薄板,L-和部分样条,以及更高级模型的概述,包括平滑样条线ANOVA,扩展和广义平滑样条ANOVA,矢量样条,非参数非线性回归,半参数回归和半参数混合效应模型。


  • 平滑样条法
    • 样条

样条

样条是一种分段的低阶多项式逼近函数,可应用于具有不同非线性度或者存在多个极值点的函数。它包含两类:多项式样条和光滑样条。多项式样条可以解决很多问题,但是理论与实践都表明直接用最小二乘去求解系数效果不好,容易过拟合。一个可能的改进是光滑样条。所谓的光滑样条,就是在求解最小二乘时给估计函数( f(x) )加上了一定的惩罚,这个有点类似压缩估计。

光滑样条
R的splines包中提供了函数smooth.spline来求解光滑样条。

spline函数的功能:对给定数据点执行三次(或Hermite)样条插值,返回通过插值获得的点列表或执行插值的函数。

#help("spline")时列出所包含的函数
splinefun(x, y = NULL,
          method = c("fmm", "periodic", "natural", "monoH.FC", "hyman"),
          ties = mean)

spline(x, y = NULL, n = 3*length(x), method = "fmm",
       xmin = min(x), xmax = max(x), xout, ties = mean)

splinefunH(x, y, m)
  • 输入:可以包含NA值,但至少需要一个完整的(x,y)对;method指定采用的方法,“fmm”,则使用的样条是Forsythe,Malcolm和Moler(通过数据每端的四个点拟合精确的立方体,这用于确定结束条件)。当method =“natural”时使用自然样条线,当method =“periodic”时使用周期样条线。“monoH.FC”是指根据Fritsch和Carlson的方法计算单调Hermite样条。Method=”hyman”指使用适合严格单调输入“fmm”的Hyman滤波来计算单调三次样条。
  • 输出:样条曲线返回一个包含x和y的列表,并给出了插值发生的纵坐标及其对应的值。

smooth.spline:使用立方平滑样条拟合所提供的数据。

smooth.spline(x, y = NULL, w = NULL, df, spar = NULL, lambda = NULL, cv = FALSE,
              all.knots = FALSE, nknots = .nknots.smspl,
              keep.data = TRUE, df.offset = 0, penalty = 1,
              control.spar = list(), tol = 1e-6 * IQR(x), keep.stuff = FALSE)
  • x:指定需要预测变量值(向量,列表或包含y的两列矩阵),y可缺失,则有x指定;x和y都不被允许有NA值;
  • w:指定每个变量值x的权重,因此该向量长度与x相同,默认情况下全为1;
  • df:指期望的自由度数(平滑矩阵的轨迹),区间范围是(1,len(x)];
  • spar:平滑参数,区间范围(0,1],当指定spar时,在拟合标准中的平方二阶导数的积分系数λ是spar的单调函数;
  • lambda:可以指定内部平滑参数λ而不是spar,这对于重采样(例如交叉验证或bootstrap)是有作用的;
    如果spar和lambda都为空,df的值就用于确定平滑的自由度,若df也为空,leave-one-out交叉验证用于确定参数λ

示例:

smoother=function(x,g) {
    ord=order(g); 
    t=smooth.spline(x[ord]); 
}

输出值:
- x:升序后的x值;
- y:对应于x的拟合值;
- w:x唯一值时使用的权重;

你可能感兴趣的:(编程)