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


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