r - R- 转换为 TS
问题描述
我是 R 新手,目前正在努力将一组数据转换为 TS 格式。
Call_VolumeTS10 <- ts(Forecast_Data_Test$`Call Volume`, frequency = 578, start = c(2019, 1,1), end=c(2020, 7, 31))
但是,代码没有正确地将数据转换为每日时间序列。
我的代码有问题吗?
解决方案
正如@AlexB 所指出的,频率的值肯定是奇怪的定义。但是,您遇到的错误也与您如何定义start
和end
.
您不能使用长度为 3 的数字向量定义start
and end
。它必须是长度为 2 的向量:第一个数字应该是年份(或者,一般来说,已经过去的季节数),第二个数字应该是一个数字在 1 和频率值之间。
要正确编写您的 ts,您应该使用以下代码:
Call_VolumeTS10 <- ts(Forecast_Data_Test$`Call Volume`, frequency = 365.25, start = c(2019, 1))
开始、结束和频率将定义如下:
your_data <- rnorm(578)
your_ts <- ts(your_data, start = c(2019, 1), frequency = 365.25)
tsp(your_ts)
#> [1] 2019.00 2020.58 365.25
## respectively: start end frequency
但是,我想你想定义一个ts
来预测它。
问题是 365.25 的频率很少被预测方法正确处理(例如forecast::auto.arima
或forecast::ets
)。
可能您可能需要使用frequency = 7
. 当然,在这种情况下,end
时间序列定义中的值将毫无意义。
your_data <- rnorm(578)
your_ts <- ts(your_data, start = c(2019, 1), frequency = 7)
tsp(your_ts)
#> [1] 2019.000 2101.429 7.000
## respectively: start end frequency
显然,它没有任何意义。因此,以这种方式定义它会更有意义:
your_data <- rnorm(578)
your_ts <- ts(your_data, frequency = 7)
tsp(your_ts)
#> [1] 1.00000 83.42857 7.00000
## respectively: start end frequency
在这种情况下,您可以将 1.000 和 83.428 之间的差异解释为自时间序列开始以来已经过去了 82 周(加上几天)。
或者,您可以使用包中允许您定义多个频率的msts
功能。forecast
library(forecast)
msts(your_ts, start = c(2019, 1), seasonal.periods = c(7, 365.25))
your_ts
#> Multi-Seasonal Time Series:
#> Start: 2019 1
#> Seasonal Periods: 7 365.25
#> Data:
#> ...
该msts
对象与forecast::fourier
和很好地集成forecast::tbats
。
我建议你看看这个关于它的一些想法。
关于如何start
正确书写...
“2019-01-01”是一个非常方便的日子,因为 start 的正确值将是c(2019, 1)
. 但是,如果您发现自己需要编写不同的开始日期,我建议您使用此代码来定义开始时间:
start = c(lubridate::year(date), as.numeric(format(date, "%j")))
date
格式中的任何日期在哪里yyyy-mm-dd
。
推荐阅读
- python - 有没有更快的方法来减去沸点?
- python - 如何过滤具有大于指定连续整数计数的行
- variables - 如何延长函数内部局部变量的生命周期?
- javascript - 如何在 React 客户端和 AWS Websocket 之间包含标头?
- python - 当仅引用一个数组时,为两个不同的 numpy 数组分配相同的值
- django - 如何从 Django Channels 连接限制中恢复?
- hashicorp-vault - 保险柜包装令牌 - 使用次数
- statistics - 有没有办法将 Stata 中的数据从单个观察(例如经历事件的患者数量)转换为多个观察?
- javascript - 使用 JavaScript 中的自定义键将数组转换为对象
- javascript - Javascript Self-Defending是如何工作的,它是如何在美化时进入无限循环的?