Chọn nút thắt cho GAM


9

Khi chọn số lượng nút thắt thích hợp cho GAM, người ta có thể muốn tính đến số lượng dữ liệu và gia số trên trục x.

Điều gì xảy ra nếu chúng ta có 100 gia số trên trục x với 1000 điểm dữ liệu ở mỗi mức tăng.

Thông tin ở đây cho biết:

Nếu chúng không được cung cấp thì các nút của spline được đặt đồng đều trong các giá trị hiệp biến mà thuật ngữ này đề cập đến: Ví dụ: nếu khớp 101 dữ liệu với một nút 11 nút của x thì sẽ có một nút ở mỗi 10 (theo thứ tự) giá trị x.

Vì vậy, một khởi đầu cơ bản nên là 9 hải lý trong ví dụ này? Tôi chỉ không chắc chắn phạm vi nút thắt nào sẽ phù hợp với tập dữ liệu này vì có thể phù hợp với số lượng rất nhỏ đến rất lớn.

set.seed(1)
dat <- data.frame(y = rnorm(10000), x = 100)

library(ggplot)
ggplot(dat, aes(x = x, y = y)) + 
              geom_point(size= 0.5) +                      
stat_smooth(method = "gam", 
            formula = y ~ s(x, bs = "cs"),k=9, col = "black")

Nếu k = 25 cung cấp một sự phù hợp hữu ích, nó có hợp lý cho dữ liệu này không?

Câu trả lời:


12

Một tùy chọn tốt hơn nhiều là phù hợp với mô hình của bạn bằng cách sử dụng gam () trong gói mgcv, trong đó có một phương thức gọi là Xác thực chéo tổng quát (GCV). GCV sẽ tự động chọn số lượng nút thắt cho mô hình của bạn để sự đơn giản được cân bằng với khả năng giải thích. Khi sử dụng gam () trong mgcv, bật GCV bằng cách đặt k bằng -1.

Chỉ như thế này:

set.seed(1)
dat <- data.frame(y = rnorm(10000), x = rnorm(10000))

library(mgcv)
G1 <- gam(y ~ s(x, k = -1, bs = "cs"), data = dat)
summary(G1) # check the significance of your smooth term
gam.check(G1) # inspect your residuals to evaluate if the degree of smoothing is good

Để vẽ đường thẳng của bạn, bạn sẽ phải trích xuất mô hình phù hợp. Cái này cần phải dùng mẹo:

plot(y~x, data = dat, cex = .1)
G1pred <- predict(G1)
I1 <- order(dat$y)
lines(dat$x, G1pred)

Bạn cũng có thể điều chỉnh k theo cách thủ công và xem số k mang đến cho bạn gần nhất với giá trị k được đặt tự động bởi GCV.


Không những gì bs = "cs"hạn trong spline làm gì?
dùng321627

1
"cs" chỉ định rằng cơ sở để làm mịn sẽ là một khối vuông.
Manuel Bickel

Không chỉ định ktương đương với chỉ định k=-1?
Nakx

Không chắc chắn tôi hoàn toàn hiểu Nakx, nhưng tôi sẽ làm rõ rằng k = -1 sẽ cho phép mô hình xác định số lượng nút tối ưu bằng cách sử dụng Xác thực chéo tổng quát. Điều chỉnh thủ công sẽ cho phép so sánh cách thay đổi mô hình phù hợp dựa trên số lượng nút. Điều đó có thể sâu sắc, và có thể giúp mô tả hiện tượng quan tâm.
Ira S

+1 Câu trả lời tuyệt vời! Làm thế nào để bạn hình dung làm thế nào spline bật ra? Ý tôi là, đồ thị của các hệ số?
Erosennin

5

Ý tưởng đến từ đâu mà GCV sẽ tự động chọn số lượng nút thắt? Số lượng nút thắt (nghĩa là kích thước cơ sở) là cố định và không thể thay đổi trong quá trình phù hợp với mô hình. Điều mà điểm số GCV trong chức năng gam () đang thực hiện "tự động" không phải là chọn kích thước cơ sở k, như Ira S nói, mà là chọn mức độ mượt mà của mỗi spline cơ sở bằng cách đưa ra một hình phạt giả trong mục tiêu tối thiểu hóa hoặc phù hợp. Để chọn số nút k bạn nên sử dụng giá trị lớn hơn số bậc tự do mà bạn đang mong đợi. Trích dẫn sự giúp đỡ của select.k: "sự lựa chọn chính xác của k nói chung không quan trọng: nó nên được chọn đủ lớn để bạn chắc chắn có đủ mức độ tự do để thể hiện 'sự thật' bên dưới một cách hợp lý, nhưng đủ nhỏ để duy trì hiệu quả tính toán hợp lý ". Vì vậy, về cơ bản, tăng k theo các bước lớn cho đến khi bạn thấy không có thay đổi nào trong cốt truyện của mình. Tóm tắt: Không có gì giống như một sự lựa chọn "tự động" cho k như lời nói của Irina S, người dùng nênluôn luôn chọn giá trị ak là một phần của thiết kế mô hình. Nếu không, bạn rất có thể phù hợp với mô hình của bạn!


chỉ là một câu hỏi làm rõ. Trong tệp họa tiết mgcv gói, nó nói k là thứ nguyên của cơ sở của các biến mà mịn là một hàm của. Khi sử dụng bs = "cr", các biến hồi quy bậc ba, tôi nghĩ rằng kích thước của cơ sở là 3. Nghĩa là, k = 3 khi bs = "cr", tôi đã sai?
vtshen

Gần như đúng nhưng không hoàn toàn. Những gì bạn nói sẽ là sự thật nếu một spline sẽ bao gồm một đa thức bậc 3 duy nhất, đây chỉ là một trường hợp đặc biệt của một spline. Một spline là một chuỗi các đa thức nối (thường là nhiều hơn một). Các spline cơ bản được sử dụng để xây dựng các spline làm mịn bao gồm nhiều đa thức nối trên các nút, bạn càng có nhiều nút thắt, mức độ tự do càng nhiều. Đó là lý do tại sao k thực chất liên quan đến số lượng nút thắt, được mô tả chi tiết trong cuốn sách của Simon Woods.
nukimov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.