當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。