Memilih simpul untuk GAM

9

Saat memilih jumlah simpul yang tepat untuk GAM, orang mungkin ingin mempertimbangkan jumlah data dan peningkatan pada sumbu x.

Bagaimana jika kita memiliki 100 peningkatan pada sumbu x dengan 1000 titik data pada setiap kenaikan.

Info di sini mengatakan:

Jika tidak disediakan maka simpul spline ditempatkan secara merata di seluruh nilai kovariat yang merujuk istilah: Misalnya, jika memasang data 101 dengan spline 11 simpul x maka akan ada simpul pada setiap tanggal 10 (dipesan) nilai x.

Jadi awal dasar harus 9 knot dalam contoh ini? Saya hanya tidak yakin kisaran knot apa yang cocok untuk kumpulan data ini karena sangat cocok untuk jumlah yang sangat kecil hingga sangat besar.

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")

Jika k = 25 memberikan kecocokan yang bermanfaat, apakah masuk akal untuk data ini?

pengguna1320502
sumber

Jawaban:

12

Opsi yang jauh lebih baik adalah menyesuaikan model Anda menggunakan gam () dalam paket mgcv, yang berisi metode yang disebut Generalized Cross-validation (GCV). GCV akan secara otomatis memilih jumlah simpul untuk model Anda sehingga kesederhanaan seimbang dengan kekuatan penjelas. Saat menggunakan gam () dalam mgcv, nyalakan GCV dengan mengatur k ke sama -1.

Seperti ini:

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

Untuk merencanakan garis halus Anda, Anda harus mengekstrak model yang sesuai. Ini harus melakukan trik:

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

Anda juga dapat menyesuaikan k secara manual, dan melihat jumlah k yang membawa Anda paling dekat dengan nilai k yang diatur secara otomatis oleh GCV.

Ira S
sumber
Apa yang dilakukan bs = "cs"istilah dalam spline?
user321627
1
"cs" menetapkan bahwa dasar untuk penghalusan adalah spline kubik.
Manuel Bickel
Tidak menentukan ksetara dengan menentukan k=-1?
Nakx
Tidak yakin saya benar-benar mengerti Nakx, tapi saya akan mengklarifikasi bahwa k = -1 akan memungkinkan model untuk menentukan jumlah optimal node menggunakan Generalized Cross Validation. Menyesuaikan secara manual akan memungkinkan perbandingan bagaimana model sesuai perubahan berdasarkan jumlah node. Itu bisa berwawasan luas, dan dapat membantu menggambarkan fenomena yang menarik.
Ira S
+1 Jawaban bagus! Bagaimana Anda memvisualisasikan bagaimana spline itu terjadi? Maksud saya, grafik koefisien?
Erosennin
6

Dari mana datangnya ide bahwa GCV akan secara otomatis memilih jumlah simpul? Jumlah simpul (yaitu, dimensi dasar) adalah tetap dan tidak dapat diubah selama fit model. Apa yang skor GCV dalam fungsi gam () lakukan "secara otomatis" bukanlah memilih dimensi dasar k, seperti yang dikatakan Ira S, tetapi memilih tingkat kelancaran dari setiap basis spline dengan memperkenalkan hukuman kebodohan dalam gol minimizer atau pas. Untuk memilih jumlah simpul k Anda harus menggunakan nilai yang lebih besar dari jumlah derajat kebebasan yang Anda harapkan. Mengutip bantuan select.k: "pilihan tepat k umumnya tidak kritis: harus dipilih untuk menjadi cukup besar sehingga Anda cukup yakin memiliki derajat kebebasan yang cukup untuk mewakili 'kebenaran' yang mendasarinya dengan cukup baik, tetapi cukup kecil. untuk menjaga efisiensi komputasi yang masuk akal ". Jadi, pada dasarnya tingkatkan k dalam langkah besar sampai Anda tidak melihat perubahan dalam plot Anda, misalnya. Meringkas: Tidak ada yang seperti pilihan "otomatis" untuk k seperti yang dikatakan Ira S, pengguna harusselalu memilih nilai ak sebagai bagian dari desain model. Kalau tidak, Anda kemungkinan besar kurang cocok dengan model Anda!

nukimov
sumber
hanyalah pertanyaan klarifikasi. Dalam file sketsa paket mgcv, dikatakan k adalah dimensi basis variabel yang menjadi fungsi dari smooth. Ketika menggunakan bs = "cr", regresi kubik splines, saya pikir dimensi dasarnya adalah 3. Yaitu, k = 3 ketika bs = "cr", apakah saya salah?
vtshen
Hampir benar tetapi tidak cukup. Apa yang Anda katakan akan benar jika spline terdiri dari polinomial tingkat 3 tunggal, yang hanya merupakan kasus khusus dari spline. Spline adalah serangkaian polinomial bersambung (biasanya lebih dari satu). Dasar splines yang digunakan untuk membuat spline smoothing terdiri dari banyak polinomial yang bergabung pada simpul, semakin banyak simpul yang Anda miliki, semakin banyak derajat kebebasan. Itulah sebabnya k secara intrinsik terkait dengan jumlah simpul, yang dirinci dijelaskan dalam buku Simon Woods.
nukimov