Перехресна перевірка GAM для перевірки помилки прогнозування


10

Мої запитання стосуються GAM в пакеті mgcv R. Через невеликий розмір вибірки я хочу визначити помилку передбачення за допомогою перехресної валідації "вихід-один-вихід". Це розумно? Чи є пакет або код, як я можу це зробити? errorest()Функція в ipred пакеті не працює. Простий набір тестів:

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

Дуже дякую за допомогу!


Ви можете подивитися на функцію CVgam inside-r.org/packages/cran/gamclass/docs/CVgam Сподіваюся, що це може допомогти
користувач051514

Відповіді:


3

Мені дуже подобається пакет caretдля речей , як це , але , до жаль , я тільки що прочитав , що ви не можете вказати formulaв gamточності для нього.

"Коли ви використовуєте поїзд з цією моделлю, ви не можете (на даний момент) вказувати формулу гри. Caret має внутрішню функцію, яка визначає формулу, виходячи з того, скільки унікальних рівнів має кожен прогноктор і т. Д. Іншими словами, в даний час поїзд визначає, який терміни згладжені і є простими старими лінійними основними ефектами ".

джерело: /programming/20044014/error-with-train-from-caret-package-using-method-gam

але якщо ви дозволяєте trainвибирати гладкі умови, у цьому випадку вона точно створює вашу модель. Показником продуктивності за замовчуванням у цьому випадку є RMSE, але ви можете змінити його, використовуючи summaryFunctionаргумент trainControlфункції.

Я думаю, що одним з головних недоліків LOOCV є те, що коли набір даних великий, він займає назавжди. Оскільки ваш набір даних невеликий і він працює досить швидко, я думаю, що це розумний варіант.

Сподіваюсь, це допомагає.

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)

вихід:

> 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

У бібліотеці mgcv pdf написано;

"Враховуючи структуру моделі, задану формулою моделі gam, модель gam () намагається знайти відповідну гладкість для кожного застосованого модельного терміна з використанням критеріїв помилки прогнозування або методів, заснованих на ймовірності. Використовувані критерії помилок прогнозування узагальнені (приблизні) перехресної валідації (GCV або GACV), коли параметр масштабу невідомий або Оцінювач необмеженого ризику (UBRE), коли він відомий. "

"gam в mgcv вирішує задачу оцінки параметра згладжування за допомогою критерію Узагальненої перехресної валідації (GCV): nD / (n - DoF) 2

або

критерій необмеженого оцінювача ризику (UBRE): D / n + 2sDoF / n - s "

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.