Me gusta mucho el paquete caret
para este tipo de cosas, pero por desgracia acabo de leer que no se puede especificar el formula
en gam
exactamente para ello.
"Cuando usas train con este modelo, no puedes (en este momento) especificar la fórmula gam. Caret tiene una función interna que calcula una fórmula basada en cuántos niveles únicos tiene cada predictor, etc. En otras palabras, train actualmente determina qué los términos se suavizan y son simples efectos principales lineales antiguos ".
fuente: /programming/20044014/error-with-train-from-caret-package-using-method-gam
pero si permite train
seleccionar los términos suaves, en este caso produce su modelo exactamente de todos modos. La métrica de rendimiento predeterminada en este caso es RMSE, pero puede cambiarla utilizando el summaryFunction
argumento de la trainControl
función.
Creo que uno de los principales inconvenientes de LOOCV es que cuando el conjunto de datos es grande, lleva una eternidad. Como su conjunto de datos es pequeño y funciona bastante rápido, creo que es una opción sensata.
Espero que esto ayude.
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)
salida:
> 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