Si noti che la domanda originale che è stata inviata, si occupa di timeSlicing e non è necessario creare timeSlices a mano.
Tuttavia, ecco come utilizzare createTimeSlices
per suddividere i dati e quindi utilizzarli per addestrare e testare un modello.
Fase 0: Impostazione dei dati e trainControl
: (dalla tua domanda)
library(caret)
library(ggplot2)
library(pls)
data(economics)
Fase 1: Creare le porzione di tempo per l'indice dei dati:
timeSlices <- createTimeSlices(1:nrow(economics),
initialWindow = 36, horizon = 12, fixedWindow = TRUE)
Questo crea una lista di formazione e test timeSlices.
> str(timeSlices,max.level = 1)
## List of 2
## $ train:List of 431
## .. [list output truncated]
## $ test :List of 431
## .. [list output truncated]
Per una maggiore comprensione, io li sto salvando in variabile separata:
trainSlices <- timeSlices[[1]]
testSlices <- timeSlices[[2]]
Fase 2: Formazione sul primo del trainSlices
:
plsFitTime <- train(unemploy ~ pce + pop + psavert,
data = economics[trainSlices[[1]],],
method = "pls",
preProc = c("center", "scale"))
Fase 3: Test su il primo degli trainSlices
:
pred <- predict(plsFitTime,economics[testSlices[[1]],])
Fase 4: Tracciato:
true <- economics$unemploy[testSlices[[1]]]
plot(true, col = "red", ylab = "true (red) , pred (blue)", ylim = range(c(pred,true)))
points(pred, col = "blue")
È quindi possibile fare questo per tutte le fette:
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")
}
Come accennato in precedenza, questo tipo di timeslicing è fatto dalla funzione originale in un unico passaggio:
> 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.
Spero che questo aiuti !!
Sarebbe utile se si è definito cosa si intende per "valutazione del modello". – topepo
Ho modificato la mia domanda. Forse in questo momento è più facile da capire? –
1. il pacchetto 'pls' deve essere installato 2. se si è interessati solo all'ordine dei campioni (non al mese o all'anno in particolare), è possibile fornire loro un ID numerico e si può ancora usare il bootstrap 3. perché non usare qualcosa di semplice come un glm? –