GAM перекрестная проверка для проверки ошибки предсказания

10

Мои вопросы касаются GAMs в пакете 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. Надеюсь, это поможет
user051514

Ответы:

3

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

«Когда вы используете поезд с этой моделью, вы не можете (в настоящее время) указать формулу игры. У каретки есть внутренняя функция, которая вычисляет формулу на основе количества уникальных уровней, которые имеет каждый предиктор, и т. Д. термины сглажены и представляют собой простые старые линейные основные эффекты ".

источник: /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 () пытается найти подходящую гладкость для каждого применимого термина модели, используя критерии ошибки прогнозирования или методы, основанные на вероятности. В качестве критериев ошибки прогнозирования используется обобщенная (приблизительная) перекрестная проверка (GCV или GACV), когда параметр масштаба неизвестен, или оценщик непредвзятого риска (UBRE), когда он известен ".

«gam in mgcv решает задачу оценки параметров сглаживания с использованием критерия обобщенной перекрестной проверки (GCV): nD / (n - DoF) 2

или

критерий оценки непредвзятого риска (UBRE): D / n + 2sDoF / n - s "

штифтик
источник