Validation croisée GAM pour tester l'erreur de prédiction

10

Mes questions portent sur les GAM dans le package mgcv R. En raison de la petite taille de l'échantillon, je souhaite déterminer l'erreur de prédiction à l'aide de la validation croisée avec laisser-un-out. Est-ce raisonnable? Existe-t-il un package ou un code pour y parvenir? La errorest()fonction du package ipred ne fonctionne pas. Un jeu de données de test simple est:

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

Merci beaucoup pour votre coup de main!

Peter
la source
Vous pouvez jeter un œil à la fonction CVgam inside-r.org/packages/cran/gamclass/docs/CVgam J'espère que cela peut vous aider
user051514

Réponses:

3

J'aime vraiment le package caretpour des choses comme ça, mais malheureusement, je viens de lire que vous ne pouvez pas spécifier le formulapour gamexactement.

"Lorsque vous utilisez train avec ce modèle, vous ne pouvez pas (pour le moment) spécifier la formule gam. Caret a une fonction interne qui détermine une formule basée sur le nombre de niveaux uniques de chaque prédicteur, etc. En d'autres termes, le train détermine actuellement lequel les termes sont lissés et qui sont de simples effets principaux linéaires. "

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

mais si vous laissez trainsélectionner les termes lisses, dans ce cas, cela produit votre modèle exactement de toute façon. La métrique de performance par défaut dans ce cas est RMSE, mais vous pouvez la modifier à l'aide de l' summaryFunctionargument de la trainControlfonction.

Je pense que l'un des principaux inconvénients de LOOCV est que lorsque l'ensemble de données est volumineux, cela prend une éternité. Étant donné que votre ensemble de données est petit et qu'il fonctionne assez rapidement, je pense que c'est une option raisonnable.

J'espère que cela t'aides.

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)

production:

> 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
Jeff
la source
1

Dans la bibliothèque mgcv pdf, il est dit;

"Étant donné une structure de modèle spécifiée par une formule de modèle gam, gam () tente de trouver la régularité appropriée pour chaque terme de modèle applicable en utilisant des critères d'erreur de prédiction ou des méthodes basées sur la vraisemblance. Les critères d'erreur de prédiction utilisés sont la validation croisée généralisée (approximative) (GCV ou GACV) lorsque le paramètre d'échelle est inconnu ou un estimateur de risque non biaisé (UBRE) lorsqu'il est connu. "

"gam in mgcv résout le problème d'estimation des paramètres de lissage en utilisant le critère de validation croisée généralisée (GCV): nD / (n - DoF) 2

ou

un critère d'estimation de risque non biaisé (UBRE): D / n + 2sDoF / n - s "

Brad
la source