您可以使用aggregate
将数据转换为每日和每周间隔,然后使用对常规时间序列(例如acf
)执行的任何函数计算自相关。例如:
# make a data set to play with
library(zoo)
ts <- sort(runif(100)*168*3) # 100 observations over 3 weeks
ys <- runif(100) # y values
z <- zoo(ys, order.by=ts)
# ** convert to daily/weekly. ?aggregate.zoo
# NOTE: can use ts instead of index(z)
z.daily <- aggregate(z,index(z) %/% 24) # has 21 elements (one per day)
z.weekly <- aggregate(z,index(z) %/% 168) # has 3 elements (one per week)
# Now compute correlation, lag 1 (index in z.daily/weekly)
daily.acf <- acf(z.daily, lag.max=1)[1]
weekly.acf <- acf(z.weekly, lag.max=1)[1]
aggregate
转换为每日或每周数据,您可以在z
其中汇总每天/每周的所有事件。它通过查看index(z) %/% 24
(或 168)进行分组,这是观察小时的整数部分除以 24(即,它发生的那一天)。
然后该acf
函数计算自相关(lag
在向量的索引上,而不是在时间上)。
我不太了解统计数据,我注意到的一件事是,如果你这样做:
weekly.acf <- acf(z.daily,lag.max=7)[7]
当您从 计算自相关时,您会得到不同的答案z.weekly
,因为它对滞后为 7 的每日数据进行自相关,而对滞后为 1 的每周数据进行自相关 - 所以我不确定我在做什么实际上是你想要什么。