首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在我的环境中自动创建更多的模型,同时更改3个参数?

如何在我的环境中自动创建更多的模型,同时更改3个参数?
EN

Stack Overflow用户
提问于 2021-07-02 20:06:20
回答 1查看 35关注 0票数 1

一个完全可复制的例子。

代码语言:javascript
运行
复制
library(forecast)
date = seq(as.Date("2019/01/01"), by = "month", length.out = 48)

productB = rep("B",48)
productB = rep("B",48)
productA = rep("A",48)
productA = rep("A",48)

subproducts1=rep("1",48)
subproducts2=rep("2",48)
subproductsx=rep("x",48)
subproductsy=rep("y",48)

b1 <- c(rnorm(30,5), rep(0,18))
b2 <- c(rnorm(30,5), rep(0,18))
b3 <-c(rnorm(30,5), rep(0,18))
b4 <- c(rnorm(30,5), rep(0,18))

创建了下面的数据

代码语言:javascript
运行
复制
dfone <- data.frame("date"= rep(date,4),
            "product"= c(rep(productB,2),rep(productA,2)),
            "subproduct"= 
c(subproducts1,subproducts2,subproductsx,subproductsy),
            "actuals"= c(b1,b2,b3,b4))

export_df <- split(dfone[1:4], dfone[3])

基于独特子产品的数据帧的创建

代码语言:javascript
运行
复制
dummy_list <- split(dfone[1:4], dfone[3]) %>% lapply( function(x) 
x[(names(x) %in% c("date", "actuals"))])
dummy_list <-  lapply(dummy_list, function(x) { x["date"] <- NULL; x })


list_dfs <- list()
for (i in 1:length(unique(dfone$subproduct))) {
  #assign(paste0("df", i), as.data.frame(dummy_list[[i]]))
  list_dfs <-append(list_dfs,dummy_list[[i]])
}

combined_dfs <- Reduce(function(x, y) merge(x, y, all = TRUE,  
by='date'), list(list_dfs))

创建时间序列

代码语言:javascript
运行
复制
list_ts <- lapply(list_dfs, function(t) 
ts(t,start=c(2019,1),end=c(2021,6), frequency = 12)) %>%
  lapply( function(t) ts_split(t,sample.out=(0.2*length(t))))    # 
creates my train test split
list_ts <- do.call("rbind", list_ts)  #Creates a list of time series

有个问题。这不会给我超过9种型号。例如,我想要一个n1 =.1 n2=.99和n3= .3的模型,这样我们就有了9种以上的模型。

代码语言:javascript
运行
复制
n1 <- seq(0.1, 0.99, by = 0.1)
n2 <- seq(0.1, 0.99, by = 0.1)
n3 <- seq(0.1, 0.99, by = 0.1)

out<- lapply(seq_along(n1), function(i) {
   cw_triple_holtwinters_additive <- lapply(list_ts[1: 
(length(list_ts)/2)], function(x) 
       forecast::forecast(ses(x,h=24,alpha = 
n1[i],beta=n2[i],gamma=n3[i])))
    cw_triple_holtwinters_additive <- 
 lapply(cw_triple_holtwinters_additive, "[", "mean")
  assign(paste0("cw_triple_holtwinters_additive", i), 
cw_triple_holtwinters_additive, envir = .GlobalEnv)
 cw_triple_holtwinters_additive})

附加问题:对于order=c(1,1,1)和order=c(0,1,0),我是否可以创建类似这些值的列表,并同时遍历它们,就像Akrun的解决方案一样?

代码语言:javascript
运行
复制
cw_seasonal_autoregressive_integratedmovingaverage1 <- lapply(list_ts[1: 
(length(list_ts)/2)], function(x)
 forecast::forecast(arima(x,order=c(1,1,1),seasonal=list(order=c(0,1,0),
period=12)) ,h=24))

cw_seasonal_autoregressive_integratedmovingaverage1 <- 
lapply(cw_seasonal_autoregressive_integratedmovingaverage1, "[",  
c("mean"))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-02 20:10:15

我们可以使用expand.grid来获得所有的组合

代码语言:javascript
运行
复制
dat_n <- expand.grid(n1 = n1, n2= n2, n3 = n3) 

然后,我们遍历“dat_n”的行序列。

代码语言:javascript
运行
复制
out<- lapply(seq_len(nrow(dat_n)), function(i) {
   cw_triple_holtwinters_additive <- lapply(list_ts[1: 
(length(list_ts)/2)], function(x) 
       forecast::forecast(ses(x,h=24,alpha = 
dat_n$n1[i],beta=dat_n$n2[i],gamma=dat_n$n3[i])))
    cw_triple_holtwinters_additive <- 
 lapply(cw_triple_holtwinters_additive, "[", "mean")
  assign(paste0("cw_triple_holtwinters_additive", i), 
cw_triple_holtwinters_additive, envir = .GlobalEnv)
 cw_triple_holtwinters_additive})

-checking

代码语言:javascript
运行
复制
 ls(pattern = "cw_triple")
  [1] "cw_triple_holtwinters_additive1"   "cw_triple_holtwinters_additive10"  "cw_triple_holtwinters_additive100" "cw_triple_holtwinters_additive101"
  [5] "cw_triple_holtwinters_additive102" "cw_triple_holtwinters_additive103" "cw_triple_holtwinters_additive104" "cw_triple_holtwinters_additive105"
  [9] "cw_triple_holtwinters_additive106" "cw_triple_holtwinters_additive107" "cw_triple_holtwinters_additive108" "cw_triple_holtwinters_additive109"
 [13] "cw_triple_holtwinters_additive11"  "cw_triple_holtwinters_additive110" "cw_triple_holtwinters_additive111" "cw_triple_holtwinters_additive112"
 [17] "cw_triple_holtwinters_additive113" "cw_triple_holtwinters_additive114" "cw_triple_holtwinters_additive115" "cw_triple_holtwinters_additive116"
 [21] "cw_triple_holtwinters_additive117" 
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68230752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档