Обратите внимание, что исходный вопрос, который вы опубликовали, позаботится о timeSlicing, и вам не нужно создавать timeSlices вручную.
Однако, вот как использовать createTimeSlices
для разделения данных, а затем использовать его для обучения и тестирования модели.
Шаг 0: Установка данных и trainControl
: (из вопроса)
library(caret)
library(ggplot2)
library(pls)
data(economics)
Шаг 1: Создание временных срезов для индекса данных:
timeSlices <- createTimeSlices(1:nrow(economics),
initialWindow = 36, horizon = 12, fixedWindow = TRUE)
Это создает список времени обучения и тестирования.
> str(timeSlices,max.level = 1)
## List of 2
## $ train:List of 431
## .. [list output truncated]
## $ test :List of 431
## .. [list output truncated]
Для простоты понимания, я спасаю их в отдельной переменной:
trainSlices <- timeSlices[[1]]
testSlices <- timeSlices[[2]]
Шаг 2: Обучение на первом из trainSlices
:
plsFitTime <- train(unemploy ~ pce + pop + psavert,
data = economics[trainSlices[[1]],],
method = "pls",
preProc = c("center", "scale"))
Шаг 3: Тестирование на первый из trainSlices
:
pred <- predict(plsFitTime,economics[testSlices[[1]],])
Шаг 4: Черчение:
true <- economics$unemploy[testSlices[[1]]]
plot(true, col = "red", ylab = "true (red) , pred (blue)", ylim = range(c(pred,true)))
points(pred, col = "blue")
Вы можете сделать это для всех срезах:
for(i in 1:length(trainSlices)){
plsFitTime <- train(unemploy ~ pce + pop + psavert,
data = economics[trainSlices[[i]],],
method = "pls",
preProc = c("center", "scale"))
pred <- predict(plsFitTime,economics[testSlices[[i]],])
true <- economics$unemploy[testSlices[[i]]]
plot(true, col = "red", ylab = "true (red) , pred (blue)",
main = i, ylim = range(c(pred,true)))
points(pred, col = "blue")
}
Как уже упоминалось ранее, такого рода timeSlicing делается исходной функции в одном шаге:
> myTimeControl <- trainControl(method = "timeslice",
+ initialWindow = 36,
+ horizon = 12,
+ fixedWindow = TRUE)
>
> plsFitTime <- train(unemploy ~ pce + pop + psavert,
+ data = economics,
+ method = "pls",
+ preProc = c("center", "scale"),
+ trControl = myTimeControl)
> plsFitTime
Partial Least Squares
478 samples
5 predictors
Pre-processing: centered, scaled
Resampling: Rolling Forecasting Origin Resampling (12 held-out with a fixed window)
Summary of sample sizes: 36, 36, 36, 36, 36, 36, ...
Resampling results across tuning parameters:
ncomp RMSE Rsquared RMSE SD Rsquared SD
1 1080 0.443 796 0.297
2 1090 0.43 845 0.295
RMSE was used to select the optimal model using the smallest value.
The final value used for the model was ncomp = 1.
Надеюсь, это поможет!
Это поможет, если вы определили, что вы имеете в виду «оценка модели». – topepo
Я отредактировал свой вопрос. Может быть, сейчас легче понять? –
1. необходимо установить пакет «pls» 2. Если вас беспокоит только порядок образцов (а не только месяц или год), вы можете указать им числовой идентификатор, и вы все равно можете использовать загрузку 3. почему бы не использовать что-то простое, как glm? –