【问题标题】:Time series analysis applicability?时间序列分析的适用性?
【发布时间】:2016-11-27 10:15:31
【问题描述】:

我有一个这样的示例数据框(日期列格式为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 和计数列。那么在这种情况下,我必须跳过日期列,并且无法对计数值进行每日预测?

  • 假设我想每天汇总计数值。我尝试使用聚合函数,但我们必须指定日期值,但我有一个非常大的数据集? r 中还有其他可用的选项吗?

有人可以建议是否有更好的方法可以遵循吗?我的假设是时间序列预测仅适用于双变量数据?这个假设对吗?

【问题讨论】:

  • 你到底想达到什么目的?也许每天汇总数据?你读过this 的帖子吗?
  • @lukeA 聚合是唯一可能的解决方案吗?是的,我想要每天预测计数值。
  • 我不知道这是否是唯一可能的解决方案。如果您从统计角度(而不是编程角度)提问,stats.stackexchange.com 可能是一个更好的提问地点。聚合(例如每天汇总计数)至少对我来说是一个简单的解决方案......

标签: r time-series forecasting


【解决方案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 对象并详细说明您想要使用的模型以及为什么,如果这是关于时间序列分析性质的概念性问题,您可能更愿意在CrossValidated 上发布您的后续问题。


数据来源:dta2 &lt;- read.delim(pipe("pbpaste"), sep = ""),使用提供的示例。

【讨论】:

    【解决方案2】:

    由于需要每日预测,我们需要汇总到每日。使用末尾注释中的DF,使用read.zoo 和参数aggregate=sum 将前两列数据读入动物园系列z。我们可以选择将其转换为"ts" 系列(tser &lt;- as.ts(z)),尽管这对于许多预测函数来说是不必要的。特别是,查看auto.arima 的源代码,我们看到它在进一步处理之前在其输入上运行x &lt;- as.ts(x)。最后运行auto.arimaforecast或其他预测函数。

    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)
    

    更新:重读问题后修改。

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 2021-06-12
      • 1970-01-01
      • 2013-09-08
      • 2020-01-09
      • 2012-11-29
      • 2018-11-15
      • 2020-06-03
      • 2013-10-20
      相关资源
      最近更新 更多