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


R te 在 GAM 公式中定义张量积平滑或张量积交互


R语言 te 位于 mgcv 包(package)。

说明

用于定义张量积平滑和 gam 模型公式中的交互的函数。 te 生成完整的张量积平滑,而 ti 生成张量积交互,适用于还存在主效应(以及任何较低的交互)的情况。

这些函数不评估平滑度 - 它们的存在纯粹是为了帮助使用基于张量积的平滑度建立模型。旨在从具有 basis-penalty 表示的任何边平滑构造张量积(限制是每个边平滑必须只有一个惩罚)。

用法

te(..., k=NA,bs="cr",m=NA,d=NA,by=NA,fx=FALSE,
              np=TRUE,xt=NULL,id=NULL,sp=NULL,pc=NULL)
ti(..., k=NA,bs="cr",m=NA,d=NA,by=NA,fx=FALSE,
              np=TRUE,xt=NULL,id=NULL,sp=NULL,mc=NULL,pc=NULL)

参数

...

变量列表,这些变量是该平滑函数的协变量。此处最好避免形式取决于数据值的转换:例如te(log(x),z) 可以,但 te(I(x/sd(x)),z) 不行(请参阅 predict.gam )。

k

用于表示平滑项的基数维度。如果未提供,则设置为 5^d 。如果作为单个数字提供,则该基本尺寸将用于每个基础。如果作为数组提供,则元素是张量积的分量(边)基的维度。有关更多信息,请参阅choose.k

bs

数组(或单个字符串)指定每个边际基础的类型。 "cr" 用于三次回归样条; "cs" 用于具有收缩的三次回归样条; "cc" 用于周期性/循环三次回归样条; "tp" 用于薄板回归样条; "ts" 用于 t.p.r.s.具有额外的收缩。有关详细信息和完整列表,请参阅smooth.terms。此处也可以使用用户定义的基数(有关示例,请参阅smooth.construct)。如果仅给出一个碱基代码,则该代码将用于所有碱基。

m

每个项的样条阶数及其惩罚(对于使用它的平滑类)。如果给出一个数字,则它用于所有术语。向量可用于为每个边距提供不同的m。对于采用向量 m 的边距(例如 p.splineDuchon.spline ),则可以提供一个列表,其中每个边距有一个向量元素。 NA 自动初始化。 m 被某些碱基忽略(例如 "cr" )。

d

边际基础维度数组。例如,如果您想要由 2 维 t.p.r.s. 的张量积组成的 3 个协变量的平滑。基和一维基,然后设置 d=c(2,1) 。内置基础类型和尺寸之间的不兼容性将通过重置基础类型来解决。

by

与每个协变量具有相同维度的数值或因子变量。在数值向量的情况下,元素乘以相应协变量值评估的平滑度(“变化系数模型”结果)。在因子情况下,会为每个因子级别生成平滑的副本。有关更多详细信息,请参阅gam.models。如果协变量是矩阵,也可能是矩阵:在这种情况下实现平滑的线性函数(有关详细信息,请参阅gam.modelslinear.functional.terms)。

fx

指示该项是否是固定 d.f。回归样条线 ( TRUE ) 或惩罚回归样条线 ( FALSE )。

np

TRUE 使用“正常参数化”来平滑张量积。这表示通过参数进行任何一维边平滑,这些参数是‘knots’处的函数值,均匀分布在数据中。参数化使惩罚易于解释,但在某些情况下会降低数值稳定性。

xt

或者是单个对象,提供要传递给每个边际基础构造函数的任何额外信息,或者是此类对象的列表,每个对象对应一个边际基础。

id

标识该术语的标签或整数,以便将其平滑参数链接到相同类型的其他参数。如果两个或多个平滑项具有相同的 id,那么它们将具有相同的平滑参数,并且默认情况下具有相同的基数(第一次出现定义基本类型,但来自基础构造中使用的所有术语的数据)。

sp

为此项提供的任何平滑参数。必须是与此平滑的惩罚数长度相同的数组。正或零元素被视为固定平滑参数。负元素表示自动初始化。将 sp 参数中提供的值覆盖为 gam 。被 gamm 忽略。

mc

对于 ti 平滑,您可以通过为此向量中的每个边际提供 0/1 或 FALSE /TRUE 值来指定哪些边际应应用居中约束。默认情况下,所有边际均受到约束,这适用于函数方差分析模型等。请注意,'ti' 仅对边际约束应用约束,因此如果关闭所有边际约束,则该术语将没有可识别性约束。仅当您真正了解边际约束如何工作时才使用此方法。

pc

如果不是 NULL ,则表示点约束:平滑应在此处给出的点处通过零(作为名称与平滑名称相对应的向量或列表)。如果提供,切勿忽略。请参阅identifiability

细节

多个协变量的平滑可以根据用于表示一个(或有时多个)协变量的平滑的基数的张量积来构造。为此,使用关联的模型矩阵和惩罚矩阵生成 ‘marginal’ 基数,然后将它们以 tensor.prod.model.matrixtensor.prod.penalties 中说明的方式组合,以生成用于平滑但多个惩罚的单个模型矩阵(一个对于每个边际基础)。整个平滑的基本尺寸是边平滑的基本尺寸的乘积。

张量积平滑对于表示以不同单位测量的协变量的函数特别有用,尽管它们通常不如 t.p.r.s. 表现得那么好。平滑缩放良好的协变量。

例如,研究具有 main-effects + 交互结构的平滑模型有时很有用

这种函数方差分析由 ti 项支持,这些项产生张量积相互作用,其中主效应已被排除,假设它们将被单独包含在内。例如~ ti(x) + ti(z) + ti(x,z)将产生上述主效应+交互结构。这比尝试使用代表交互作用的 ste 术语进行相同的操作要好得多(尽管 mgcv 并不禁止这样做)。从技术上讲,ti 术语非常简单:它们只是从已应用了可识别性约束(通常是sum-to-zero)的边际平滑构造张量积基:然后自动正确嵌套(与 GLM 框架中的所有交互一样)。参见 Wood(2017 年,第 5.6.3 节)。

“正常参数化”(np=TRUE)重新参数化张量积平滑的边际平滑,以便参数是均匀分布在平滑协变量值范围内的一组点处的函数值。这意味着与任何特定协变量方向相关的张量积的惩罚可以解释为在该方向上应用的适当边平滑的惩罚并在平滑上进行平均。目前,这仅适用于单个变量的边际。当与 "cc""cr""cs" 之外的边平滑一起使用时,此参数化会降低数值稳定性:如果这会导致问题,请设置 np=FALSE

请注意,如果任何边际不需要居中,则张量积平滑不应居中(施加可识别性约束)。张量积平滑的构造函数确保了这种情况的发生。

该函数不计算变量参数。

tensor.smooth.spec 对象,定义张量积,平滑地由 smooth.construct.tensor.smooth.spec 函数转换为基础和惩罚。

返回的对象包含以下项目:

margin

s 返回类型的 smooth.spec 对象列表,定义构造张量积 smooth 的基础。

term

文本字符串数组,给出该项作为函数的协变量的名称。

by

是任何 by 文本变量的名称("NA" 没有)。

fx

逻辑数组,其中包含该项的每个惩罚的元素(张量积平滑有多个惩罚)。 TRUE 如果要忽略惩罚,则 FALSE ,否则。

label

适合这个平滑术语的文本标签。

dim

平滑器的维度 - 即它作为函数的协变量的数量。

mp

TRUE 是要使用的多重惩罚(默认)。

np

TRUE 根据函数值重新参数化一维边平滑(默认)。

id

提供给 teid 参数。

sp

提供给 tesp 参数。

inter

TRUE 如果该术语是由 ti 生成的,则为 FALSE 生成的。

mc

提供给 ti 的参数 mc

例子


# following shows how tensor pruduct deals nicely with 
# badly scaled covariates (range of x 5% of range of z )
require(mgcv)
test1 <- function(x,z,sx=0.3,sz=0.4) { 
  x <- x*20
  (pi**sx*sz)*(1.2*exp(-(x-0.2)^2/sx^2-(z-0.3)^2/sz^2)+
  0.8*exp(-(x-0.7)^2/sx^2-(z-0.8)^2/sz^2))
}
n <- 500
old.par <- par(mfrow=c(2,2))
x <- runif(n)/20;z <- runif(n);
xs <- seq(0,1,length=30)/20;zs <- seq(0,1,length=30)
pr <- data.frame(x=rep(xs,30),z=rep(zs,rep(30,30)))
truth <- matrix(test1(pr$x,pr$z),30,30)
f <- test1(x,z)
y <- f + rnorm(n)*0.2
b1 <- gam(y~s(x,z))
persp(xs,zs,truth);title("truth")
vis.gam(b1);title("t.p.r.s")
b2 <- gam(y~te(x,z))
vis.gam(b2);title("tensor product")
b3 <- gam(y~ ti(x) + ti(z) + ti(x,z))
vis.gam(b3);title("tensor anova")

## now illustrate partial ANOVA decomp...
vis.gam(b3);title("full anova")
b4 <- gam(y~ ti(x) + ti(x,z,mc=c(0,1))) ## note z constrained!
vis.gam(b4);title("partial anova")
plot(b4)

par(old.par)

## now with a multivariate marginal....

test2<-function(u,v,w,sv=0.3,sw=0.4)  
{ ((pi**sv*sw)*(1.2*exp(-(v-0.2)^2/sv^2-(w-0.3)^2/sw^2)+
  0.8*exp(-(v-0.7)^2/sv^2-(w-0.8)^2/sw^2)))*(u-0.5)^2*20
}
n <- 500
v <- runif(n);w<-runif(n);u<-runif(n)
f <- test2(u,v,w)
y <- f + rnorm(n)*0.2
# tensor product of 2D Duchon spline and 1D cr spline
m <- list(c(1,.5),rep(0,0)) ## example of list form of m
b <- gam(y~te(v,w,u,k=c(30,5),d=c(2,1),bs=c("ds","cr"),m=m))
plot(b)

作者

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

参考

Wood, S.N. (2006) Low rank scale invariant tensor product smooths for generalized additive mixed models. Biometrics 62(4):1025-1036 doi:10.1111/j.1541-0420.2006.00574.x

Wood S.N. (2017) Generalized Additive Models: An Introduction with R (2nd edition). Chapman and Hall/CRC Press. doi:10.1201/9781315370279

https://www.maths.ed.ac.uk/~swood34/

也可以看看

sgamgammsmooth.construct.tensor.smooth.spec

相关用法


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