首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对tsibble进行预处理以运行fable包中的时间序列模型

对tsibble进行预处理以运行fable包中的时间序列模型
EN

Stack Overflow用户
提问于 2019-11-21 22:54:43
回答 1查看 160关注 0票数 1

我正在尝试对一些每月的时间序列数据运行一些模型。时间序列数据的长度不相等,也不是同月的起点/终点。我所拥有的是一个数字月份列和一个数字年份列。我已经从这两个变量创建了一个时间序列,并从中创建了一个tsibble,以便我可以使用fable包。这就是我正在做的处理时间序列数据的工作,

我在这里发布了一个模拟数据。

代码语言:javascript
运行
复制
# Packages
library(tidyverse)
library(tsibble)
library(fable)
library(fabletools)

# Simulated data
id <- c(rep (222, 28), rep(111, 36), rep(555, 16))
year <- c(rep(2014, 12), rep(2015, 12), rep(2016, 4), 
          rep(2014, 12), rep(2015, 12), rep(2016, 12), 
          rep(2015, 12), rep(2016, 4))
mnt <- c(seq(1, 12, by = 1), seq(1, 12, by = 1), seq(1, 4, by = 1),
         seq(1, 12, by = 1), seq(1, 12, by = 1), seq(1, 12, by = 1),
         seq(1, 12, by = 1), seq(1, 4, by = 1))
value <- rnorm(80, mean = 123, sd = 50)
dataf <- data.frame(id, mnt, year, value)

为了使它成为一个字符,我将我的月份变量mnt转换为一个tsibble

代码语言:javascript
运行
复制
dataf$mnt[dataf$mnt == 1] <- "Jan"
dataf$mnt[dataf$mnt == 2] <- "Feb"
dataf$mnt[dataf$mnt == 3] <- "Mar"
dataf$mnt[dataf$mnt == 4] <- "Apr"
dataf$mnt[dataf$mnt == 5] <- "May"
dataf$mnt[dataf$mnt == 6] <- "Jun"
dataf$mnt[dataf$mnt == 7] <- "Jul"
dataf$mnt[dataf$mnt == 8] <- "Aug"
dataf$mnt[dataf$mnt == 9] <- "Sep"
dataf$mnt[dataf$mnt == 10] <- "Oct"
dataf$mnt[dataf$mnt == 11] <- "Nov"
dataf$mnt[dataf$mnt == 12] <- "Dec"

将月份和年份加在一起

代码语言:javascript
运行
复制
dataf %>% unite("time", mnt:year, sep = " ")

弄得乱七八糟

代码语言:javascript
运行
复制
tsbl <- as_tsibble(dataf, index = time, key = id)

在这一点上,我遇到了这个错误,

代码语言:javascript
运行
复制
> tsbl <- as_tsibble(dataf, index = time, key = id)
Error: `var` must evaluate to a single number or a column name, not a function
Call `rlang::last_error()` to see a backtrace.

剩下的代码是这样的,

代码语言:javascript
运行
复制
# Fitting arima 
fit <- tsbl %>%
  fill_gaps(b = 0) %>% 
  model(
    arima = ARIMA(value),
  )
fit

# One month ahead forecast
fc <- fit %>%
  forecast(h = 1)
fc

# Accuracy measure
accuracy_table <- accuracy(fit)

你知道如何预处理我的数据来运行fable包中的预测模型吗?

EN

回答 1

Stack Overflow用户

发布于 2019-11-21 23:21:16

在创建time列时有两个小问题。第一种情况是,您不会将结果重新分配回dataf数据帧,而只是将结果发送到控制台。解决这个问题将会纠正你发布的错误。

下一步是您需要一个兼容的数据类型。一个字符是不够的,您需要像tsibble函数yearmonth()这样的东西来完成这项工作。为此,您将看到我颠倒了unite()调用的顺序。

相关的部分:

代码语言:javascript
运行
复制
dataf <- dataf %>% unite("time", c(year, mnt), sep = " ") %>%
  mutate(time = yearmonth(time))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58977755

复制
相关文章

相似问题

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