ts对象不适用于R中的日常数据-非常混乱
我花了一天的时间来寻找这个问题的答案,但仍然无法弄清楚它是如何工作的(对R来说相对较新) 数据: 我有一家商店的每日收入。开始日期为2017年11月,结束日期为2020年2月。(这不是每年1月至12月的典型数据)。没有遗漏价值,每天的销售额都会被记录下来。共有两列:日期(正确的日期格式)和收入(数字格式) 我正试图为我的销售数据建立一个时间序列预测模型。一个先决条件是,我需要将数据转换为ts对象。我在网上看到的所有帖子都涉及年度或月度数据,但我还没有看到有人提到每日数据 我试图以这种方式将数据转换为ts对象(我将数据命名为“d”):ts对象不适用于R中的日常数据-非常混乱,r,timestamp,time-series,forecast,R,Timestamp,Time Series,Forecast,我花了一天的时间来寻找这个问题的答案,但仍然无法弄清楚它是如何工作的(对R来说相对较新) 数据: 我有一家商店的每日收入。开始日期为2017年11月,结束日期为2020年2月。(这不是每年1月至12月的典型数据)。没有遗漏价值,每天的销售额都会被记录下来。共有两列:日期(正确的日期格式)和收入(数字格式) 我正试图为我的销售数据建立一个时间序列预测模型。一个先决条件是,我需要将数据转换为ts对象。我在网上看到的所有帖子都涉及年度或月度数据,但我还没有看到有人提到每日数据 我试图以这种方式将数据转
d_ts该ts
功能可以在任何时间间隔内工作,该时间间隔由起点和终点定义。当您使用日期时,一个单位对应一天,因为这是它们在内部存储的方式。位于?ts
的帮助文件还显示了如何使用年度或季度数据的示例
要正确读取每日数据,您需要设置frequency=1
。使用与您所拥有的数据结构类似的数据:
#Compile a dataframe like yours
library(lubridate)
set.seed(0)
d <- data.frame(date=seq.Date(dmy("01/11/2017/"), by="day", length.out=892))
d$revenue <- runif(892)
head(d)
#date revenue
# 1 2017-11-01 0.8966972
# 2 2017-11-02 0.2655087
# 3 2017-11-03 0.3721239
# 4 2017-11-04 0.5728534
# 5 2017-11-05 0.9082078
# 6 2017-11-06 0.2016819
#Convert to timeseries object
d_ts <- ts(d$revenue, start=min(d$date), end = max(d$date), frequency = 1)
d_ts
# Time Series:
# Start = 17471
# End = 18362
# Frequency = 1
# [1] 0.896697200 0.265508663 0.372123900 0.572853363 0.908207790 0.201681931 0.898389685 0.944675269 0.660797792
# [10] 0.629114044 0.061786270 0.205974575 0.176556753 0.687022847 0.384103718 0.769841420 0.497699242 0.717618508
#编译一个类似您的数据帧
图书馆(lubridate)
种子集(0)
dts
功能可以在任何时间间隔内工作,该时间间隔由起点和终点定义。当您使用日期时,一个单位对应一天,因为这是它们在内部存储的方式。位于?ts
的帮助文件还显示了如何使用年度或季度数据的示例
要正确读取每日数据,您需要设置frequency=1
。使用与您所拥有的数据结构类似的数据:
#Compile a dataframe like yours
library(lubridate)
set.seed(0)
d <- data.frame(date=seq.Date(dmy("01/11/2017/"), by="day", length.out=892))
d$revenue <- runif(892)
head(d)
#date revenue
# 1 2017-11-01 0.8966972
# 2 2017-11-02 0.2655087
# 3 2017-11-03 0.3721239
# 4 2017-11-04 0.5728534
# 5 2017-11-05 0.9082078
# 6 2017-11-06 0.2016819
#Convert to timeseries object
d_ts <- ts(d$revenue, start=min(d$date), end = max(d$date), frequency = 1)
d_ts
# Time Series:
# Start = 17471
# End = 18362
# Frequency = 1
# [1] 0.896697200 0.265508663 0.372123900 0.572853363 0.908207790 0.201681931 0.898389685 0.944675269 0.660797792
# [10] 0.629114044 0.061786270 0.205974575 0.176556753 0.687022847 0.384103718 0.769841420 0.497699242 0.717618508
#编译一个类似您的数据帧
图书馆(lubridate)
种子集(0)
d对于日常数据,最好使用tsibble
类,而不是ts
类。可通过fable
软件包获得建模和预测工具
库(tsible)
图书馆(寓言)
种子(1)
d_tsibble%
as_tsible(索引=日期)
杜易布尔
#>#一个易位:892x2[1D]
#>日期收入
#>
#> 1 2017-11-01 -0.626
#> 2 2017-11-02 0.184
#> 3 2017-11-03 -0.836
#> 4 2017-11-04 1.60
#> 5 2017-11-05 0.330
#> 6 2017-11-06 -0.820
#> 7 2017-11-07 0.487
#> 8 2017-11-08 0.738
#> 9 2017-11-09 0.576
#> 10 2017-11-10 -0.305
#>#…还有882行
d_tsibble%>%
模型(
arima=arima(收入)
) %>%
预测(h=“14天”)
#>#寓言:14 x 4[1D]
#>#键:。型号[1]
#>.模型日期收入.分配
#>
#>1 arima 2020-04-11-0.0178 N(-1.8e-02,1.1)
#>2 arima 2020-04-12-0.0117 N(-1.2e-02,1.1)
#>3 arima 2020-04-13-0.00765 N(-7.7e-03,1.1)
#>4 arima 2020-04-14-0.00501北纬(-5.0e-03,1.1)
#>5 arima 2020-04-15-0.00329 N(-3.3e-03,1.1)
#>6 arima 2020-04-16-0.00215 N(-2.2e-03,1.1)
#>7 arima 2020-04-17-0.00141 N(-1.4e-03,1.1)
#>8 arima 2020-04-18-0.000925N(-9.2e-04,1.1)
#>9 arima 2020-04-19-0.000606 N(-6.1e-04,1.1)
#>10 arima 2020-04-20-0.000397 N(-4.0e-04,1.1)
#>11 arima 2020-04-21-0.000260牛顿(-2.6e-04,1.1)
#>12 arima 2020-04-22-0.000171N(-1.7e-04,1.1)
#>13 arima 2020-04-23-0.000112N(-1.1e-04,1.1)
#>14 arima 2020-04-24-0.0000732 N(-7.3e-05,1.1)
由(v0.3.0)创建于2020-04-01,具有每日数据,您最好使用tsibble
类,而不是ts
类。可通过fable
软件包获得建模和预测工具
库(tsible)
图书馆(寓言)
种子(1)
d_tsibble%
as_tsible(索引=日期)
杜易布尔
#>#一个易位:892x2[1D]
#>日期收入
#>
#> 1 2017-11-01 -0.626
#> 2 2017-11-02 0.184
#> 3 2017-11-03 -0.836
#> 4 2017-11-04 1.60
#> 5 2017-11-05 0.330
#> 6 2017-11-06 -0.820
#> 7 2017-11-07 0.487
#> 8 2017-11-08 0.738
#> 9 2017-11-09 0.576
#> 10 2017-11-10 -0.305
#>#…还有882行
d_tsibble%>%
模型(
arima=arima(收入)
) %>%
预测(h=“14天”)
#>#寓言:14 x 4[1D]
#>#键:。型号[1]
#>.模型日期收入.分配
#>
#>1 arima 2020-04-11-0.0178 N(-1.8e-02,1.1)
#>2 arima 2020-04-12-0.0117 N(-1.2e-02,1.1)
#>3 arima 2020-04-13-0.00765 N(-7.7e-03,1.1)
#>4 arima 2020-04-14-0.00501北纬(-5.0e-03,1.1)
#>5 arima 2020-04-15-0.00329 N(-3.3e-03,1.1)
#>6 arima 2020-04-16-0.00215 N(-2.2e-03,1.1)
#>7 arima 2020-04-17-0.00141 N(-1.4e-03,1.1)
#>8 arima 2020-04-18-0.000925N(-9.2e-04,1.1)
#>9 arima 2020-04-19-0.000606 N(-6.1e-04,1.1)
#>10 arima 2020-04-20-0.000397 N(-4.0e-04,1.1)
#>11 arima 2020-04-21-0.000260牛顿(-2.6e-04,1.1)
#>12 arima 2020-04-22-0.000171N(-1.7e-04,1.1)
#>13 arima 2020-04-23-0.000112N(-1.1e-04,1.1)
#>14 arima 2020-04-24-0.0000732 N(-7.3e-05,1.1)
由(v0.3.0)于2020-04-01创建,关于R中的预测及其实现。在R中做任何与预测有关的事情时,我都像圣经一样使用它。我想你需要frequency=1
,此时你正在为每天创建365个观测值。或者,您可以将日期转换为一年中的一天和一年中的一天(例如使用lubridate),频率为365。@谢谢!请确认:频率=1意味着每天观察一次(与我有一个年度周期相反)。我可以再问一个问题吗?如果我有另一列(比如说,支出),我稍后计划将其用作我的模型的外部回归器,是否可以将一个3列数据集(第1列日期、第2列收入-目标变量、第3列支出-外部回归器)放入TS对象?@user275