Mi piace molto il pacchetto caret
per cose come questa, ma purtroppo ho appena letto che non è possibile specificare la formula
in gam
esattamente per questo.
"Quando usi il treno con questo modello, non puoi (in questo momento) specificare la formula del gam. Il cursore ha una funzione interna che determina una formula in base a quanti livelli unici ha ogni predittore ecc. In altre parole, il treno attualmente determina quale i termini sono attenuati e quali sono semplici effetti principali lineari ".
fonte: /programming/20044014/error-with-train-from-caret-package-using-method-gam
ma se lasci che train
selezioni i termini uniformi, in questo caso produce esattamente il tuo modello. La metrica delle prestazioni predefinita in questo caso è RMSE, ma è possibile modificarla utilizzando l' summaryFunction
argomento della trainControl
funzione.
Penso che uno dei principali svantaggi di LOOCV sia che quando il set di dati è grande, ci vuole sempre. Poiché il tuo set di dati è piccolo e funziona abbastanza velocemente, penso che sia un'opzione ragionevole.
Spero che sia di aiuto.
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)
produzione:
> 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