Tahmin hatasını test etmek için GAM çapraz doğrulaması


10

Sorularım mgcv R paketindeki GAM'lerle ilgilidir . Küçük bir örneklem büyüklüğü nedeniyle, bir kereye mahsus bırakma çapraz doğrulaması kullanarak tahmin hatasını belirlemek istiyorum. Bu makul mi? Bunu nasıl yapabilirim bir paket veya kod var mı? errorest()İşlevi IPRED paketin çalışmaz. Basit bir test veri kümesi:

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

Yardım eliniz için çok teşekkür ederim!


CVgam fonksiyonuna bir göz atabilirsiniz-r.org/packages/cran/gamclass/docs/CVgam Umarım bu yardımcı olabilir
user051514

Yanıtlar:


3

Gerçekten paketin gibi caretbu gibi şeyler için ama ne yazık ki sadece belirtemeyeceğinizi okumak formulaiçinde gambunun için tam olarak.

"Bu modelle treni kullandığınızda, (şu anda) gam formülünü belirleyemezsiniz. Caret, her bir öngörücünün kaç benzersiz seviyeye sahip olduğunu temel alan bir formül belirleyen dahili bir işleve sahiptir. Başka bir deyişle, tren şu anda hangisini belirler? terimleri yumuşatılmıştır ve bunlar düz eski doğrusal ana etkilerdir. "

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

ancak trainyumuşak terimleri seçmenize izin verirseniz , bu durumda modelinizi tam olarak üretir. Bu durumda varsayılan performans metriği RMSE'dir, ancak işlev summaryFunctionbağımsız değişkenini kullanarak bunu değiştirebilirsiniz trainControl.

Bence LOOCV'nin en büyük dezavantajlarından biri, veri seti büyük olduğunda sonsuza dek sürmesidir. Veri kümeniz küçük olduğundan ve oldukça hızlı çalıştığından, mantıklı bir seçenek olduğunu düşünüyorum.

Bu yardımcı olur umarım.

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)

çıktı:

> 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

Mgcv kütüphanesinde pdf diyor ki;

"Bir gam modeli formülü tarafından belirtilen bir model yapısı göz önüne alındığında, gam (), tahmin hatası ölçütlerini veya olabilirlik tabanlı yöntemleri kullanarak her uygulanabilir model terimi için uygun düzgünlüğü bulmaya çalışır. Kullanılan tahmin hatası ölçütleri Genelleştirilmiş (Yaklaşık) Çapraz Doğrulamadır (GCV veya Scale parametresi bilinmediğinde GACV) veya biliniyorsa Eğilimli Risk Tahmincisi (UBRE). "

"mgcv'de gam, Genelleştirilmiş Çapraz Doğrulama (GCV) ölçütünü kullanarak düzgünleştirme parametresi tahmin problemini çözer: nD / (n - DoF) 2

veya

Önyargısız Risk Tahmincisi (UBRE) kriteri: D / n + 2sDoF / n - s "

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.