我有一个XTS时间序列对象,它在四年内显示每月第一天的值(代表整个月的总和)。
当我在其上运行stats::acf()
函数时,我得到一个滞后(x轴)单位数十万的图。如果我的时间序列中只有48个值,那该怎么办?如果它是一个时间单位,那么哪一个,我该如何改变呢?
示例代码:
library(dplyr)
library(lubridate)
library(xts)
set.seed(100)
test <- data.frame(y = c(rep(2012, 12), rep(2013, 12), rep(2014, 12), rep(2015, 12)),
m = rep(seq(1, 12, 1), 4), d = rep(1, 48), value = runif(48, 0, 100))
test <- test %>%
mutate(date = ymd(paste(y, m, d, sep = "-"))) %>%
select(date, value)
test <- xts(test$value, test$date)
acf(test)
答案 0 :(得分:3)
从源代码中我们看到我们可以计算出这样的滞后:
sampleT <- as.integer(nrow(test))
nser <- as.integer(ncol(test))
lag.max <- floor(10 * (log10(sampleT) - log10(nser)))
x.freq <- frequency(test)
lag <- outer(0:lag.max, 1/x.freq)
# [,1]
# [1,] 0
# [2,] 86400
# [3,] 172800
# [4,] 259200
# [5,] 345600
# [6,] 432000
# [7,] 518400
# [8,] 604800
# [9,] 691200
#[10,] 777600
#[11,] 864000
#[12,] 950400
#[13,] 1036800
#[14,] 1123200
#[15,] 1209600
#[16,] 1296000
#[17,] 1382400
时间单位是频率单位的倒数。要了解如何计算该值,您需要深入了解frequency.zoo
的源代码,这些代码乍一看我很难理解。