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


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