Krzyżowa walidacja GAM w celu przetestowania błędu prognozowania

10

Moje pytania dotyczą GAM w pakiecie mgcv R. Ze względu na niewielki rozmiar próbki chcę określić błąd prognozy za pomocą weryfikacji krzyżowej z pominięciem jednego z nich. Czy to rozsądne? Czy istnieje pakiet lub kod, jak to zrobić? errorest()Funkcja w IPRED pakietu nie działa. Prosty testowy zestaw danych to:

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

Bardzo dziękuję za pomocną dłoń!

Piotr
źródło
Możesz rzucić okiem na funkcję CVgam inside-r.org/packages/cran/gamclass/docs/CVgam Mam nadzieję, że to może pomóc
użytkownik051514

Odpowiedzi:

3

Naprawdę podoba mi się pakiet caretdla takich rzeczy, ale niestety po prostu przeczytałem, że nie można dokładnie podać formulaw gamnim pakietu .

„Kiedy używasz pociągu z tym modelem, nie możesz (w tym momencie) określić formuły gam. Caret ma wewnętrzną funkcję, która oblicza formułę na podstawie liczby unikalnych poziomów każdego predyktora itp. Innymi słowy, pociąg obecnie określa, która warunki są wygładzone i są zwykłymi starymi liniowymi efektami głównymi. ”

źródło: /programming/20044014/error-with-train-from-caret-package-using-method-gam

ale jeśli pozwolisz trainwybrać gładkie warunki, w tym przypadku i tak powstanie Twój model. Domyślną miarą wydajności w tym przypadku jest RMSE, ale można ją zmienić za pomocą summaryFunctionargumentu trainControlfunkcji.

Myślę, że jedną z głównych wad LOOCV jest to, że gdy zbiór danych jest duży, trwa to wiecznie. Ponieważ twój zestaw danych jest mały i działa dość szybko, myślę, że jest to rozsądna opcja.

Mam nadzieję że to pomoże.

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)

wynik:

> 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
Jeff
źródło
1

W pdf pdf biblioteki mgcv jest napisane;

„Biorąc pod uwagę strukturę modelu określoną przez formułę modelu gam, gam () próbuje znaleźć odpowiednią gładkość dla każdego odpowiedniego terminu modelu, stosując kryteria błędu prognozy lub metody oparte na prawdopodobieństwie. Zastosowane kryteria błędu prognozy to Uogólniona (przybliżona) walidacja krzyżowa (GCV lub GACV), gdy parametr skali jest nieznany, lub oszacowanie ryzyka niepowiązanego (UBRE), gdy jest znane. ”

„gam w mgcv rozwiązuje problem estymacji parametru wygładzania za pomocą kryterium uogólnionej krzyżowej walidacji (GCV): nD / (n - DoF) 2

lub

kryterium estymatora ryzyka niepowiązanego (UBRE): D / n + 2sDoF / n - s ”

Ćwiek
źródło