问题描述
我是 tidymodels 和 modeltime 包的新用户。我发现这些包对于拥有来自不同包的不同模型的相同界面非常有用。我尝试使用 forecast::ets 包中的指数平滑来微调时间序列。这是一个可重现的示例:
library(tidymodels)
library(modeltime)
library(tidyverse)
library(lubridate)
myTS <- c(600,500,225,50,1025,1000,950,6975,2400,1250,3500,3125,900,2900,600,2150,1800,750,1650,925,1075,4575,3725,1100,450,175,1275,1575,1500,4525,2000,1350,300,425,475,25,575,325,275,200,350,1175,250,400,650,425)
myDate <- seq(as_date("2016-06-01"),as_date("2021-05-01"),"months")
TabTS <- bind_cols(YearMonth=myDate,Sum_Qty_kg = myTS)
# Split Data 80/20
splits <- initial_time_split(TabTS,prop = 0.8)
data_train <- training(splits)
data_test <- testing(splits)
### Exponential Smoothing Holt-Winters ###
tune_ets <- exp_smoothing(
error = "auto",trend = "auto",season = "auto",smooth_level = tune(),smooth_trend = tune(),smooth_seasonal = tune()
) %>%
set_engine("ets")
grid_ets <- grid_regular(
parameters(
list(
smooth_level = smooth_level(range = c(0.1,0.8)),smooth_trend = smooth_trend(range = c(0.1,smooth_seasonal = smooth_seasonal(range = c(0.1,0.8))
#,error = error()
#,trend = trend(values = c("additive","multiplicative"))
#,season = season(values = c("additive","multiplicative"))
)
)
)
# Apply the functions to the inputs and models ----------------------------
ForecastModel_FineTune <- function(tune_model,grid_model,IsBoost = "N"){
### Step 2: Select parameters via Fine tuning ###
# model_recipe <- recipe(Sum_Qty_kg ~ YearMonth,data = data_train)
if(IsBoost == "Y") model_recipe <- recipe(Sum_Qty_kg ~ YearMonth,data = data_train) %>% step_date(YearMonth,features = "month",ordinal = FALSE) %>% step_mutate(date_num = as.numeric(YearMonth)) else model_recipe <- recipe(Sum_Qty_kg ~ YearMonth,data = data_train)
model_workflow <- workflow() %>%
add_model(tune_model) %>%
add_recipe(model_recipe)
resampling_strategy <- data_train %>%
time_series_cv(date_var = YearMonth,initial = floor(0.8*nrow(data_train)),assess = nrow(data_train) - floor(0.8*nrow(data_train))
#,skip = "3 months"
#,slice_limit = 4
)
model_tune_results <- model_workflow %>%
tune_grid(resamples = resampling_strategy,grid = grid_model,metrics = metric_set(rmse,mae)
)
best_model <- model_tune_results %>%
select_best("rmse")
### Step 3: Finalizing the model ###
model_final <- model_workflow %>%
finalize_workflow(best_model) %>%
fit(data_train) %>%
modeltime_table()
### Step 4: Calibrate the model to a testing set
calibration_model <- model_final %>%
modeltime_calibrate(new_data = data_test)
### Step 5: Testing Set Forecast & Accuracy Evaluation ###
forecast_model <- calibration_model %>%
modeltime_forecast(
new_data = data_test,actual_data = TabTS
)
return(list(model_tune_results = model_tune_results,forecast_model = forecast_model))
}
forecast_ets <- ForecastModel_FineTune(tune_ets,grid_ets)
运行此示例时,出现以下错误:
frequency = 9.5 observations per 1 year
frequency = 9.5 observations per 1 year
frequency = 9.5 observations per 1 year
frequency = 9.5 observations per 1 year
x Slice1: preprocessor 1/1,model 4/27: Error in forecast::ets(outcome,model = model_ets,damped = damping_ets,: No model able to be fitted
frequency = 9.5 observations per 1 year
frequency = 9.5 observations per 1 year
frequency = 9.5 observations per 1 year
x Slice1: preprocessor 1/1,model 7/27: Error in forecast::ets(outcome,: No model able to be fitted
frequency = 9.5 observations per 1 year
x Slice1: preprocessor 1/1,model 8/27: Error in forecast::ets(outcome,: No model able to be fitted
frequency = 9.5 observations per 1 year
frequency = 9.5 observations per 1 year
frequency = 9.5 observations per 1 year
frequency = 9.5 observations per 1 year
x Slice1: preprocessor 1/1,model 12/27: Error in forecast::ets(outcome,model 13/27: Error in forecast::ets(outcome,: No model able to be fitted
frequency = 9.5 observations per 1 year
frequency = 9.5 observations per 1 year
x Slice1: preprocessor 1/1,model 15/27: Error in forecast::ets(outcome,model 16/27: Error in forecast::ets(outcome,model 17/27: Error in forecast::ets(outcome,model 18/27: Error in forecast::ets(outcome,model 20/27: Error in forecast::ets(outcome,model 21/27: Error in forecast::ets(outcome,model 22/27: Error in forecast::ets(outcome,model 23/27: Error in forecast::ets(outcome,model 24/27: Error in forecast::ets(outcome,model 25/27: Error in forecast::ets(outcome,model 26/27: Error in forecast::ets(outcome,model 27/27: Error in forecast::ets(outcome,: No model able to be fitted
frequency = 12 observations per 1 year
Warning message:
In `[.tbl_df`(x,is.finite(x <- as.numeric(x))) :
NAs introduced by coercion
似乎对于不同参数值的某些组合,没有模型能够拟合。这个问题是怎么来的?我尝试了另一个时间序列,但问题仍然存在。我怎样才能避免它?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)