【问题标题】:Forecasting several time series models, dplyr预测几个时间序列模型,dplyr
【发布时间】:2015-02-14 15:06:33
【问题描述】:

我想使用 dplyr 来预测几个模型。这些模型适用于时间序列数据,因此每个小时都是它自己的模型。即,hour = 1 是模型,hour = 18 是模型。

例子:

# Historical data - Basis for the models: 
df.h <- data.frame( 
  hour     = factor(rep(1:24, each = 100)),
  price    = runif(2400, min = -10, max = 125),
  wind     = runif(2400, min = 0, max = 2500),
  temp     = runif(2400, min = - 10, max = 25)  
)

# Forecasted data for wind and temp: 
df.f <- data.frame(
  hour     = factor(rep(1:24, each = 10)),
  wind     = runif(240, min = 0, max = 2500),
  temp     = runif(240, min = - 10, max = 25)  
)

我可以按小时调整每个模型:

df.h.1 <- filter(df.h, hour == 1)

fit = Arima(df.h.1$price, xreg = df.h.1[, 3:4], order = c(1,1,0))

df.f.1 <- filter(df.f, hour == 1)
forecast.Arima(fit, xreg = df.f.1[ ,2:3])$mean

但是做这样的事情会很棒:

fits <- group_by(df.h, hour) %>% 
  do(fit = Arima(df.h$price, order= c(1, 1, 0), xreg = df.h[, 3:4]))

df.f %>% group_by(hour)%>% do(forecast.Arima(fits, xreg = .[, 2:3])$mean)

【问题讨论】:

    标签: r dplyr forecasting


    【解决方案1】:

    如果要将其打包到一个调用中,可以将数据绑定到单个 data.frame 中,然后在 do 调用中再次拆分。

    df <- rbind(df.h, data.frame(df.f, price=NA))
    res <- group_by(df, hour) %>% do({
      hist <- .[!is.na(.$price), ]
      fore <- .[is.na(.$price), c('hour', 'wind', 'temp')]
      fit <- Arima(hist$price, xreg = hist[,3:4], order = c(1,1,0))
      data.frame(fore[], price=forecast.Arima(fit, xreg = fore[ ,2:3])$mean)
    })
    res
    

    【讨论】:

    • 完美!我什至不知道你可以在 do() 中做这些事情。
    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    相关资源
    最近更新 更多