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


R smooth.construct.tp.smooth.spec GAM 中的惩罚薄板回归样条


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

说明

gam 可以使用任意数量变量的各向同性平滑,通过 s(x,z,bs="tp",m=3) 等术语指定(或只是 s(x,z),因为这是默认基础)。这些术语基于薄板回归样条。 m 指定薄板样条罚分中导数的阶数。

如果 m 是长度为 2 的向量且第二个元素为零,则平滑的惩罚零空间不包含在平滑中:如果您需要测试平滑是否可以用线性项替换,这很有用,或构建具有奇怪嵌套结构的模型。

薄板回归样条的构造方法是从完整薄板样条的基础和惩罚开始,然后以最佳方式截断该基础,以获得低阶平滑器。 Wood (2003) 中给出了详细信息。该方法的一个关键优点是它避免了传统回归样条建模的结点放置问题,但它还具有以下优点:较低阶的平滑嵌套在较高阶的平滑中,因此使用传统的假设检验方法是合法的比较基于纯回归样条的模型。请注意,基础截断不会改变薄板样条惩罚的含义(它的惩罚与完整薄板样条的惩罚完全相同)。

t.p.r.s.对于大型数据集,计算基础和惩罚可能会变得昂贵。因此,默认行为是,如果有多个 max.knots 的唯一数据位置,则对 max.knots 唯一数据位置进行随机子采样,并使用子样本进行基础构建。采样始终使用相同的随机种子进行,以确保可重复性(不重置 R RNG)。默认情况下,max.knots 为 2000。种子和 max.knots 都可以使用 sxt 参数进行修改。或者,用户可以提供用来构建基础的结。

"ts" 平滑是 t.p.r.s.修改惩罚,以便对于足够高的平滑参数,该项收缩到零,而不是收缩到惩罚零空间中的函数(参见详细信息)。

用法

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

参数

object

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

data

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

knots

包含为基础设置提供的任何结的列表 - 与 data 具有相同的顺序和相同的名称。可以是NULL

细节

此类的默认基本维度是 k=M+k.def,其中 M 是零空间维度(未惩罚函数空间的维度),k.def 对于维度 1 为 8,对于维度 2 为 27,对于更高维度为 100。这本质上是任意的,应该进行检查,但与所有惩罚回归平滑器一样,结果在统计上对确切的选择不敏感,只要它不是小到强制过度平滑(平滑器的自由度主要由其平滑参数控制) )。

默认设置是将m(薄板样条罚分中的导数阶数)设置为满足2m > d+1的最小值,其中d如果项的协变量数量:这会产生“视觉上平滑”的函数。无论如何,2m>d 必须满足。

构造函数通常不直接调用,而是由 gam 在内部使用。要用于基础设置,建议使用 smooth.construct2

对于这些类,规范 object 将包含有关如何在其 xt 字段中处理大型数据集的信息。如果唯一预测变量组合的数量超过 2000,默认值是对 2000 ‘knots’ 进行随机子采样,从中生成 tprs 基础。默认值可以通过 sxt 参数进行修改。它作为一个列表提供,其中包含元素 max.knotsseed,其中包含用于代替 2000 的数字,以及要使用的随机数种子(两者都可以缺失)。

对于这些基础 knots 有两个用途。首先,如前所述,对于大型数据集,tp 基础的计算可能非常耗时。用户可以保留 t.p.r.s 的大部分优点。通过提供一组缩减的协变量值来获取基础的方法 - 通常使用的协变量值的数量将大大小于数据的数量,并且大大大于基础维度 k 。如果唯一协变量值(组合)的数量超过 max.knots ,则自动采用此方法。第二种可能性是避免用于查找 t.p.r.s 的特征分解。完全基础并简单地使用所选结隐含的基础:如果提供的结数量与基础尺寸 k 匹配,就会发生这种情况。对于给定的基本尺寸,第二个选项速度更快,但结果较差(用户在选择结位置时必须非常小心)。

平滑的收缩版本,eigen-decomposes 摆动惩罚矩阵,并将其零特征值设置为最小严格正特征值的小倍数。然后将惩罚设置为矩阵,其特征向量与原始惩罚的特征向量相对应,但特征值设置为扰动版本。该惩罚矩阵具有满秩,并且在足够高的平滑参数下将曲线收缩到零。

"tprs.smooth""ts.smooth" 的对象。除了 smooth.construct 下记录的平滑类的常见元素之外,该对象还将包含:

shift

应用于每个协变量的移位记录,以便将其以零为中心,并避免在该项的惩罚零空间基础中可能发生的任何 co-linearity 问题。

Xu

此平滑的唯一协变量组合的矩阵(通过首先删除重复位置来构建基础)。

UZ

映射 t.p.r.s 的矩阵参数返回完整薄板样条的参数。

null.space.dimension

根据此项的摆动惩罚,摆动为零的函数空间的维数。

例子

require(mgcv); n <- 100; set.seed(2)
x <- runif(n); y <- x + x^2*.2 + rnorm(n) *.1

## is smooth significantly different from straight line?
summary(gam(y~s(x,m=c(2,0))+x,method="REML")) ## not quite

## is smooth significatly different from zero?
summary(gam(y~s(x),method="REML")) ## yes!

## Fool bam(...,discrete=TRUE) into (strange) nested
## model fit...
set.seed(2) ## simulate some data... 
dat <- gamSim(1,n=400,dist="normal",scale=2)
dat$x1a <- dat$x1 ## copy x1 so bam allows 2 copies of x1
## Following removes identifiability problem, by removing
## linear terms from second smooth, and then re-inserting
## the one that was not a duplicate (x2)...
b <- bam(y~s(x0,x1)+s(x1a,x2,m=c(2,0))+x2,data=dat,discrete=TRUE)

## example of knot based tprs...
k <- 10; m <- 2
y <- y[order(x)];x <- x[order(x)]
b <- gam(y~s(x,k=k,m=m),method="REML",
         knots=list(x=seq(0,1,length=k)))
X <- model.matrix(b)
par(mfrow=c(1,2))
plot(x,X[,1],ylim=range(X),type="l")
for (i in 2:ncol(X)) lines(x,X[,i],col=i)

## compare with eigen based (default)
b1 <- gam(y~s(x,k=k,m=m),method="REML")
X1 <- model.matrix(b1)
plot(x,X1[,1],ylim=range(X1),type="l")
for (i in 2:ncol(X1)) lines(x,X1[,i],col=i)
## see ?gam

作者

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

参考

Wood, S.N. (2003) Thin plate regression splines. J.R.Statist.Soc.B 65(1):95-114

相关用法


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