0

这是什么意思?我的 timeSeries 的频率是 365,不是吗?我想做的是做 3 年的每日预测,一次一天。换句话说,我想得到第二天的预测,365*3 次。

library(forecast)
df = read.csv("./files/all_var_df.csv")

ts = as.timeSeries(df[, c(1, 2)])
train = as.timeSeries(ts[0:3285, ])
validation = ts[3285:4380]

fit_hw <- hw(train)
fit2_hw <- hw(validation, model=fit_hw)
onestep_hw <- fitted(fit2_hw)

hw(train) 中的错误:时间序列的频率应大于 1。

以下是一些可以帮助您回答的信息:

class(train)
> [1] "timeSeries"

head(train, 3)
> 2005-01-01 101634.4 
> 2005-01-02 106812.5 
> 2005-01-03 119502.8 

length(train)
> [1] 3285
4

1 回答 1

1

在没有实际看到您的数据的情况下,我只能推测。但是,我可以使用 R 中的可用数据集重新创建此问题。在library(fpp2)R 中,数据集ausair包含“年度航空乘客总数(以百万计),包括在澳大利亚注册的航空公司的国内和国际飞机乘客。1970-2016。”

将该数据集作为 ts ( air <- window(ausair, start = 1990)) 读取,我们得到以下信息:

Time Series:
Start = 1990 
End = 2016 
Frequency = 1 
 [1] 17.55340 21.86010 23.88660 26.92930 26.88850 28.83140 30.07510 30.95350
 [9] 30.18570 31.57970 32.57757 33.47740 39.02158 41.38643 41.59655 44.65732
[17] 46.95177 48.72884 51.48843 50.02697 60.64091 63.36031 66.35527 68.19795
[25] 68.12324 69.77935 72.59770

我现在将使用该hw()功能进行训练:

fc <- hw(air, seasonal = "additive")

这给出了以下错误:

Error in hw(air, seasonal = "additive") : 
  The time series should have frequency greater than 1.

这里发生的是每个数据点对应一整年。因此,Holt-Winters 方法无法找到季节性。HW 方法的季节性部分遵循以下等式:

其中术语表示季节性,m表示频率。如果一个时间段内只有 1 个数据点,那么谈论重复的季节性模式是没有意义的。

解决您的问题的方法是使用ts(). 时间序列函数的一个参数是频率。在没有看到您的数据的情况下,我无法说出该值应该设置为多少。是一个解释术语频率的网站。这将取决于您的数据表现出的季节性。它每周是否重复季节性模式?每个季度?如果没有季节性模式,您可以切换到holt()仅使用指数衰减项和趋势项来查找模式并且不会给出错误的函数。

于 2019-09-27T15:17:13.430 回答