choose.k
位於 mgcv
包(package)。 說明
使用懲罰回歸平滑器時,選擇基本維度並檢查選擇。
懲罰回歸平滑器通過使用相對適中大小的基礎 k
進行定義,從而獲得計算效率。在 mgcv
包中設置模型時,在模型公式中使用 s
或 te
項,必須選擇 k
:默認值本質上是任意的。
實際上, k-1
(或 k
)設置與 s
平滑相關的自由度上限(平滑上的可識別性約束通常會丟失 1 個自由度)。對於 te
平滑,自由度的上限由為約束的每個邊平滑提供的 k
值的乘積給出。然而,實際有效自由度由擬合期間選擇的懲罰程度(GCV、AIC、REML 或任何指定的值)控製。例外情況是如果使用 fx=TRUE
選項指定平滑,在這種情況下它不會受到懲罰。
因此,k
的精確選擇通常並不重要:它應該選擇足夠大,以便您有足夠的自由度來相當好地表示底層 ‘truth’,但又足夠小以保持合理的計算效率。顯然‘large’和‘small’取決於正在解決的特定問題。
與所有模型假設一樣,能夠非正式地檢查 k
的選擇非常有用。如果模型項的有效自由度估計遠小於k-1
,那麽這不太值得,但隨著 EDF 方法k-1
,檢查可能很重要。有用的通用方法如下:(i)擬合模型並提取偏差殘差; (ii) 對於模型中的每個平滑項,使用大幅增加的 k
來擬合等效的、單一的、平滑的殘差,以查看殘差中是否存在可以通過增加 k
來解釋的模式。下麵提供了示例。
顯而易見但成本更高的替代方案是簡單地增加可疑的 k
並重新安裝原始模型。如果這樣做沒有導致統計上重要的變化,那麽 k
就足夠大了。 (當 k
增加時,平滑度選擇標準和/或有效自由度的變化提供了明顯的數值測量,表明擬合是否發生了實質性變化。)
gam.check
對基本尺寸運行基於模擬的簡單檢查,這有助於標記 k
過低的術語。從 plot.gam
可用的部分殘差中也可以看到嚴重太小的 k
。
可能導致混淆的一種情況是:模型使用 k=10
擬合以獲得平滑項,並且該項的 EDF 估計為 7.6,低於最大值 9。然後使用 k=20
重新擬合該模型EDF 增加到 8.7 - 發生了什麽 - 為什麽 EDF 第一次不是 8.7?解釋是,k=20
的函數空間包含 EDF 8.7 的函數子空間比 k=10
的函數空間更大:這個較大子空間中的函數之一比 EDF 8.7 中的任何函數都更適合數據。更小的子空間。然而,這些微妙之處很少對從模型擬合中得出的統計結論產生太大影響。
例子
## Simulate some data ....
library(mgcv)
set.seed(1)
dat <- gamSim(1,n=400,scale=2)
## fit a GAM with quite low `k'
b<-gam(y~s(x0,k=6)+s(x1,k=6)+s(x2,k=6)+s(x3,k=6),data=dat)
plot(b,pages=1,residuals=TRUE) ## hint of a problem in s(x2)
## the following suggests a problem with s(x2)
gam.check(b)
## Another approach (see below for more obvious method)....
## check for residual pattern, removeable by increasing `k'
## typically `k', below, chould be substantially larger than
## the original, `k' but certainly less than n/2.
## Note use of cheap "cs" shrinkage smoothers, and gamma=1.4
## to reduce chance of overfitting...
rsd <- residuals(b)
gam(rsd~s(x0,k=40,bs="cs"),gamma=1.4,data=dat) ## fine
gam(rsd~s(x1,k=40,bs="cs"),gamma=1.4,data=dat) ## fine
gam(rsd~s(x2,k=40,bs="cs"),gamma=1.4,data=dat) ## `k' too low
gam(rsd~s(x3,k=40,bs="cs"),gamma=1.4,data=dat) ## fine
## refit...
b <- gam(y~s(x0,k=6)+s(x1,k=6)+s(x2,k=20)+s(x3,k=6),data=dat)
gam.check(b) ## better
## similar example with multi-dimensional smooth
b1 <- gam(y~s(x0)+s(x1,x2,k=15)+s(x3),data=dat)
rsd <- residuals(b1)
gam(rsd~s(x0,k=40,bs="cs"),gamma=1.4,data=dat) ## fine
gam(rsd~s(x1,x2,k=100,bs="ts"),gamma=1.4,data=dat) ## `k' too low
gam(rsd~s(x3,k=40,bs="cs"),gamma=1.4,data=dat) ## fine
gam.check(b1) ## shows same problem
## and a `te' example
b2 <- gam(y~s(x0)+te(x1,x2,k=4)+s(x3),data=dat)
rsd <- residuals(b2)
gam(rsd~s(x0,k=40,bs="cs"),gamma=1.4,data=dat) ## fine
gam(rsd~te(x1,x2,k=10,bs="cs"),gamma=1.4,data=dat) ## `k' too low
gam(rsd~s(x3,k=40,bs="cs"),gamma=1.4,data=dat) ## fine
gam.check(b2) ## shows same problem
## same approach works with other families in the original model
dat <- gamSim(1,n=400,scale=.25,dist="poisson")
bp<-gam(y~s(x0,k=5)+s(x1,k=5)+s(x2,k=5)+s(x3,k=5),
family=poisson,data=dat,method="ML")
gam.check(bp)
rsd <- residuals(bp)
gam(rsd~s(x0,k=40,bs="cs"),gamma=1.4,data=dat) ## fine
gam(rsd~s(x1,k=40,bs="cs"),gamma=1.4,data=dat) ## fine
gam(rsd~s(x2,k=40,bs="cs"),gamma=1.4,data=dat) ## `k' too low
gam(rsd~s(x3,k=40,bs="cs"),gamma=1.4,data=dat) ## fine
rm(dat)
## More obvious, but more expensive tactic... Just increase
## suspicious k until fit is stable.
set.seed(0)
dat <- gamSim(1,n=400,scale=2)
## fit a GAM with quite low `k'
b <- gam(y~s(x0,k=6)+s(x1,k=6)+s(x2,k=6)+s(x3,k=6),
data=dat,method="REML")
b
## edf for 3rd smooth is highest as proportion of k -- increase k
b <- gam(y~s(x0,k=6)+s(x1,k=6)+s(x2,k=12)+s(x3,k=6),
data=dat,method="REML")
b
## edf substantially up, -ve REML substantially down
b <- gam(y~s(x0,k=6)+s(x1,k=6)+s(x2,k=24)+s(x3,k=6),
data=dat,method="REML")
b
## slight edf increase and -ve REML change
b <- gam(y~s(x0,k=6)+s(x1,k=6)+s(x2,k=40)+s(x3,k=6),
data=dat,method="REML")
b
## defintely stabilized (but really k around 20 would have been fine)
作者
Simon N. Wood simon.wood@r-project.org
參考
Wood, S.N. (2017) Generalized Additive Models: An Introduction with R (2nd edition). CRC/Taylor & Francis.
相關用法
- R choldrop 刪除並排名第一 Cholesky 因子更新
- R cox.ph 附加 Cox 比例風險模型
- R cox.pht 具有時變協變量的可加 Cox 比例風險模型
- R cnorm 對數正態 AFT 和 Tobit 模型的 GAM 刪失正態族
- R columb 俄亥俄州哥倫布犯罪數據的簡化版本
- R concurvity GAM 並發測量
- R cSplineDes 評估循環 B 樣條基礎
- R vcov.gam 從 GAM 擬合中提取參數(估計器)協方差矩陣
- R gam.check 擬合 gam 模型的一些診斷
- R null.space.dimension TPRS 未懲罰函數空間的基礎
- R gam.reparam 尋找平方根懲罰的穩定正交重新參數化。
- R extract.lme.cov 從 lme 對象中提取數據協方差矩陣
- R scat 用於重尾數據的 GAM 縮放 t 係列
- R smooth.construct.cr.smooth.spec GAM 中的懲罰三次回歸樣條
- R bandchol 帶對角矩陣的 Choleski 分解
- R gam.side GAM 的可識別性邊條件
- R mgcv.parallel mgcv 中的並行計算。
- R gamm 廣義加性混合模型
- R pdTens 實現張量積平滑的 pdMat 類的函數
- R Predict.matrix GAM 中平滑項的預測方法
- R Predict.matrix.soap.film 皂膜光滑度預測矩陣
- R smooth.construct.bs.smooth.spec GAM 中的懲罰 B 樣條
- R gamlss.gH 計算回歸係數的對數似然導數
- R plot.gam 默認 GAM 繪圖
- R mvn 多元正態加性模型
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Basis dimension choice for smooths。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。