R

廣義加法模型 (GAM)、交互作用和協變量

  • December 11, 2017

我一直在探索許多用於預測的工具,並且發現廣義加法模型 (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 同時使用xw作為一維平滑,產生了很好的擬合效果。Model 4 使用2D 平滑,也非常適合xw這兩個模型非常相似,但並不完全相同。

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 個平滑度參數:

  1. 與主要平滑效果相關的一個
  2. 與主要平滑效果相關的一個
  3. 與邊緣平滑相關的一個在交互張量積中平滑
  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),其上的變化係數效應是疊加的。

引用自:https://stats.stackexchange.com/questions/318278

comments powered by Disqus