簡體   English   中英

AIC() 和 model$aic 在 mgcv::gam() 中給出不同的結果

[英]AIC() and model$aic give different result in mgcv::gam()

我正在使用帶有空間平滑的 mgcv::gam() 擬合 GAM,類似於本示例中的 model( 此處的數據)。 我發現使用AIC(model)會產生與model$aic不同的結果。 為什么是這樣? 哪個是對的?

library('mgcv')

galveston <- read.csv('gbtemp.csv')
galveston <- transform(galveston,
                   datetime = as.POSIXct(paste(DATE, TIME),
                                         format = '%m/%d/%y %H:%M', tz = "CDT"))
galveston <- transform(galveston,
                   STATION_ID = factor(STATION_ID),
                   DoY = as.numeric(format(datetime, format = '%j')),
                   ToD = as.numeric(format(datetime, format = '%H')) +
                       (as.numeric(format(datetime, format = '%M')) / 60))

knots <- list(DoY = c(0.5, 366.5))
M <- list(c(1, 0.5), NA)
m <- bam(MEASUREMENT ~
         s(ToD, k = 10) +
         s(DoY, k = 30, bs = 'cc') +
         s(YEAR, k = 30) +
         s(LONGITUDE, LATITUDE, k = 100, bs = 'ds', m = c(1, 0.5)) +
         ti(DoY, YEAR, bs = c('cc', 'tp'), k = c(15, 15)) +
         ti(LONGITUDE, LATITUDE, ToD, d = c(2,1), bs = c('ds','tp'), 
            m = M, k = c(20, 10)) +
         ti(LONGITUDE, LATITUDE, DoY, d = c(2,1), bs = c('ds','cc'),
            m = M, k = c(25, 15)) +
         ti(LONGITUDE, LATITUDE, YEAR, d = c(2,1), bs = c('ds','tp'),
            m = M, k = c(25, 15)),
data = galveston, method = 'fREML', knots = knots,
nthreads = 4, discrete = TRUE)

AIC(m)
[1] 57073.08

m$aic
[1] 57053.21

請注意,我給出的示例使用bam()而不是gam()但結果是相同的。

我無法用更簡單的 model 復制它(示例來自這里):

set.seed(2) 
dat <- gamSim(1,n=400,dist="normal",scale=2)
b <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),data=dat)

AIC(b)
[1] 1696.143

b$aic
[1] 1696.143

差異是因為$aic中存儲的內容作為 AIC 中復雜性校正的自由度是 model 的有效自由度 (EDF)。 這已被證明過於自由或保守,並且可能導致 AIC 總是選擇更復雜的 model 或更簡單的 model,具體取決於使用的是邊際 AIC 還是條件 AIC。

有一些方法可以糾正這種行為, mgcv實現了 Wood 等人 (2016) 的方法,該方法對自由度進行了校正。 這是通過logLik.gam()調用的AIC.gam() () function 完成的。 這也解釋了差異,因為$aic是未應用校正的標准 AIC,而 IIRC 是 GAM object 的一個組件,該組件明顯早於 Wood 等人 (2016) 的工作。

至於為什么你不能用這個簡單的例子來復制它,那是因為校正需要使用擬合的組件,這些組件只有在用於擬合的method"REML""ML"時才可用(包括"fREML" bam()並且在使用 Extended Fellner Schall 或 BFGS 優化器時也不會:

> library('mgcv')
Loading required package: nlme
This is mgcv 1.8-34. For overview type 'help("mgcv-package")'.
> set.seed(2) 
> dat <- gamSim(1,n=400,dist="normal",scale=2)
Gu & Wahba 4 term additive model
> b <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),data=dat, method = 'REML')
> AIC(b)
[1] 1698.504
> b$aic
[1] 1696.894

其中method的默認值是使用 GCV。

參考

Wood, SN, Pya, N., Säfken, B., 2016。通用平滑模型的平滑參數和 Model 選擇。 J.上午。 統計。 副教授。 111, 1548–1563。 https://doi.org/10.1080/01621459.2016.1180986

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM