Cara menyetel smoothing dalam model GAM mgcv

14

Saya mencoba mencari cara untuk mengontrol parameter smoothing dalam model mgcv: gam.

Saya memiliki variabel binomial yang saya coba modelkan terutama sebagai fungsi koordinat x dan y pada grid tetap, ditambah beberapa variabel lain dengan pengaruh yang lebih kecil. Di masa lalu saya telah membangun model regresi lokal yang cukup baik dengan menggunakan paket locfit dan hanya nilai-nilai (x, y).

Namun, saya ingin mencoba memasukkan variabel lain ke dalam model, dan sepertinya model aditif umum (GAM) adalah kemungkinan yang baik. Setelah melihat paket gam dan mgcv, keduanya memiliki fungsi GAM, saya memilih yang terakhir karena sejumlah komentar di utas milis sepertinya merekomendasikannya. Satu kelemahannya adalah sepertinya tidak mendukung regresi lokal yang lebih halus seperti loess atau locfit.

Untuk memulai, saya hanya ingin mencoba meniru sekitar model locfit, menggunakan hanya (x, y) koordinat. Saya mencoba dengan smooths produk reguler dan tensor:

my.gam.te <- gam(z ~ te(x, y), family=binomial(logit), data=my.data, scale = -1)

my.gam.s  <- gam(z ~  s(x, y), family=binomial(logit), data=my.data, scale = -1)

Namun, memplot prediksi dari model, mereka jauh lebih halus dibandingkan dengan model locfit. Jadi saya sudah mencoba untuk menyetel model agar tidak terlalu berlebihan. Saya sudah mencoba menyesuaikan parameter sp dan k, tetapi tidak jelas bagi saya bagaimana mereka mempengaruhi smoothing. Di locfit, parameter nn mengontrol rentang lingkungan yang digunakan, dengan nilai yang lebih kecil memungkinkan untuk lebih halus dan lebih "bergoyang", yang membantu untuk menangkap beberapa area di grid di mana kemungkinan hasil binomial berubah dengan cepat. Bagaimana cara saya menyiapkan model gam untuk memungkinkannya berperilaku serupa?

triq kolonel
sumber

Jawaban:

22

The kArgumen efektif set up dimensi dari matriks smoothing untuk setiap istilah. gam()menggunakan skor GCV atau UBRE untuk memilih jumlah kehalusan yang optimal, tetapi hanya dapat bekerja dalam dimensi matriks penghalusan. Secara default, te()smooths memiliki k = 5^2untuk permukaan 2d. Saya lupa untuk s()apa memeriksa dokumen-dokumen itu. Saran saat ini dari Simon Wood, penulis mgcv , adalah bahwa jika tingkat kehalusan yang dipilih oleh model berada pada atau mendekati batas dimensi yang ditentukan oleh nilai yang digunakan k, Anda harus menambah kdan mereparasi model untuk melihat apakah suatu model yang lebih kompleks dipilih dari matriks smoothing dimensi yang lebih tinggi.

Namun, saya tidak tahu cara kerja locfit , tetapi Anda perlu memiliki sesuatu yang membuat Anda berhenti memasang permukaan yang terlalu rumit (GCV dan UBRE, atau (RE) ML jika Anda memilih untuk menggunakannya [Anda tidak bisa seperti Anda set scale = -1], mencoba melakukan hal itu), yang tidak didukung oleh data. Dengan kata lain, Anda bisa memasukkan fitur data yang sangat lokal tetapi apakah Anda menyesuaikan noise dalam sampel data yang Anda kumpulkan atau apakah Anda menyesuaikan rata-rata distribusi probabilitas? gam() mungkin memberi tahu Anda sesuatu tentang apa yang dapat diperkirakan dari data Anda, dengan asumsi bahwa Anda telah menyusun dimensi dasar (di atas).

Hal lain yang perlu dilihat adalah bahwa smoothers yang Anda gunakan saat ini bersifat global dalam arti bahwa smoothness yang dipilih diterapkan pada seluruh rentang smooth. Perokok adaptif dapat menghabiskan kelonggaran yang diberikan "kelonggaran" di bagian data di mana respons berubah dengan cepat. gam()memiliki kemampuan untuk menggunakan smoothers adaptif.

Lihat ?smooth.termsdan ?adaptive.smoothlihat apa yang bisa dipasang menggunakan gam(). te()dapat menggabungkan sebagian besar jika tidak semua smoothers ini (periksa dokumen yang dapat dan tidak dapat disertakan dalam produk tensor) sehingga Anda dapat menggunakan dasar yang lebih adaptif untuk mencoba menangkap skala lokal yang lebih baik di bagian data di mana responnya bervariasi dengan cepat.

Saya harus menambahkan, bahwa Anda bisa mendapatkan R untuk memperkirakan model dengan seperangkat derajat kebebasan tetap yang digunakan oleh istilah yang halus, menggunakan fx = TRUEargumen untuk s()dan te(). Pada dasarnya, atur k menjadi apa yang Anda inginkan dan fx = TRUEdan gam()hanya akan cocok dengan garis regresi tingkat kebebasan tetap bukan garis regresi yang dihukum.

Pasang kembali Monica - G. Simpson
sumber
Terima kasih banyak, Gavin, untuk jawaban terinci seperti itu. Saya benar-benar merindukan smoothers adaptif, dan akan mencoba mereka. Saya memahami keprihatinan tentang overfitting, tetapi apa yang telah saya lakukan dengan gam sejauh ini tidak menunjukkan fitur dalam data yang diketahui ada di sana melalui keahlian domain.
kolonel triq