ฉันสำรวจเครื่องมือจำนวนหนึ่งเพื่อการคาดการณ์และพบว่าแบบจำลองการเติมทั่วไป (เกม) เพื่อให้มีศักยภาพมากที่สุดสำหรับจุดประสงค์นี้ เกมยอดเยี่ยม! พวกเขาอนุญาตให้ระบุแบบจำลองที่ซับซ้อนอย่างรัดกุม อย่างไรก็ตามความกระชับแบบเดียวกันนั้นทำให้ฉันสับสนโดยเฉพาะอย่างยิ่งในเรื่องที่ว่า GAMs เข้าใจถึงเงื่อนไขการมีปฏิสัมพันธ์และเพื่อนร่วมรัฐอย่างไร
ลองพิจารณาชุดข้อมูลตัวอย่าง (โค้ดที่ทำซ้ำได้เมื่อสิ้นสุดการโพสต์) ซึ่งy
เป็นฟังก์ชั่นแบบโมโนโทนิกที่รบกวนโดย gaussians สองคู่พร้อมเสียงรบกวน:
ชุดข้อมูลมีตัวแปรตัวทำนายบางอย่าง:
x
: ดัชนีของข้อมูล (1-100)w
: คุณลักษณะรองที่ทำเครื่องหมายส่วนต่างๆของy
ที่ซึ่งมีเกาส์เซียนอยู่w
มีค่า 1-20 โดยx
อยู่ระหว่าง 11 ถึง 30 และ 51 ถึง 70 มิฉะนั้นw
เท่ากับ 0w2
:w + 1
เพื่อที่จะไม่มีค่า 0
mgcv
แพ็คเกจของ R ทำให้ง่ายต่อการระบุจำนวนโมเดลที่เป็นไปได้สำหรับข้อมูลเหล่านี้:
โมเดล 1 และ 2 นั้นใช้งานง่าย การคาดการณ์y
เฉพาะจากค่าดัชนีในx
ที่ความเรียบเริ่มต้นสร้างสิ่งที่ถูกต้องราง แต่เรียบเกินไป การคาดการณ์y
จากw
ผลลัพธ์ในรูปแบบของ "เฉลี่ย gaussian" ที่มีอยู่y
และไม่มี "การรับรู้" ของจุดข้อมูลอื่น ๆ ซึ่งทั้งหมดมีw
ค่า 0
แบบจำลอง 3 ใช้ทั้งแบบเรียบx
และแบบw
1D ทำให้พอดีได้ดี การใช้งานรุ่น 4 x
และw
ในแบบ 2D เรียบลื่นยังให้ความพอดี ทั้งสองรุ่นมีความคล้ายคลึงกันมาก แต่ไม่เหมือนกัน
รูปแบบ 5 รุ่น"โดย"x
w
รุ่น 6 ทำในสิ่งที่ตรงกันข้าม mgcv
เอกสารของระบุว่า "การโต้แย้งทำให้แน่ใจว่าฟังก์ชันที่ราบรื่นจะได้รับการคูณด้วย [ค่า covariate ที่ระบุในอาร์กิวเมนต์ 'by']" ดังนั้นโมเดล 5 และ 6 จึงไม่ควรเทียบเท่ากัน?
แบบจำลองที่ 7 และ 8 ใช้ตัวทำนายอย่างใดอย่างหนึ่งเป็นคำเชิงเส้น สิ่งเหล่านี้เหมาะสมกับฉันในขณะที่พวกเขากำลังทำสิ่งที่ GLM จะทำกับตัวทำนายเหล่านี้แล้วเพิ่มเอฟเฟกต์ให้กับส่วนที่เหลือของโมเดล
สุดท้ายรุ่น 9 จะเหมือนกับรุ่น 5 ยกเว้นว่าx
จะราบรื่น "โดย" w2
(ซึ่งก็คือw + 1
) สิ่งที่แปลกสำหรับฉันที่นี่คือการขาดศูนย์ในการw2
สร้างผลกระทบที่แตกต่างกันอย่างน่าทึ่งในการโต้ตอบ "โดย"
ดังนั้นคำถามของฉันคือ:
- ความแตกต่างระหว่างข้อกำหนดในรุ่น 3 และ 4 คืออะไร? มีตัวอย่างอื่นอีกไหมที่จะดึงความแตกต่างให้ชัดเจนยิ่งขึ้น?
- อะไรคือ "โดย" ทำที่นี่? สิ่งที่ฉันได้อ่านในหนังสือของวู้ดและเว็บไซต์นี้แสดงให้เห็นว่า "โดย" ก่อให้เกิดเอฟเฟกต์คูณ แต่ฉันมีปัญหาในการเข้าใจสัญชาตญาณของมัน
- เหตุใดจึงมีความแตกต่างที่น่าทึ่งระหว่างรุ่น 5 และ 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)