我想计算一个按分组变量分组的时间序列的acf。具体来说,我有一个包含单个时间序列(变量a)和一个分组变量(例如,星期几,变量b)的数据框。下面是一个例子:
data <- data.frame(a=rnorm(1:150), b=rep(rep(1:3, each=5), 10))
现在,我想计算分组变量的不同值的acf。例如,对于滞后2和组1,我想获得t和t-2之间的相关性,该相关性仅在b=1的时间点t上计算(t-2的b值无关紧要)。我知道函数acf可以轻松计算acf,但我没有找到包括分组变量的方法。
我可以手动计算所需的相关性,但由于我的数据集很大,分组变量有很多滞后和值,我希望有一个更优雅、更快的方法。下面是上面例子的手动计算(滞后2,b=1):
sel <- which(data$b==1)
cor(data$a[sel[sel > 2]], data$a[sel[sel>2] - 2])
3条答案
按热度按时间6l7fqoea1#
如果时间序列对象是一个tsible,那么下面的代码就很有效:假设数据框名为df,您感兴趣的变量名为var,您可以另外指定max lag
df %>% group_by(Region) %>% ACF(var, lag_max = 18) %>% autoplot()
uz75evzq2#
我不确定我是否完全理解您要查找的信息,但如果您只需要多个组的acf值,这应该可以实现。有人提到创建
tidy
解决方案,该解决方案使用dplyr
、tidyr
和purrr
进行分组计算。2exbekwf3#
你可以用
split
把 Dataframe 分成桶,然后用lapply
把你的函数应用到每一组。然后,您必须从输出列表中提取所需的信息,例如使用'sapply(groups,acf,FUN=function(acfobject){acfobject$value})
对于群的计算,我也肯定会用新的方法“à la”Hadley威克姆的
%>%
算子和group_by
;学习我的待办事项。