Validasi silang GAM untuk menguji kesalahan prediksi


10

Pertanyaan saya berkaitan dengan GAM dalam paket mgcv R. Karena ukuran sampel yang kecil saya ingin menentukan kesalahan prediksi menggunakan validasi silang leave-one-out. Apakah ini masuk akal? Apakah ada paket atau kode bagaimana saya bisa melakukan ini? The errorest()fungsi dalam ipred paket tidak bekerja. Dataset tes sederhana adalah:

library(mgcv)
set.seed(0)
dat <- gamSim(1,n=400,dist="normal",scale=2)
b<-gam(y~s(x0)+s(x1)+s(x2)+s(x3),data=dat)
summary(b)
pred <- predict(b, type="response")

Terima kasih banyak atas bantuannya!


Anda dapat melihat fungsi CVgam di dalam-r.org/packages/cran/gamclass/docs/CVgam Saya harap ini dapat membantu
user051514

Jawaban:


3

Aku benar-benar seperti paket caretuntuk hal-hal seperti ini, tapi sayangnya saya baru saja membaca bahwa Anda tidak dapat menentukan formuladi gampersis untuk itu.

"Ketika Anda menggunakan kereta dengan model ini, Anda tidak dapat (saat ini) menentukan formula gam. Caret memiliki fungsi internal yang menentukan formula berdasarkan pada berapa level unik yang dimiliki masing-masing prediktor, dll. Dengan kata lain, kereta saat ini menentukan istilah dihaluskan dan yang merupakan efek utama linear lama biasa. "

sumber: /programming/20044014/error-with-train-from-caret-package-using-method-gam

tetapi jika Anda membiarkan trainmemilih istilah yang halus, dalam hal ini menghasilkan model Anda persis. Metrik kinerja default dalam kasus ini adalah RMSE, tetapi Anda dapat mengubahnya menggunakan summaryFunctionargumen trainControlfungsi.

Saya pikir salah satu kelemahan utama dari LOOCV adalah bahwa ketika dataset besar, dibutuhkan selamanya. Karena dataset Anda kecil dan berfungsi cukup cepat, saya pikir itu adalah pilihan yang masuk akal.

Semoga ini membantu.

library(mgcv)
library(caret)

set.seed(0)

dat <- gamSim(1, n = 400, dist = "normal", scale = 2)

b <- train(y ~ x0 + x1 + x2 + x3, 
        data = dat,
        method = "gam",
        trControl = trainControl(method = "LOOCV", number = 1, repeats = 1),
        tuneGrid = data.frame(method = "GCV.Cp", select = FALSE)
)

print(b)
summary(b$finalModel)

keluaran:

> print(b)
Generalized Additive Model using Splines 

400 samples
  9 predictors

No pre-processing
Resampling: 

Summary of sample sizes: 399, 399, 399, 399, 399, 399, ... 

Resampling results

  RMSE      Rsquared 
  2.157964  0.7091647

Tuning parameter 'select' was held constant at a value of FALSE

Tuning parameter 'method' was held constant at a value of GCV.Cp

> summary(b$finalModel)

Family: gaussian 
Link function: identity 

Formula:
.outcome ~ s(x0) + s(x1) + s(x2) + s(x3)

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   7.9150     0.1049   75.44   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Approximate significance of smooth terms:
        edf Ref.df       F  p-value    
s(x0) 5.173  6.287   4.564 0.000139 ***
s(x1) 2.357  2.927 103.089  < 2e-16 ***
s(x2) 8.517  8.931  84.308  < 2e-16 ***
s(x3) 1.000  1.000   0.441 0.506929    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

R-sq.(adj) =  0.726   Deviance explained = 73.7%
GCV =  4.611  Scale est. = 4.4029    n = 400

1

Dalam pdf perpustakaan mgcv dikatakan;

"Diberikan struktur model yang ditentukan oleh formula model gam, gam () mencoba untuk menemukan kelancaran yang tepat untuk setiap istilah model yang berlaku menggunakan kriteria kesalahan prediksi atau metode berbasis kemungkinan. Kriteria kesalahan prediksi yang digunakan adalah Generalized (Approximate) Cross Validation (GCV atau GACV) ketika parameter skala tidak diketahui atau Pengukur Risiko Tidak Berbias (UBRE) saat diketahui. "

"gam in mgcv memecahkan masalah estimasi parameter smoothing dengan menggunakan kriteria Generalized Cross Validation (GCV): nD / (n - DoF) 2

atau

kriteria Un-Biased Risk Estimator (UBRE): D / n + 2sDoF / n - s "

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.