為了從具有許多模型和 id 的長格式的預測輸出與實際值中獲取準確度值,我想遍歷資料并使用 tail(input_object, -Forecast_horizo??n) 迭代地減少輸入物件。
我寧愿采用一些整潔的方法來做到這一點,因為這樣的回圈看起來既奇怪又粗糙。
library(forecast)
library(tibble)
testing_frame <- tibble(.value = rep(c(11,32,35,57,67,34),12),
test_value = rep(c(12,33,40,60,69,44),12),
id = rep(as.factor(c(rep(1,6),rep(2,6),rep(3,6),rep(4,6),rep(5,6),rep(6,6))),2),
model = as.character(c(rep(1,36),c(rep(2,36)))))
H = 6
iter = c(1:12)
datalist = list()
i = 1
for (i in iter) {
acc_all = forecast::accuracy(ts(head(testing_frame$.value,frequency = H),n=H),
ts(head(testing_frame$test_value,frequency = H),n=H))
testing_frame <- tail(testing_frame, -H)
acc_all_out = acc_all[,7]
datalist[[i]] <- acc_all_out
}
output = do.call(rbind, datalist)
uj5u.com熱心網友回復:
一種更簡潔的方法是使用資料框解包
summarise()為每個回傳的指標創建新列accuracy():
library(tidyverse)
library(forecast)
testing_frame %>%
group_by(id, model) %>%
summarise(
accuracy(
ts(.value, frequency = H),
ts(test_value, frequency = H)
) %>% as_tibble()
)
#> # A tibble: 12 x 9
#> # Groups: id [6]
#> id model ME RMSE MAE MPE MAPE ACF1 `Theil's U`
#> <fct> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
#> 2 1 2 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
#> 3 2 1 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
#> 4 2 2 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
#> 5 3 1 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
#> 6 3 2 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
#> 7 4 1 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
#> 8 4 2 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
#> 9 5 1 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
#> 10 5 2 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
#> 11 6 1 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
#> 12 6 2 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
uj5u.com熱心網友回復:
就 .value/test_value 而言,id/model 之間沒有變化,因此每次迭代的輸出都是相同的。但是,大概您的實際資料有這種變化。下面是一種按 id 和 model 分組的方法(即 12 個組),然后使用nest(), map(), andunnest_wider()來得到你的結果
testing_frame %>% group_by(id, model) %>%
nest() %>%
mutate(acc = map(data,~accuracy(ts(.x$.value, frequency = H),ts(.x$test_value,frequency=H)))) %>%
unnest_wider(acc) %>%
rename_all(~c("id","model", "data","ME","RMSE","MAE","MPE","MAPE","ACF1", "Theil's U"))
輸出:
id model data ME RMSE MAE MPE MAPE ACF1 `Theil's U`
<fct> <chr> <list> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 <tibble [6 x 2]> 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
2 2 1 <tibble [6 x 2]> 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
3 3 1 <tibble [6 x 2]> 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
4 4 1 <tibble [6 x 2]> 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
5 5 1 <tibble [6 x 2]> 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
6 6 1 <tibble [6 x 2]> 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
7 1 2 <tibble [6 x 2]> 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
8 2 2 <tibble [6 x 2]> 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
9 3 2 <tibble [6 x 2]> 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
10 4 2 <tibble [6 x 2]> 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
11 5 2 <tibble [6 x 2]> 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
12 6 2 <tibble [6 x 2]> 3.67 4.83 3.67 9.08 9.08 -0.114 0.128
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/436054.html
