根据过去156周,我想对接下来的52周进行预测。以下代码工作正常
my.ds <- myDS[1, -c(3,4,5,6)] #reading my source file
my.start <- myDS[1, c(3)]
my.product <- myDS[1, c("Product")]
my.product <- myDS[1, c("Location")]
my.result <- melt(my.ds, id = c("Product","Location"))
my.result[order(my.result$variable),]
my.ts <- ts(my.result$value, frequency=52, start=c(my.start,1))
my.fc <- forecast(my.ts, h=52)
my.fc
预测给了我以下输出:
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
2003.000 1637.7675 -8.610502 3284.146 -880.15039 4155.685
2003.019 1453.9059 -195.169681 3102.981 -1068.13753 3975.949
2003.038 8668.6921 7016.923492 10320.461 6142.53000 11194.854
2003.058 5851.0741 4196.616771 7505.531 3320.79997 8381.348
2003.077 4333.9240 2676.782333 5991.066 1799.54453 6868.303
2003.096 4284.5899 2624.768291 5944.412 1746.11178 6823.068
我现在想做的是:
尝试重塑这里,但不确定如何执行它,因为结果似乎没有以表格形式显示。
答案 0 :(得分:0)
以下确实提供了我想要的输出:
library(forecast)
library(reshape)
library(plyr)
#exclude non required columns
my.ds <- myDS[, -c(3,4,5,6)]
#set the required date, Product, Location
my.start <- myDS[1, c(3)]
my.product <- myDS[1, c("Product")]
my.location <- myDS[1, c("Location")]
#unpivot the table
my.result <- melt(my.ds, id = c("Product","Location"))
#run forecasting
# set the CIs we want to use here, so we can reuse this vector
cis <- c(80, 95)
# generate the forecast using those ci levels
my.ts <- ts(my.result$value, frequency=52, start=c(my.start,1))
f <- forecast(my.ts, h=52, level=cis)
# make a data frame containing the forecast information, including the index
z <- as.data.frame(cbind(seq(1:52),
f$mean,
Reduce(cbind, lapply(seq_along(cis), function(i) cbind(f$lower[,i], f$upper[,i])))))
# give the columns better names
names(z) <- c("index", "mean", paste(rep(c("lower", "upper"), times = length(cis)), rep(cis, each = 2), sep = "."))
# manipulate the results as you describe
zw <- z %>%
# keep only the variable you want and its index
mutate(sssf = upper.95 - mean) %>%
select(index, mean, sssf) %>%
# add product and location info
mutate(product = my.product,
location = my.location) %>%
# rearrange columns so it's easier to read
select(product, location, index, mean, sssf)
zw <- melt(zw, id.vars = c("product", "location", "index"), measure.vars = c("mean","sssf"))
data.set <- cast(zw, product + location ~ index + variable, value = "value")