检查时间序列数据的频率

时间:2013-10-07 05:37:01

标签: r time-series xts zoo

假设: 我有时间序列数据,动物园或xts对象。

问题: 有没有方便的功能或方法,以便我可以检查时间序列是月度,季度还是年度?

3 个答案:

答案 0 :(得分:6)

为此,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

答案 1 :(得分:5)

您可以计算时间戳之间的平均差异, 并检查它是否接近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 :(得分:0)

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