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


R smooth.construct.fs.smooth.spec GAM 中平滑交互的因子


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

说明

简单因子平滑交互,与 gamm 一起使用时非常有效。此平滑类允许对因子的每个级别进行单独的平滑,并且所有平滑具有相同的平滑参数。它是使用因子 by 变量的替代方法。

有关因子平滑交互的更通用替代方案,请参阅factor.smooth(包括张量积平滑与因子的交互)。

用法

## S3 method for class 'fs.smooth.spec'
smooth.construct(object, data, knots)
## S3 method for class 'fs.interaction'
Predict.matrix(object, data)

参数

object

对于 smooth.construct 方法,平滑规范对象,通常由术语 s(x,...,bs="fs",) 生成。可能有 gamm 属性:查看详细信息。对于 predict.Matrix 方法,由 smooth.construct 方法生成的类 "fs.interaction" 的对象。

data

仅包含该术语所需的数据(包括任何 by 变量)的列表,其名称对应于 object$term

knots

包含为顺利基础设置提供的任何结的列表。

细节

此类为单因子变量的每个级别生成平滑。在 gam 公式中,这是通过类似 s(x,fac,bs="fs") 来完成的,它几乎相当于 s(x,by=fac,id=1) (使用 gam 参数 select=TRUE )。这些项受到完全惩罚,每个零空间分量都有单独的惩罚:因此它们不居中(无sum-to-zero约束)。

该类对于与 gamm 一起使用特别有用,其中估计有效地利用了因子内平滑的嵌套。但请注意: i) gamm 只允许一个平滑条件因子,因此 s(x)+s(z,fac,bs="fs")+s(v,fac,bs="fs") 可以,但 s(x)+s(z,fac1,bs="fs")+s(v,fac2,bs="fs") 则不行; ii) 所有附加随机效应和相关结构将被视为嵌套在平滑因子交互作用的因子内。为了促进这一点,从 gamm 调用构造函数,并将属性 "gamm" 附加到平滑规范对象。结果与不这样做的情况不同。

请注意,gamm4 包中的 gamm4 不受适用于 gamm 的任何限制,并且 "fs" 术语可以在没有 side-effects 的情况下使用。仍然使用具有 "gamm" 属性的平滑规范对象来调用构造函数。

任何单一惩罚基础都可以用于在每个因子水平上进行平滑。默认值为 "tp" ,但可以在 sxt 参数中提供替代方案(例如 s(x,fac,bs="fs",xt="cr")s(x,fac,bs="fs",xt=list(bs="cr") )。 s(...,bs="fs")k 参数是指用于因子变量每个级别的基本维度。

请注意一个计算瓶颈:当前 gamm (或 gamm4 )将为平滑结果生成完整的后验协方差矩阵,包括因子每个级别的平滑结果。如果因子的级别超过数百个,则该矩阵可能会变得很大且计算成本高昂。即使是一两百级,也应该注意保留k

此类的绘图方法有两种方案。 scheme==0 是彩色的,而 scheme==1 是黑白的。

"fs.interaction" 的对象或将因子平滑交互的系数映射到平滑本身的矩阵。 "fs.interaction" 对象的内容取决于是否使用具有属性 gamm 的对象调用 smooth.construct:请参见下文。

例子

library(mgcv)
set.seed(0)
## simulate data...
f0 <- function(x) 2 * sin(pi * x)
f1 <- function(x,a=2,b=-1) exp(a * x)+b
f2 <- function(x) 0.2 * x^11 * (10 * (1 - x))^6 + 10 * 
            (10 * x)^3 * (1 - x)^10
n <- 500;nf <- 25
fac <- sample(1:nf,n,replace=TRUE)
x0 <- runif(n);x1 <- runif(n);x2 <- runif(n)
a <- rnorm(nf)*.2 + 2;b <- rnorm(nf)*.5
f <- f0(x0) + f1(x1,a[fac],b[fac]) + f2(x2)
fac <- factor(fac)
y <- f + rnorm(n)*2
## so response depends on global smooths of x0 and 
## x2, and a smooth of x1 for each level of fac.

## fit model...
bm <- gamm(y~s(x0)+ s(x1,fac,bs="fs",k=5)+s(x2,k=20))
plot(bm$gam,pages=1)
summary(bm$gam)

## Also efficient using bam(..., discrete=TRUE)
bd <- bam(y~s(x0)+ s(x1,fac,bs="fs",k=5)+s(x2,k=20),discrete=TRUE)
plot(bd,pages=1)
summary(bd)

## Could also use...
## b <- gam(y~s(x0)+ s(x1,fac,bs="fs",k=5)+s(x2,k=20),method="ML")
## ... but its slower (increasingly so with increasing nf)
## b <- gam(y~s(x0)+ t2(x1,fac,bs=c("tp","re"),k=5,full=TRUE)+
##        s(x2,k=20),method="ML"))
## ... is exactly equivalent. 

作者

Simon N. Wood simon.wood@r-project.org with input from Matteo Fasiolo.

也可以看看

factor.smooth , gamm , smooth.construct.sz.smooth.spec

相关用法


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