【问题标题】:Check the frequency of time series data检查时间序列数据的频率
【发布时间】:2013-10-13 14:33:46
【问题描述】:

假设: 我有一个时间序列数据,可以是 zoo 也可以是 xts 对象。

问题: 有什么方便的函数或方法可以让我检查时间序列是每月、每季度还是每年?

【问题讨论】:

  • 不确定这是否有帮助,但是使用源自ts 的基本 R 时间序列,这可以通过 frequency 轻松实现。
  • 感谢您的回复,@vitale232。我实际上已经尝试过频率()。不幸的是,当应用于我从 FRED 获取的所有时间数据时,它只给出 1,无论数据本身是季度还是月度。
  • 这个问题似乎是题外话,因为它是关于统计而不是编程。另外,已经在stats.stackexchange.com/a/1214/159回复了
  • 嗨,@RobHyndman,感谢您的评论。我最初的想法是寻找一些已经建立的功能(如果它们曾经存在的话)。感谢您通过链接向我推荐有趣的讨论。

标签: r time-series xts zoo


【解决方案1】:

您可以计算时间戳之间的平均差异, 并检查它是否更接近 1(每日数据)、7(每周)等。

guess_period <- function(x) { 
  average_period <- as.double( mean(diff(index(x))), units="days" )
  difference <- abs(log( average_period / c(
    daily = 1,
    business_days = 7/5,
    weekly = 7,
    monthly = 30,
    quarterly = 365/4,
    annual = 365
  ) ) )
  names( which.min( difference ) )
}

# Examples
library(quantmod)
getSymbols("^GSPC")
guess_period( GSPC )
# [1] "business_days"

getSymbols('CPIAUCNS',src='FRED')
guess_period( CPIAUCNS )
# [1] "monthly"

【讨论】:

  • 太棒了!它完全符合我的预期。非常感谢!
【解决方案2】:

xts 包具有用于此目的的函数periodicity

library(quantmod)
getSymbols("^GSPC")
periodicity(GSPC)
# Daily periodicity from 2007-01-03 to 2013-10-04
getSymbols("CPIAUCNS", src="FRED")
periodicity(CPIAUCNS)
# Monthly periodicity from 1913-01-01 to 2013-08-01

【讨论】:

    【解决方案3】:

    上述所有技术假设的一件事是您不关心每个数据点的价值,所有这些都被平等对待。有谁知道如何合并每个数据点的价值?实际上找到了地区数据点的周期。可以想象一个时间序列可能有多个周期性。

    【讨论】:

      猜你喜欢
      • 2013-02-12
      • 1970-01-01
      • 2015-05-20
      • 2021-01-26
      • 2020-10-13
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多