J'aime vraiment le package caret
pour des choses comme ça, mais malheureusement, je viens de lire que vous ne pouvez pas spécifier le formula
pour gam
exactement.
"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 train
sé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' summaryFunction
argument de la trainControl
fonction.
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