我有一个这样的示例数据框(日期列格式为mm-dd-YYYY
):
date count grp
01-09-2009 54 1
01-09-2009 100 2
01-09-2009 546 3
01-10-2009 67 4
01-11-2009 80 5
01-11-2009 45 6
我想使用ts()
将此数据框转换为时间序列,但问题是:当前数据框在同一日期有多个值。我们可以在这种情况下应用时间序列吗?
我可以将数据帧转换为时间序列,并构建一个可以每天预测计数值的模型(ARIMA)吗?
或者我应该根据grp预测计数值,但在这种情况下,我必须只选择数据帧的grp和count列。那么在这种情况下,我必须跳过日期列,并且不可能每日预测计数值?
假设我想要每天汇总计数值。我尝试使用聚合函数,但是我们必须指定日期值,但是我有一个非常大的数据集? r?
有人可以建议是否有更好的方法可以遵循?我的假设是时间序列预测仅适用于双变量数据?这个假设是对的吗?
答案 0 :(得分:1)
您的问题似乎有两个方面:
我想使用
ts()
将此数据框转换为时间序列,但是 问题是 - 当前数据帧具有多个值 日期。我们可以在这种情况下应用时间序列吗?
如果您乐意使用xts
套餐,可以尝试:
dta2$date <- as.Date(dta2$date, "%d-%m-%Y")
dtaXTS <- xts::as.xts(dta2[,2:3], dta2$date)
会导致:
>> head(dtaXTS)
count grp
2009-09-01 54 1
2009-09-01 100 2
2009-09-01 546 3
2009-10-01 67 4
2009-11-01 80 5
2009-11-01 45 6
以下课程:
>> class(dtaXTS)
[1] "xts" "zoo"
然后,您可以将时间序列对象用作单变量时间序列并引用所选变量或作为多变量时间序列,例如使用PerformanceAnalytics
包:
PerformanceAnalytics::chart.TimeSeries(dtaXTS)
关于你的第二个问题:
有人可以告诉我,有什么是更好的方法,我的 假设是时间序列预测仅适用于双变量数据?是 这个假设也对吗?恕我直言,这是相当广泛的。我建议您使用已创建的
xts
对象并详细说明您要使用的模型以及为什么,如果这是关于时间序列分析性质的概念性问题,您可能更愿意在{{3上发布您的后续问题}}
使用提供的示例通过:dta2 <- read.delim(pipe("pbpaste"), sep = "")
获取数据。
答案 1 :(得分:1)
由于需要每日预测,我们需要汇总到每日。使用最后注释中的DF
,使用z
和参数read.zoo
将前两列数据读入动物园系列aggregate=sum
。我们可以选择将其转换为"ts"
系列(tser <- as.ts(z)
),但这对于许多预测功能来说是不必要的。特别是,在进一步处理之前,检查auto.arima
的源代码,我们看到它在其输入上运行x <- as.ts(x)
。最后运行auto.arima
,forecast
或其他预测功能。
library(forecast)
library(zoo)
z <- read.zoo(DF[1:2], format = "%m-%d-%Y", aggregate = sum)
auto.arima(z)
forecast(z)
注意: DF
在此可重复使用:
Lines <- "date count grp
01-09-2009 54 1
01-09-2009 100 2
01-09-2009 546 3
01-10-2009 67 4
01-11-2009 80 5
01-11-2009 45 6"
DF <- read.table(text = Lines, header = TRUE)
更新:重新阅读问题后修改。