当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R smooth.construct.ps.smooth.spec GAM 中的 P 样条


R语言 smooth.construct.ps.smooth.spec 位于 mgcv 包(package)。

说明

gam 可以使用 Eilers 和 Marx (1996) 提出的单变量 P-splines,通过 s(x,bs="ps") 等术语指定。这些术语使用B-spline基数,并通过直接应用于基数系数的离散惩罚进行惩罚。循环 P-splines 由 s(x,bs="cp",...) 等模型术语指定。这些基可用于张量积平滑(请参阅te)。

P-splines 的优点是可以灵活地混合惩罚和基序(但另请参阅 d.spline )。这通常提供了一种有用的方式‘taming’,否则表现不佳。然而,在常规使用中,具有基于导数惩罚的样条曲线(例如 "tp""cr" 基数)往往会导致 MSE 性能稍好,大概是因为样条曲线良好的近似理论特性与导数惩罚的使用密切相关。

用法

## S3 method for class 'ps.smooth.spec'
smooth.construct(object, data, knots)
## S3 method for class 'cp.smooth.spec'
smooth.construct(object, data, knots)

参数

object

平滑规范对象,通常由术语 s(x,bs="ps",...)s(x,bs="cp",...) 生成

data

仅包含该术语所需的数据(包括任何 by 变量)的列表,其名称对应于 object$term (和 object$by )。 by 变量是最后一个元素。

knots

包含为基础设置提供的任何结的列表 - 与 data 具有相同的顺序和相同的名称。可以是 NULL 。请参阅详细信息以获取更多信息。

细节

s(x,bs="ps",m=c(2,3)) 形式的平滑项指定二阶 P-spline 基础(三次样条),并对系数进行三阶差分罚分(0 阶是岭罚分)。如果m是单个数字,则将其作为基本顺序和惩罚顺序。默认为“三次样条”m=c(2,2)

对于 "ps" 项,默认基本维度 k 是 10 和 m[1]+1 中的较大者;对于 "cp" 项,默认基本维度 k 是 10 和 m[1] 中的较大者。 m[1]+1m[1] 是两种类型的基础尺寸下限。

如果提供了结,则结的数量应比 "cp" 平滑的基本尺寸(即 k+1 )多 1。对于 "ps" 基础,提供的结的数量应为 k + m[1] + 2 ,中间 k-m[1] 结的范围应包括所有协变量值。参见示例。

或者,对于两种类型的平滑,可以提供 2 节,表示可以评估样条线的下限和上限(但是,不要使该范围太宽,否则您最终可能无法获得有关某些基础的信息)系数,因为相应的基函数具有不包含数据的跨度!)。请注意,P-splines 对于不均匀的结间距没有多大意义。

线性外推用于需要外推的预测(即内部k-m[1]结范围之外的预测)。这种外推法在基础构建中是不允许的,但在预测时是允许的。

对于 "ps" 基础,可以在平滑规范对象中设置标志,请求根据 Pya 和 Wood (2015) 的 SCOP-spline 单调平滑结构进行设置。到目前为止,mgcv 中的任何建模函数都不支持这一点(请参阅包scam)。类似地,可以在平滑规范或平滑对象中设置 deriv 标志,以便模型或预测矩阵生成所需的样条曲线导数,而不是对其进行评估。请参阅下面的示例。

"pspline.smooth""cp.smooth" 的对象。有关该对象将包含的元素,请参阅smooth.construct

例子

## see ?gam
## cyclic example ...
  require(mgcv)
  set.seed(6)
  x <- sort(runif(200)*10)
  z <- runif(200)
  f <- sin(x*2*pi/10)+.5
  y <- rpois(exp(f),exp(f)) 

## finished simulating data, now fit model...
  b <- gam(y ~ s(x,bs="cp") + s(z,bs="ps"),family=poisson)

## example with supplied knot ranges for x and z (can do just one)
  b <- gam(y ~ s(x,bs="cp") + s(z,bs="ps"),family=poisson,
           knots=list(x=c(0,10),z=c(0,1))) 

## example with supplied knots...
  bk <- gam(y ~ s(x,bs="cp",k=12) + s(z,bs="ps",k=13),family=poisson,
                      knots=list(x=seq(0,10,length=13),z=(-3):13/10))

## plot results...
  par(mfrow=c(2,2))
  plot(b,select=1,shade=TRUE);lines(x,f-mean(f),col=2)
  plot(b,select=2,shade=TRUE);lines(z,0*z,col=2)
  plot(bk,select=1,shade=TRUE);lines(x,f-mean(f),col=2)
  plot(bk,select=2,shade=TRUE);lines(z,0*z,col=2)
  
## Example using montonic constraints via the SCOP-spline
## construction, and of computng derivatives...
  x <- seq(0,1,length=100); dat <- data.frame(x)
  sspec <- s(x,bs="ps")
  sspec$mono <- 1
  sm <- smoothCon(sspec,dat)[[1]]
  sm$deriv <- 1
  Xd <- PredictMat(sm,dat)
## generate random coeffients in the unconstrainted 
## parameterization...
  b <- runif(10)*3-2.5
## exponentiate those parameters indicated by sm$g.index 
## to obtain coefficients meeting the constraints...
  b[sm$g.index] <- exp(b[sm$g.index]) 
## plot monotonic spline and its derivative
  par(mfrow=c(2,2))
  plot(x,sm$X%*%b,type="l",ylab="f(x)")
  plot(x,Xd%*%b,type="l",ylab="f'(x)")
## repeat for decrease...
  sspec$mono <- -1
  sm1 <- smoothCon(sspec,dat)[[1]]
  sm1$deriv <- 1
  Xd1 <- PredictMat(sm1,dat)
  plot(x,sm1$X%*%b,type="l",ylab="f(x)")
  plot(x,Xd1%*%b,type="l",ylab="f'(x)")

## Now with sum to zero constraints as well...
  sspec$mono <- 1
  sm <- smoothCon(sspec,dat,absorb.cons=TRUE)[[1]]
  sm$deriv <- 1
  Xd <- PredictMat(sm,dat)
  b <- b[-1] ## dropping first param
  plot(x,sm$X%*%b,type="l",ylab="f(x)")
  plot(x,Xd%*%b,type="l",ylab="f'(x)")
  
  sspec$mono <- -1
  sm1 <- smoothCon(sspec,dat,absorb.cons=TRUE)[[1]]
  sm1$deriv <- 1
  Xd1 <- PredictMat(sm1,dat)
  plot(x,sm1$X%*%b,type="l",ylab="f(x)")
  plot(x,Xd1%*%b,type="l",ylab="f'(x)")
  

作者

Simon N. Wood simon.wood@r-project.org

参考

Eilers, P.H.C. and B.D. Marx (1996) Flexible Smoothing with B-splines and Penalties. Statistical Science, 11(2):89-121

Pya, N., and Wood, S.N. (2015). Shape constrained additive models. Statistics and Computing, 25(3), 543-559.

也可以看看

cSplineDes , adaptive.smooth , d.spline

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 P-splines in GAMs。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。