簡體   English   中英

ordisurf 與 mgcv:gam 模型

[英]ordisurf vs mgcv:gam model

我想更新 R vegan 中 ordisurf 函數背后的 GAM 模型(添加隨機因子)。 為此,我首先構建了應該與 ordisurf 后面的模型相同的模型,如下所述: https ://www.fromthebottomoftheheap.net/2011/06/10/what-is-ordisurf-doing/

然而,我在 mgcv 中制作的 ordisurf 和 GAM 模型給出了完全不同的結果。 下面帶有沙丘數據的示例代碼。 誰能解釋一下? GAM 模型應該如何與 ordisurf 類似地執行? (重要的是在開始改進之前知道...... :))

ord <-metaMDS(dune, k=3) 

surf <- ordisurf(ord, dune.env$A1, choices = c(2,3))

scrs <- data.frame(scores(ord, display = "sites", choices = c(1,2,3)))

dat <- with(dune, cbind(scrs, dune.env$A1))

mod_23 <- gam(dune.env$A1 ~ s(NMDS2, NMDS3, k = 10), data = dat)

plot.gam(mod_12, se=FALSE, cex = 1, pch = 1, col="blue")

此類問題的最佳答案是閱讀源代碼以了解實際執行的操作。 自從我寫了ordisurf()博文后,我們決定調整ordisurf()的默認設置,以反映估計 GAM 的良好做法,並對模型選擇更加嚴格。

第一個意味着我們使用method = 'REML'mgcv::gam()擬合模型,以利用 REML 平滑度選擇。 GCV 平滑度選擇(當前)是mgcv::gam() ) 中的默認設置,但不推薦使用,並且mgcv的開發者 Simon Wood 暗示,某些未來版本的mgcv可能會更改默認設置 from method = 'GCV.Cp' method = 'REML' 其原因是在許多應用中觀察到 GCV 平滑度選擇不夠平滑。 這發生在 GCV 函數的輪廓在全局最佳 GCV 分數附近變得非常平坦的情況下。 數據中的細微差異可能會導致選擇的平滑度參數非常不同,其中一些會導致明顯的平滑度不足。 REML 和 ML 平滑度選擇受此問題的影響較小; REML 分數的輪廓往往更彎曲,並且具有明顯的最小值。

第二點,以及我們現在使用select = TRUE ,來自觀察 GAM 中的平滑度懲罰,即選擇估計表面的擺動程度,僅影響擺動基函數。 基擴展包含幾個基函數,從懲罰的角度來看,它們是完全平滑的; 有兩個線性二維基函數表示兩個線性平面,根據定義,它們具有零曲率(零二階導數),因此對擺動懲罰根本沒有貢獻(無論如何都是默認值,即使用估計樣條曲率的懲罰)。 最終結果是平滑度懲罰可以一直懲罰回到估計的平面表面,但不能再進一步了。 這在實踐中意味着用戶可以將ordisurf()模型的結果解釋為線性表面,即使該線性表面在統計上不顯着(並且許多用戶只看圖而不是底層 GAM,它會告訴他們的飛機是否重要)。 select = TRUE所做的是為平滑添加第二個懲罰,這只會影響完美平滑的基函數。 這具有 GAM 能夠懲罰/縮小模型整個我們正在估計的表面的效果。 換句話說,它可以將表面縮小為平坦、水平的零效應表面 === 排序配置和響應變量之間的零關系。

總之,我覺得這些選項最能防止用戶誤報。

如果您將gam()調用更改為:

mod_23 <- gam(dune.env$A1 ~ s(NMDS2, NMDS3, k = 10), data = dat,
              method = 'REML', select = TRUE)

那么你應該得到與ordisurf()產生的輸出相同的輸出:

r$> mod_23                                                                       

Family: gaussian 
Link function: identity 

Formula:
dune.env$A1 ~ s(NMDS2, NMDS3, k = 10)

Estimated degrees of freedom:
0.285  total = 1.28 

REML score: 43.25057     

r$> surf                                                                         

Family: gaussian 
Link function: identity 

Formula:
y ~ s(x1, x2, k = 10, bs = "tp", fx = FALSE)

Estimated degrees of freedom:
0.285  total = 1.28 

REML score: 43.25057

暫無
暫無

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

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