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