假设:我有一个时间序列数据,一个 zoo 或 xts 对象。
问题:有什么方便的功能或方法可以让我检查时间序列是每月、每季度还是每年?
您可以计算时间戳之间的平均差异,并检查它是否更接近 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"
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
所有上述技术假设的一件事是您不关心每个数据点的价值,所有这些都被平等对待。有谁知道如何合并每个数据点的价值?实际上找到了地区数据点的周期。可以想象一个时间序列可能有多个周期性。