廣義加法模型 (GAM)、交互作用和協變量
我一直在探索許多用於預測的工具,並且發現廣義加法模型 (GAM) 最有潛力實現此目的。GAM很棒!它們允許非常簡潔地指定複雜的模型。然而,同樣的簡潔性讓我有些困惑,特別是關於 GAM 如何構思交互項和協變量。
考慮一個示例數據集(帖子末尾的可重現代碼),其中
y
是一個由幾個高斯擾動的單調函數,加上一些噪聲:數據集有幾個預測變量:
x
:數據的索引(1-100)。w
:標記y
高斯存在的部分的次要特徵。w
具有 1-20 的值,其中x
介於 11 和 30 之間,以及 51 到 70 之間。否則,w
為 0。w2
:w + 1
,因此沒有 0 值。R 的
mgcv
包可以很容易地為這些數據指定許多可能的模型:模型 1 和 2 相當直觀。
y
僅根據默認平滑度中的索引值進行預測x
會產生模糊正確但過於平滑的結果。y
僅根據w
中存在的“平均高斯”模型的結果進行預測y
,而對其他數據點沒有“意識”,所有這些數據點的w
值都為 0。Model 3 同時使用
x
和w
作為一維平滑,產生了很好的擬合效果。Model 4 使用2D 平滑,也非常適合x
。w
這兩個模型非常相似,但並不完全相同。Model 5 模型
x
“by”w
。模型 6 則相反。mgcv
的文檔指出“by 參數確保平滑函數乘以 [‘by’ 參數中給出的協變量]”。那麼模型 5 和 6 不應該等效嗎?模型 7 和 8 使用其中一個預測變量作為線性項。這些對我來說很直觀,因為它們只是在做 GLM 對這些預測器所做的事情,然後將效果添加到模型的其餘部分。
最後,模型 9 與模型 5 相同,只是
x
被“按”平滑w2
(即w + 1
)。對我來說奇怪的是,沒有零在w2
“by”交互中產生了截然不同的效果。所以,我的問題是:
- Model 3 和 Model 4 的規格有什麼區別?還有其他一些例子可以更清楚地說明差異嗎?
- 究竟,“by”在這裡做什麼?我在伍德的書和這個網站上讀到的大部分內容都表明“by”會產生乘法效應,但我很難理解它的直覺。
- 為什麼 Model 5 和 Model 9 之間會有如此顯著的差異?
接下來是 Reprex,用 R 編寫。
library(magrittr) library(tidyverse) library(mgcv) set.seed(1222) data.ex <- tibble( x = 1:100, w = c(rep(0, 10), 1:20, rep(0, 20), 1:20, rep(0, 30)), w2 = w + 1, y = dnorm(x, mean = rep(c(20, 60), each = 50), sd = 3) + (seq(0, 1, length = 100)^2) / 2 + rnorm(100, sd = 0.01) ) models <- tibble( model = 1:9, formula = c('y ~ s(x)', 'y ~ s(w)', 'y ~ s(x) + s(w)', 'y ~ s(x, w)', 'y ~ s(x, by = w)', 'y ~ s(w, by = x)', 'y ~ x + s(w)', 'y ~ w + s(x)', 'y ~ s(x, by = w2)'), gam = map(formula, function(x) gam(as.formula(x), data = data.ex)), data.to.plot = map(gam, function(x) cbind(data.ex, predicted = predict(x))) ) plot.models <- unnest(models, data.to.plot) %>% mutate(facet = sprintf('%i: %s', model, formula)) %>% ggplot(data = ., aes(x = x, y = y)) + geom_point() + geom_line(aes(y = predicted), color = 'red') + facet_wrap(facets = ~facet) print(plot.models)
Q1 型號 3 和型號 4 有什麼區別?
模型 3 是純加法模型
所以我們有一個常數加上平滑的效果加上平滑的效果.
模型 4 是兩個連續變量的平滑交互
從實際意義上講,Model 3 表示,無論效果如何, 的效果關於響應是一樣的;如果我們修復在某個已知的值和變化在一定範圍內,來自的貢獻擬合模型保持不變。如果需要,請通過
predict()
模型 3 中的 -ing 來驗證這一點,以獲得固定值 ofx
和幾個不同的值,w
並使用方法的type = 'terms'
參數predict()
。您將看到對 的擬合/預測值的持續貢獻s(x)
。這不是模型 4 的情況;這個模型說,平滑效果隨著值平滑變化反之亦然。
請注意,除非和在相同的單位中,或者我們期望兩個變量具有相同的擺動,您應該使用它
te()
來擬合交互。m4a <- gam(y ~ te(x, w), data = data.ex, method = 'REML') pdata <- mutate(data.ex, Fittedm4a = predict(m4a)) ggplot(pdata, aes(x = x, y = y)) + geom_point() + geom_line(aes(y = Fittedm4a), col = 'red')
從某種意義上說,模型 4 很合適
在哪裡是“主要”平滑效果的純平滑交互和,並且為了可識別性,已從基礎中刪除. 您可以通過以下方式獲得此模型
m4b <- gam(y ~ ti(x) + ti(w) + ti(x, w), data = data.ex, method = 'REML')
但請注意,這估計了 4 個平滑度參數:
- 與主要平滑效果相關的一個
- 與主要平滑效果相關的一個
- 與邊緣平滑相關的一個在交互張量積中平滑
- 與邊緣平滑相關的一個在交互張量積中平滑
該
te()
模型僅包含兩個平滑參數,每個邊際基礎一個。所有這些模型的一個基本問題是不是嚴格光滑的;有一個不連續的地方降至 0(或 1 in
w2
)。這顯示在您的情節中(以及我在這裡詳細展示的情節)。Q2 “by”到底在做什麼?
by
根據您傳遞給by
參數的內容,變量 smooths 可以做許多不同的事情。在您的示例中,by
變量,是連續的。在這種情況下,您會得到一個可變係數模型。這是一個模型,其中的線性效應平穩變化. 用等式術語來說,這就是你的模型 5 正在做的事情如果對於某些給定的值,這不是很清楚(當我第一次看到這些模型時,我不是很清楚)我們在這個值上評估平滑函數,然後這變成等價於; 換句話說,它是線性效應在給定的值,並且這些線性效應隨著. 有關協變量的線性效應改變空間(緯度和經度)的平滑函數的具體示例,請參見西蒙著作第二版中的第 7.5.3 節。
Q3 為什麼Model 5和Model 9會有如此顯著的差異?
模型 5 和 9 的差異我認為僅僅是因為乘以 0 或乘以 1。與前者相比,模型中唯一項的效果是 0 因為. 在模型 9 中,您有在那些沒有高斯人貢獻的領域. 作為是一個〜指數函數,你得到這個疊加在整體效果上.
換言之,模型 5 處處包含零趨勢為 0,但模型 9 在任何地方都包含 ~ 指數趨勢為 0 (1),其上的變化係數效應是疊加的。