R 中的 Holt Winters 预测
Holt Winters forecast in R
我想用 Holt Winters
做一个 prediction,但我犯了一些错误。
从我的数据集中,它包含大约 10k 个值,我只想要给定范围 15-26 之外的那些。
每周所有超出我放入数据框中的范围的值 "out"。从 2020 年 1 月 2 日开始。
到目前为止一切顺利。
我每周有一个值,想与 Holt Winters 一起预测接下来几周的增长情况。但是我的情节看起来很不可理解。没有预报可看。我做错了什么?
df_B2 = fread("C:/Users/B2.csv")
df_B2$Date = as.Date(df_B2$Date, "%d.%m.%y")
df_B2$Week = strftime(df_B2$Date, format = "%V")
#Limit
limit_a = 15
limit_b = 26`
out = (df_B2 %>% filter(ExtractionTimes < limit_a | ExtractionTimes > limit_b) %>% count(Week))
str(out)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 4 obs. of 2 variables:
$ Week: chr "02" "03" "04" "05"
$ n : int 99 106 156 237
- attr(*, ".internal.selfref")=<externalptr>
out
# A tibble: 4 x 2
Week n
<chr> <int>
1 02 99
2 03 106
3 04 156
4 05 237
data = ts(out$n,start=c(2020,02), frequency = 52)
hw = HoltWinters(data, alpha=NULL, beta=FALSE, gamma=FALSE)
> p = predict (hw, n.ahead=1, level=0.95)
> plot(hw,p)
感谢您的帮助。
stats::plot.HoltWinters()
函数显示数据(黑色)以及拟合值和预测(红色)。
由于您已经在使用 tidyverse 包,您可能会发现使用 tsibble
和 fable
包更容易,它们适合 tidy 框架中的相同模型。
library(dplyr, warn.conflicts=FALSE)
library(tsibble, warn.conflicts=FALSE)
library(fable, warn.conflicts=FALSE)
#> Loading required package: fabletools
out <- tibble(
Week = c("02","03","04","05"),
n = c(99,106,156,237)
) %>%
mutate(Week = yearweek(paste0("2020 W",Week))) %>%
as_tsibble(index=Week)
out
#> # A tsibble: 4 x 2 [1W]
#> Week n
#> <week> <dbl>
#> 1 2020 W02 99
#> 2 2020 W03 106
#> 3 2020 W04 156
#> 4 2020 W05 237
out %>%
model(ses = ETS(n ~ season("N"))) %>%
forecast(h = "10 weeks") %>%
autoplot(out)
由 reprex package (v0.3.0)
于 2020-03-25 创建
该模型等同于您使用 HoltWinters()
拟合的模型,尽管 ETS()
中的参数估计使用 MLE 而不是 LS 与 HoltWinters()
。
有关如何使用这些包的教科书,请参阅 OTexts.com/fpp3。
我想用 Holt Winters
做一个 prediction,但我犯了一些错误。
从我的数据集中,它包含大约 10k 个值,我只想要给定范围 15-26 之外的那些。 每周所有超出我放入数据框中的范围的值 "out"。从 2020 年 1 月 2 日开始。
到目前为止一切顺利。
我每周有一个值,想与 Holt Winters 一起预测接下来几周的增长情况。但是我的情节看起来很不可理解。没有预报可看。我做错了什么?
df_B2 = fread("C:/Users/B2.csv")
df_B2$Date = as.Date(df_B2$Date, "%d.%m.%y")
df_B2$Week = strftime(df_B2$Date, format = "%V")
#Limit
limit_a = 15
limit_b = 26`
out = (df_B2 %>% filter(ExtractionTimes < limit_a | ExtractionTimes > limit_b) %>% count(Week))
str(out)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 4 obs. of 2 variables:
$ Week: chr "02" "03" "04" "05"
$ n : int 99 106 156 237
- attr(*, ".internal.selfref")=<externalptr>
out
# A tibble: 4 x 2
Week n
<chr> <int>
1 02 99
2 03 106
3 04 156
4 05 237
data = ts(out$n,start=c(2020,02), frequency = 52)
hw = HoltWinters(data, alpha=NULL, beta=FALSE, gamma=FALSE)
> p = predict (hw, n.ahead=1, level=0.95)
> plot(hw,p)
感谢您的帮助。
stats::plot.HoltWinters()
函数显示数据(黑色)以及拟合值和预测(红色)。
由于您已经在使用 tidyverse 包,您可能会发现使用 tsibble
和 fable
包更容易,它们适合 tidy 框架中的相同模型。
library(dplyr, warn.conflicts=FALSE)
library(tsibble, warn.conflicts=FALSE)
library(fable, warn.conflicts=FALSE)
#> Loading required package: fabletools
out <- tibble(
Week = c("02","03","04","05"),
n = c(99,106,156,237)
) %>%
mutate(Week = yearweek(paste0("2020 W",Week))) %>%
as_tsibble(index=Week)
out
#> # A tsibble: 4 x 2 [1W]
#> Week n
#> <week> <dbl>
#> 1 2020 W02 99
#> 2 2020 W03 106
#> 3 2020 W04 156
#> 4 2020 W05 237
out %>%
model(ses = ETS(n ~ season("N"))) %>%
forecast(h = "10 weeks") %>%
autoplot(out)
由 reprex package (v0.3.0)
于 2020-03-25 创建该模型等同于您使用 HoltWinters()
拟合的模型,尽管 ETS()
中的参数估计使用 MLE 而不是 LS 与 HoltWinters()
。
有关如何使用这些包的教科书,请参阅 OTexts.com/fpp3。