如何使用CART模型预测时间序列

时间:2015-11-10 04:36:35

标签: r time-series prediction

我正在使用R的rpart图书馆来预测来自澳大利亚的电力消耗(例如来自R的入门时间序列一书):

library(rpart)
www <- "http://staff.elena.aut.ac.nz/Paul-Cowpertwait/ts/cbe.dat"
CBE <- read.table(www, header = T)
Elec.ts <- ts(CBE[, 3], start = 1958, freq = 12)

plot(cbind(Elec.ts))


fit <- rpart(elec~elec, method="anova", data=CBE)
pre <- predict(fit)

Elec.predict <- ts(pre[], start = 1958, freq = 12)
plot(cbind(Elec.ts,Elec.predict ))

如果我尝试使用自己的电子数据尝试创建模型,那么R程序无法运行非常简单。

我用错了吗?
我该如何正确使用这个库?

1 个答案:

答案 0 :(得分:1)

使用此脚本解决问题。

我创建了一个github网站,其中包含有关脚本和时间序列数据的所有信息。 http://alvarojoao.github.io/timeseriesExamples

library(caret)
library(ggplot2)
library(pls)
library(data.table)
library(rpart)
library(bst)
library(plyr)

nLag <- 12
khorizon <- 1

www <- "./databases/elec.dat"
CBE <- read.table(www, header = T)
base <- CBE
variable <- 'elec'
base$elec = (base$elec-min(base$elec))/(max(base$elec)-min(base$elec))

base <- setDT(base)[, paste0(variable, 1:nLag) := shift(elec, 1:nLag)][]
base <- base[(nLag+1):nrow(base),]

Elec.ts <- ts(CBE[, 1], start = 1958, freq = 12)
acf(CBE$elec)
plot(cbind(Elec.ts))



timeSlices <- createTimeSlices(1:nrow(base), 
                   initialWindow =nrow(base)*2/3, horizon = khorizon , fixedWindow = FALSE)
str(timeSlices,max.level = 1)
trainSlices <- timeSlices[[1]]
testSlices <- timeSlices[[2]]
predTest  <- c(1,2)
predTest  <- predTest[0]
trueTest  <- c(1,2)
trueTest  <- trueTest[0]

for(i in 1:length(trainSlices)){

  plsFitTime <- train(elec ~  .,
                      data = base[trainSlices[[i]],], 
                      method = "treebag"
                      )



  pred <- predict(plsFitTime,base[testSlices[[i]],])


  true <- base$elec[testSlices[[i]]]
}