Convalida incrociata GAM per testare l'errore di previsione


10

Le mie domande riguardano i GAM nel pacchetto mgcv R. A causa delle dimensioni ridotte del campione, desidero determinare l'errore di previsione utilizzando la convalida incrociata senza esclusione di dati. È ragionevole? Esiste un pacchetto o un codice come posso farlo? La errorest()funzione nel pacchetto ipred non funziona. Un semplice set di dati di test è:

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

Grazie mille per la tua mano amica!


Puoi dare un'occhiata alla funzione CVgam all'interno di-r.org/packages/cran/gamclass/docs/CVgam Spero che questo possa aiutarti
user051514

Risposte:


3

Mi piace molto il pacchetto caretper cose come questa, ma purtroppo ho appena letto che non è possibile specificare la formulain gamesattamente 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 trainselezioni 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' summaryFunctionargomento della trainControlfunzione.

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

1

Nella libreria mgcv pdf si dice;

"Data una struttura del modello specificata da una formula del modello gam, gam () tenta di trovare la fluidità appropriata per ciascun termine del modello applicabile utilizzando criteri di errore di previsione o metodi basati sulla probabilità. I ​​criteri di errore di previsione utilizzati sono la convalida incrociata generalizzata (approssimativa) (GCV o GACV) quando il parametro di scala è sconosciuto o uno stimatore di rischio non distorto (UBRE) quando è noto. "

"gam in mgcv risolve il problema della stima dei parametri di smoothing usando il criterio General Validation Crossvalation (GCV): nD / (n - DoF) 2

o

un criterio di stima del rischio non distorto (UBRE): D / n + 2sDoF / n - s "

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.