我想用循环中的各种alpha和beta来预测数百条记录。我的目标是通过RStudio中的两个β样本(0.1和0.9)来循环holt结果。这是代码:
library(forecast)
library(tidyverse)
library(magicfor)
magic_for(silent = TRUE)
dataset<- c(100,200,300,400,500,600,700,800,900,800,700)
x<-c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9)
#-----------HOLT FOR BETA 0.1------------------
for (alpha in x) {
des<-holt(dataset, alpha = alpha, beta=0.1)
mape<-mean(abs(des$residuals)/des$x)*100
put(beta=0.1, mape)
}
result01<-magic_result_as_dataframe()
#-----------HOLT FOR BETA 0.9------------------
for (alpha in x) {
des<-holt(dataset, alpha = alpha, beta=0.9)
mape<-mean(abs(des$residuals)/des$x)*100
put(beta=0.9, mape)
}
result02<-magic_result_as_dataframe()
但我在beta=0.9时遇到了一个错误,下面是通知:
[1] "Model: ETS(A,A,N)" Error in ets(x, "AAN", alpha = alpha, beta = beta, phi = phi, damped = damped, : No model able to be fitted
我发现问题在于数据集,如果我输入8条或更少的记录,它可以很好地预测β=0.1、0.9以及各种α和β样本。但是,如果它有8个以上的记录,它只能在β=0.1及以下(仅0.1、0.01、0.001、0.0001)的情况下进行预测,但如果β高于0.1 ,则可能是错误的
你能帮我修一下吗?提前感谢
在holt()
使用的参数化中,beta必须小于alpha。看见https://otexts.com/fpp2/estimation-and-model-selection.html以便对此进行讨论。
下面是一些代码,可以对一系列alpha和beta值执行您想要的操作。
library(forecast)
library(tidyverse)
dataset <- c(100, 200, 300, 400, 500, 600, 700, 800, 900, 800, 700)
get_mape <- function(x, alpha, beta) {
des <- holt(dataset, alpha=alpha, beta=beta)
mean(abs(des$residuals) / des$x) * 100
}
holt_mape <- expand.grid(
alpha = c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9),
betastar = c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9)
) %>%
mutate(
beta = betastar * alpha,
mape = map2_dbl(alpha, beta, get_mape, x=dataset)
) %>%
as_tibble()
holt_mape
#> # A tibble: 81 x 4
#> alpha betastar beta mape
#> <dbl> <dbl> <dbl> <dbl>
#> 1 0.1 0.1 0.01 18.5
#> 2 0.2 0.1 0.02 17.9
#> 3 0.3 0.1 0.03 16.7
#> 4 0.4 0.1 0.04 14.7
#> 5 0.5 0.1 0.05 13.6
#> 6 0.6 0.1 0.06 12.5
#> 7 0.7 0.1 0.0700 11.5
#> 8 0.8 0.1 0.08 10.6
#> 9 0.9 0.1 0.09 9.64
#> 10 0.1 0.2 0.02 19.1
#> # … with 71 more rows
由reprex包于2020-06-26创建(v0.3.0)
然而,请注意,MAPE在这里是根据训练数据计算的。通常,它将根据测试数据进行计算。